Enforce limit of NSIG signals.
authorTobias Stoeckmann <tobias@stoeckmann.org>
Mon, 22 Apr 2019 17:58:56 +0000 (19:58 +0200)
committerTobias Stoeckmann <tobias@stoeckmann.org>
Fri, 26 Apr 2019 16:15:50 +0000 (18:15 +0200)
It doesn't make sense to allow a signal number higher than NSIG.

The NSIG check already exists in signal.c for internally used
functions.

As this is a programming error of libevent consumers, this is a
purely defensive mechanism.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
evmap.c

diff --git a/evmap.c b/evmap.c
index 9f46dd0f06d3b343ccbd34929f46aa56741a8333..9e3449c5b1f60f7e094bdc546896c3fc5f718b16 100644 (file)
--- a/evmap.c
+++ b/evmap.c
@@ -43,6 +43,7 @@
 #include <unistd.h>
 #endif
 #include <errno.h>
+#include <limits.h>
 #include <signal.h>
 #include <string.h>
 #include <time.h>
@@ -446,6 +447,9 @@ evmap_signal_add_(struct event_base *base, int sig, struct event *ev)
        struct event_signal_map *map = &base->sigmap;
        struct evmap_signal *ctx = NULL;
 
+       if (sig < 0 || sig >= NSIG)
+               return (-1);
+
        if (sig >= map->nentries) {
                if (evmap_make_space(
                        map, sig, sizeof(struct evmap_signal *)) == -1)
@@ -472,7 +476,7 @@ evmap_signal_del_(struct event_base *base, int sig, struct event *ev)
        struct event_signal_map *map = &base->sigmap;
        struct evmap_signal *ctx;
 
-       if (sig >= map->nentries)
+       if (sig < 0 || sig >= map->nentries)
                return (-1);
 
        GET_SIGNAL_SLOT(ctx, map, sig, evmap_signal);