From d83c09fb6606409550e39600d14c9abd5cc61ab1 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Thu, 12 Mar 2020 14:00:15 -0600 Subject: [PATCH] Add SUDO_EV_MASK to mask off invalid event values. Now used by sudo_ev_init() to avoid bogus events. --- include/sudo_event.h | 3 +++ lib/util/event.c | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/sudo_event.h b/include/sudo_event.h index 70983a062..bb508b3a7 100644 --- a/include/sudo_event.h +++ b/include/sudo_event.h @@ -33,6 +33,9 @@ struct timeval; /* for deprecated APIs */ #define SUDO_EV_SIGNAL 0x10 /* fire on signal receipt */ #define SUDO_EV_SIGINFO 0x20 /* fire on signal receipt (siginfo) */ +/* User-settable events for sudo_ev_init() (SUDO_EV_TIMEOUT not valid here) */ +#define SUDO_EV_MASK (SUDO_EV_READ|SUDO_EV_WRITE|SUDO_EV_PERSIST|SUDO_EV_SIGNAL|SUDO_EV_SIGINFO) + /* Event flags (internal) */ #define SUDO_EVQ_INSERTED 0x01 /* event is on the event queue */ #define SUDO_EVQ_ACTIVE 0x02 /* event is on the active queue */ diff --git a/lib/util/event.c b/lib/util/event.c index a756bc770..0cd89ad94 100644 --- a/lib/util/event.c +++ b/lib/util/event.c @@ -273,10 +273,9 @@ sudo_ev_init(struct sudo_event *ev, int fd, short events, { debug_decl(sudo_ev_init, SUDO_DEBUG_EVENT); - /* XXX - sanity check events value */ memset(ev, 0, sizeof(*ev)); ev->fd = fd; - ev->events = events; + ev->events = events & SUDO_EV_MASK; ev->pfd_idx = -1; ev->callback = callback; ev->closure = closure; @@ -842,7 +841,7 @@ sudo_ev_get_timeleft_v2(struct sudo_event *ev, struct timespec *ts) int sudo_ev_pending_v1(struct sudo_event *ev, short events, struct timespec *ts) { - int ret = 0; + int ret; debug_decl(sudo_ev_pending, SUDO_DEBUG_EVENT); sudo_debug_printf(SUDO_DEBUG_INFO, "%s: event %p, flags 0x%x, events 0x%x",