From 39ff273df97e51b1285358b9e6808b117ea8adb1 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Thu, 10 Oct 2024 11:56:27 -0400 Subject: sighook: Don't forget to reset list->tail on the last sigpop() This was causing a UAF if we ever unregistered the last hook for a signal and then re-registered one. Fixes: 75b7f70 ("sighook: Make sigunhook() O(1)") --- tests/sighook.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'tests') diff --git a/tests/sighook.c b/tests/sighook.c index d785a55..0cb8de2 100644 --- a/tests/sighook.c +++ b/tests/sighook.c @@ -60,6 +60,13 @@ void check_sighook(void) { return; } + // Check that we can unregister and re-register a hook + sigunhook(hook); + hook = sighook(SIGALRM, alrm_hook, NULL, SH_CONTINUE); + if (!bfs_echeck(hook, "sighook(SIGALRM)")) { + return; + } + // Create a timer that sends SIGALRM every 100 microseconds struct timespec ival = { .tv_nsec = 100 * 1000 }; struct timer *timer = xtimer_start(&ival); -- cgit v1.2.3