<div dir="ltr">sorry for delay... <div><br></div>Yes, CHECK_LE(stack_size, 0x10000000); is intentional. <div>Do you really have 1Gb stacks? </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 26, 2017 at 2:04 AM, Hahnfeld, Jonas <span dir="ltr"><<a href="mailto:Hahnfeld@itc.rwth-aachen.de" target="_blank">Hahnfeld@itc.rwth-aachen.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<div><div class="h5"><br>
-----Original Message-----<br>
From: llvm-commits [mailto:<a href="mailto:llvm-commits-bounces@lists.llvm.org">llvm-commits-bounces@<wbr>lists.llvm.org</a>] On Behalf Of<br>
Kostya Serebryany via llvm-commits<br>
Sent: Friday, June 2, 2017 11:32 PM<br>
To: <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
Subject: [compiler-rt] r304598 - [asan] fix one more case where<br>
stack-use-after-return is not async-signal-safe (during thread startup).<br>
beef-up the test to give it a chance to catch regressions. Also relax the lint<br>
to make C++11 more usable.<br>
<br>
Author: kcc<br>
Date: Fri Jun  2 16:32:04 2017<br>
New Revision: 304598<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=304598&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=304598&view=rev</a><br>
Log:<br>
[asan] fix one more case where stack-use-after-return is not async-signal-safe<br>
(during thread startup). beef-up the test to give it a chance to catch<br>
regressions. Also relax the lint to make C++11 more usable.<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/<wbr>asan_thread.cc<br>
    compiler-rt/trunk/lib/<wbr>sanitizer_common/scripts/<wbr>check_lint.sh<br>
    compiler-rt/trunk/test/asan/<wbr>TestCases/Linux/uar_signals.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/<wbr>asan_thread.cc<br>
URL:<br>
<a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread.cc?rev=304598&r1=304597&r2=304598&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/compiler-rt/trunk/lib/<wbr>asan/asan_thread.cc?rev=<wbr>304598&r1=304597&r2=304598&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- compiler-rt/trunk/lib/asan/<wbr>asan_thread.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/<wbr>asan_thread.cc Fri Jun  2 16:32:04 2017<br>
@@ -166,16 +166,19 @@ void AsanThread::FinishSwitchFiber(<wbr>FakeS<br>
 }<br>
<br>
 inline AsanThread::StackBounds AsanThread::GetStackBounds() const {<br>
-  if (!atomic_load(&stack_<wbr>switching_, memory_order_acquire))<br>
-    return StackBounds{stack_bottom_, stack_top_};  // NOLINT<br>
+  if (!atomic_load(&stack_<wbr>switching_, memory_order_acquire)) {<br>
+    // Make sure the stack bounds are fully initialized.<br>
+    if (stack_bottom_ >= stack_top_) return {0, 0};<br>
+    return {stack_bottom_, stack_top_};  }<br>
</div></div><span class="">   char local;<br>
   const uptr cur_stack = (uptr)&local;<br>
   // Note: need to check next stack first, because FinishSwitchFiber<br>
   // may be in process of overwriting stack_top_/bottom_. But in such case<br>
   // we are already on the next stack.<br>
   if (cur_stack >= next_stack_bottom_ && cur_stack < next_stack_top_)<br>
-    return StackBounds{next_stack_bottom_<wbr>, next_stack_top_};  // NOLINT<br>
-  return StackBounds{stack_bottom_, stack_top_};              // NOLINT<br>
</span>+    return {next_stack_bottom_, next_stack_top_};  return<br>
+ {stack_bottom_, stack_top_};<br>
<span class=""> }<br>
<br>
 uptr AsanThread::stack_top() {<br>
@@ -197,6 +200,7 @@ FakeStack *AsanThread::AsyncSignalSafeLa<br>
   uptr stack_size = this->stack_size();<br>
   if (stack_size == 0)  // stack_size is not yet available, don't use<br>
FakeStack.<br>
     return nullptr;<br>
+  CHECK_LE(stack_size, 0x10000000);<br>
<br>
</span>Was this change intended to be committed? I get quite some failures on my<br>
CentOS 7 with this:<br>
==31552==AddressSanitizer CHECK failed:<br>
[...]/projects/compiler-rt/<wbr>lib/asan/asan_thread.cc:203 "((stack_size)) <=<br>
((0x10000000))" (0x40000000, 0x10000000)<br>
<br>
Removing this check "fixes" the failures.<br>
<br>
Cheers,<br>
Jonas<br>
</blockquote></div><br></div>