<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Sep 18, 2013 at 2:18 AM, Greg Fitzgerald <span dir="ltr"><<a href="mailto:garious@gmail.com" target="_blank">garious@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Thanks for the quick replies!<br>
<div class="im"><br>
<br>
> If you want dynamic detection, then Address Sanitizer (which is built into Clang) or SAFECode<br>
<br>
</div>Dynamic detection.  I tried with Address Sanitizer and no luck<br></blockquote><div><br></div><div>AddressSanitizer does not try to detect stack overflow (not to be mixed with stack-buffer-overflow).</div><div>The reason is simple: when stack overflow happens it is already detected (you get a SEGV).</div>
<div>However, by default when stack overflow happens the SEGV kills the process silently because </div><div>the signal handler has no stack to run on. </div><div>This can be solved with sigaltstack() and AddressSanitizer does this under a separate </div>
<div>(experimental) flag ASAN_OPTIONS=use_sigaltstack=1</div><div><br></div><div># Running with default 8Mb stack</div><div><div>% clang -g -fsanitize=address -O ~/llvm/projects/compiler-rt/lib/asan/lit_tests/TestCases/deep_call_stack.cc ; ./a.out </div>
<div>[40000] ptr: (nil)</div><div>...</div><div>[00000] ptr: 0x7fff0b7c4140<br></div></div><div># Passed</div><div><br></div><div># Running with a small stack</div><div><div>% (ulimit -s 1000; ./a.out; echo $?  )</div><div>
[40000] ptr: (nil)</div><div>...</div><div>[33000] ptr: 0x7fff0e155120<br></div><div>139  # FAILED</div><div><br></div><div># Running with a small stack and with sigaltstack</div><div>% (ulimit -s 1000; ASAN_OPTIONS=use_sigaltstack=1 ./a.out; echo $?  ) 2>&1 | head </div>
<div>ASAN:SIGSEGV</div><div>=================================================================</div><div>==1543==ERROR: AddressSanitizer: SEGV on unknown address 0x7fffa383bfe0 (pc 0x000000456d38 sp 0x7fffa383bfe0 bp 0x7fffa383c050 T0)</div>
<div>AddressSanitizer can not provide additional info.</div><div>    #0 0x456d37 in RecursiveFunc(int, int*) /home/kcc/llvm/projects/compiler-rt/lib/asan/lit_tests/TestCases/deep_call_stack.cc:8</div><div>    #1 0x456dbc in RecursiveFunc(int, int*) /home/kcc/llvm/projects/compiler-rt/lib/asan/lit_tests/TestCases/deep_call_stack.cc:14</div>
</div><div><br></div><div><br></div><div>hth, </div><div><br></div><div>--kcc </div><div><br></div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

out-of-the-box.  I think it can detect stack-buffer-overflow (aka<br>
stack corruption), but not stack overflow.  I also tried running the<br>
code with ASan inside a pthread with heap-allocated memory for its<br>
stack, but since the pthread library itself is not instrumented, it<br>
did not detect the heap-buffer-overflow when the thread's stack<br>
overflows.<br>
<br>
<br>
> or SAFECode<br>
<br>
Can you point me to an example?<br>
<div class="im"><br>
<br>
Eli Friedman wrote:<br>
> No such support exists at the moment.<br>
<br>
</div>Is anyone aware of another C compiler that adds instrumentation for<br>
stack overflow detection?<br>
<br>
Thanks,<br>
Greg<br>
<div class=""><div class="h5"><br>
On Tue, Sep 17, 2013 at 3:03 PM, John Criswell <<a href="mailto:criswell@illinois.edu">criswell@illinois.edu</a>> wrote:<br>
> On 9/17/13 4:57 PM, Greg Fitzgerald wrote:<br>
>><br>
>> Does clang offer any tools for detecting when a program is about to<br>
>> segfault due to stack overflow?<br>
><br>
><br>
> If you want dynamic detection, then Address Sanitizer (which is built into<br>
> Clang) or SAFECode (which has its own version of Clang into which it is<br>
> integrated) will do the trick.<br>
><br>
> If you're asking about the Clang static analyzer, then I do not know.<br>
><br>
> -- John T.<br>
><br>
>><br>
>> Thanks,<br>
>> Greg<br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
><br>
><br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div></div>