浏览代码

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.
Rich Felker 7 年之前
父节点
当前提交
6430315683
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      src/exit/at_quick_exit.c

+ 4 - 3
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;
 }