zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 614cd66e7e9b7323dd67bf208fda9abf296721b4 (tree)
parent bb9f97e0856dd5c0dcc0c71633b7c15b0587b68b
Author: Brandon Black <bblack@wikimedia.org>
Date:   Mon, 30 Mar 2026 06:56:14 -0500

LinuxThreadImpl: clear tidptr during detached exit

Fixes: #31714

Diffstat:
Mlib/std/Thread.zig | 5+++++
1 file changed, 5 insertions(+), 0 deletions(-)

diff --git a/lib/std/Thread.zig b/lib/std/Thread.zig @@ -1147,6 +1147,11 @@ const LinuxThreadImpl = struct { /// Ported over from musl libc's pthread detached implementation: /// https://github.com/ifduyue/musl/search?q=__unmapself fn freeAndExit(self: *ThreadCompletion) noreturn { + // If we do not reset the child_tidptr to null here, the kernel would later write the + // value zero to that address, which is inside the block we're unmapping below, after + // our thread exits. This can sometimes corrupt memory in other mmap blocks from + // unrelated concurrent threads. + _ = linux.set_tid_address(null); // If a signal were delivered between SYS_munmap and SYS_exit, any installed signal // handler would immediately segfault due to the stack being unmapped. To avoid this, // we need to mask all signals before entering the inline asm.