llvm-project
8171d29d - [tsan] Clear ThreadSignalContext shadow memory on thread exit (#230708)

Commit
10 days ago
[tsan] Clear ThreadSignalContext shadow memory on thread exit (#230708) [tsan] Clear ThreadSignalContext shadow memory on thread exit `SigCtx(ThreadState *thr)` allocates a per-thread `ThreadSignalContext` (`sctx`) via internal `MmapOrDie(sizeof(*sctx))`. When a signal is delivered to a user `sa_sigaction` handler, `CallUserSignalHandler` passes `&sctx->pending_signals[sig].siginfo` and `&sctx->pending_signals[sig].ctx` directly to the user handler. Any instrumented reads or writes to the `siginfo_t` or `ucontext_t` arguments populate TSan shadow memory for the `sctx` mapping. Previously, `PlatformCleanUpThreadState` unmapped `sctx` via raw `UnmapOrDie(sctx, sizeof(*sctx))` upon thread exit without clearing its shadow memory, leaving stale shadow entries behind when the virtual pages were reused or shared a shadow page with an adjacent mapping. Call `DontNeedShadowFor((uptr)sctx, RoundUpTo(sizeof(*sctx), GetPageSizeCached()))` before `UnmapOrDie(sctx, sizeof(*sctx))` in `PlatformCleanUpThreadState`. Fixes #230706 Assisted-by: Gemini
Author
Parents
Loading