[compiler-rt] r343606 - Reland r342652 "[winasan] Unpoison the stack in NtTerminateThread"
Reid Kleckner via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 29 16:04:40 PST 2018
I spent some time reproducing and debugging the problem the other day, but
I wasn't able to make progress. I went ahead and reverted this again in
r347933 to get back to green now that I've figured out how to reproduce the
problem.
On Tue, Nov 20, 2018 at 2:48 PM Reid Kleckner <rnk at google.com> wrote:
> The change seems to be causing these failures:
> https://ci.chromium.org/buildbot/chromium.clang/CrWinAsan/1785
>
> I haven't had time to debug them, but we'll need to do something about
> them before we push clang for chromium again.
>
> On Thu, Nov 8, 2018 at 4:46 PM Reid Kleckner <rnk at google.com> wrote:
>
>> The problem exhibited itself in nacl browser_tests, which is probably the
>> hardest part of Chrome to debug:
>> https://ci.chromium.org/p/chromium/builders/luci.chromium.ci/win-asan/1584
>>
>> I reapplied your change and tried to reproduce the failure, we'll see how
>> it goes.
>>
>> On Wed, Nov 7, 2018 at 9:14 AM David Major <dmajor at mozilla.com> wrote:
>>
>>> Hi Reid, is there anything I can do to help get this patch unstuck?
>>> Thanks!
>>>
>>> On Fri, Oct 5, 2018 at 2:30 PM Reid Kleckner <rnk at google.com> wrote:
>>> >
>>> > This looks like it's still breaking a pile of pnacl tests:
>>> > https://ci.chromium.org/buildbot/chromium.clang/CrWinAsan/1411
>>> >
>>> > This revision is in the compiler revision range for two separate bots
>>> causing the same set of tests to fail for multiple asan configs, so I'm
>>> confident that it's related. I'm going to revert for now and then try to
>>> come up with a test case for it that we can commit upstream. That will
>>> likely happen next week.
>>> >
>>> > On Tue, Oct 2, 2018 at 10:18 AM David Major via llvm-commits <
>>> llvm-commits at lists.llvm.org> wrote:
>>> >>
>>> >> Author: dmajor
>>> >> Date: Tue Oct 2 10:17:12 2018
>>> >> New Revision: 343606
>>> >>
>>> >> URL: http://llvm.org/viewvc/llvm-project?rev=343606&view=rev
>>> >> Log:
>>> >> Reland r342652 "[winasan] Unpoison the stack in NtTerminateThread"
>>> >>
>>> >> In long-running builds we've seen some ASan complaints during thread
>>> creation that we suspect are due to leftover poisoning from previous
>>> threads whose stacks occupied that memory. This patch adds a hook that
>>> unpoisons the stack just before the NtTerminateThread syscall.
>>> >>
>>> >> Differential Revision: https://reviews.llvm.org/D52091
>>> >>
>>> >>
>>> >> Modified:
>>> >> compiler-rt/trunk/lib/asan/asan_win.cc
>>> >> compiler-rt/trunk/test/asan/TestCases/Windows/dll_host.cc
>>> >>
>>> >> Modified: compiler-rt/trunk/lib/asan/asan_win.cc
>>> >> URL:
>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=343606&r1=343605&r2=343606&view=diff
>>> >>
>>> ==============================================================================
>>> >> --- compiler-rt/trunk/lib/asan/asan_win.cc (original)
>>> >> +++ compiler-rt/trunk/lib/asan/asan_win.cc Tue Oct 2 10:17:12 2018
>>> >> @@ -154,6 +154,14 @@ INTERCEPTOR_WINAPI(DWORD, CreateThread,
>>> >> asan_thread_start, t, thr_flags, tid);
>>> >> }
>>> >>
>>> >> +INTERCEPTOR_WINAPI(LONG, NtTerminateThread, HANDLE handle, LONG
>>> status) {
>>> >> + // Unpoison the terminating thread's stack because the memory may
>>> be re-used.
>>> >> + NT_TIB *tib = (NT_TIB *)NtCurrentTeb();
>>> >> + uptr stackSize = (uptr)tib->StackBase - (uptr)tib->StackLimit;
>>> >> + __asan_unpoison_memory_region(tib->StackLimit, stackSize);
>>> >> + return REAL(NtTerminateThread(handle, status));
>>> >> +}
>>> >> +
>>> >> // }}}
>>> >>
>>> >> namespace __asan {
>>> >> @@ -169,7 +177,9 @@ void InitializePlatformInterceptors() {
>>> >>
>>> >> ASAN_INTERCEPT_FUNC(CreateThread);
>>> >> ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter);
>>> >> -
>>> >> + CHECK(::__interception::OverrideFunction("NtTerminateThread",
>>> >> +
>>> (uptr)WRAP(NtTerminateThread),
>>> >> + (uptr
>>> *)&REAL(NtTerminateThread)));
>>> >> #ifdef _WIN64
>>> >> ASAN_INTERCEPT_FUNC(__C_specific_handler);
>>> >> #else
>>> >>
>>> >> Modified: compiler-rt/trunk/test/asan/TestCases/Windows/dll_host.cc
>>> >> URL:
>>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Windows/dll_host.cc?rev=343606&r1=343605&r2=343606&view=diff
>>> >>
>>> ==============================================================================
>>> >> --- compiler-rt/trunk/test/asan/TestCases/Windows/dll_host.cc
>>> (original)
>>> >> +++ compiler-rt/trunk/test/asan/TestCases/Windows/dll_host.cc Tue
>>> Oct 2 10:17:12 2018
>>> >> @@ -29,6 +29,7 @@
>>> >> // IMPORT: __asan_wrap_HeapReAlloc
>>> >> // IMPORT: __asan_wrap_HeapSize
>>> >> // IMPORT: __asan_wrap_CreateThread
>>> >> +// IMPORT: __asan_wrap_NtTerminateThread
>>> >> // IMPORT: __asan_wrap_RaiseException
>>> >> // IMPORT: __asan_wrap_RtlRaiseException
>>> >> // IMPORT: __asan_wrap_SetUnhandledExceptionFilter
>>> >>
>>> >>
>>> >> _______________________________________________
>>> >> llvm-commits mailing list
>>> >> llvm-commits at lists.llvm.org
>>> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181129/2f9db58e/attachment.html>
More information about the llvm-commits
mailing list