From 64303156832bc555d11c181168db1e7834ac7069 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Thu, 14 Dec 2017 18:54:54 -0500 Subject: fix data race in at_quick_exit aside from theoretical arbitrary results due to UB, this could practically cause unbounded overflow of static array if hit, but hitting it depends on having more than 32 calls to at_quick_exit and having them sufficiently often. --- src/exit/at_quick_exit.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/exit/at_quick_exit.c b/src/exit/at_quick_exit.c index 34541bad..ac28dfd9 100644 --- a/src/exit/at_quick_exit.c +++ b/src/exit/at_quick_exit.c @@ -21,9 +21,10 @@ void __funcs_on_quick_exit() int at_quick_exit(void (*func)(void)) { - if (count == 32) return -1; + int r = 0; LOCK(lock); - funcs[count++] = func; + if (count == 32) r = -1; + else funcs[count++] = func; UNLOCK(lock); - return 0; + return r; } -- cgit v1.2.1