Hi,
has anyone seen reports like the one below? A stack-buffer-overflow is
reported, but the memory is addressable.
Notes: I have seen similar instances reported as "unknown-crash". Looking
at the code in asan-report.cc, this is the initial error code, and the real
error is determined by looking at the shadow. So it seems this could be
some data race: When the shadow is initially checked as part of the
instrumented code, the memory is marked as invalid and error reporting is
triggered. But shortly afterwards it gets marked as valid. However, I can't
imagine how that could happen: The object lives on the stack of thread 0,
this thread is still running, and the frame should still be valid (which is
also what ASan reports). The reported offset 44 also matches the accessed
object in BinarySemaphore::open().
The involved code uses futexes, and I suspect this somehow causes the
problem. But I'm not sure whether it is a problem of the codebase (at least
we haven't seen anything like it in practice), or a limitation/bug of ASan.
==39533==ERROR: AddressSanitizer: stack-buffer-overflow on address
0x7fff656ad0ec at pc 0x7f1a103a4d6b bp 0x7f17e0181e10 sp 0x7f17e0181e08
READ of size 4 at 0x7fff656ad0ec thread T182 (Pool)
#0 0x7f1a103a4d6a in
Synchronization::BinarySemaphore::open(Execution::Context&)
#1 0x7f1a5fc64e25 in TrexSync::Event::signal()
#2 0x7f1a47ecbdf3 in TrexSync::EventGuard::signal()
#3 0x7f1a47ec83c2 in TrexThreads::PoolThread::run()
#4 0x7f1a47ec6a12 in TrexThreads::PoolThread::run(void*&)
#5 0x7f1a100a8a80 in Execution::Thread::staticMainImp(void**)
#6 0x7f1a100b37ff in Execution::Thread::staticMain(void*)
Address 0x7fff656ad0ec is located in stack of thread T0 at offset 44 in frame
#0 0x7f1a47ed09df in
TrexThreads::ThreadManager::create(TrexThreads::Thread*, void*,
TrexThreads::_CreateFlags, int)
This frame has 1 object(s):
[32, 160) 'aCreationInfo' <== Memory access at offset 44 is inside this
variable
HINT: this may be a false positive if your program uses some custom stack
unwind mechanism or swapcontext
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow
Shadow bytes around the buggy address:
0x10006cacd9c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10006cacd9d0: 00 00 00 00 f1 f1 f1 f1 04 f2 04 f2 04 f2 04 f2
0x10006cacd9e0: 04 f2 04 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2
0x10006cacd9f0: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2
0x10006cacda00: 04 f2 04 f2 00 f3 f3 f3 00 00 00 00 00 00 00 00
=>0x10006cacda10: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00[00]00 00
0x10006cacda20: 00 00 00 00 00 00 00 00 00 00 00 00 f3 f3 f3 f3
0x10006cacda30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10006cacda40: 00 00 00 00 f1 f1 f1 f1 04 f2 04 f2 04 f2 04 f2
0x10006cacda50: 04 f2 00 00 f2 f2 00 00 f3 f3 f3 f3 00 00 00 00
0x10006cacda60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Best regards,
Martin
--
You received this message because you are subscribed to the Google Groups
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.