[PATCH] D92344: [WinASan] Improve exception reporting accuracy

Reid Kleckner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Nov 30 12:58:39 PST 2020


rnk created this revision.
rnk added reviewers: vitalybuka, mcgov.
Herald added a project: Sanitizers.
Herald added a subscriber: Sanitizers.
rnk requested review of this revision.

Previously, ASan would produce reports like this:
ERROR: AddressSanitizer: breakpoint on unknown address 0x000000000000 (pc 0x7fffdd7c5e86 ...)

This is unhelpful, because the developer may think this is a null
pointer dereference, and not a breakpoint exception on some PC.

The cause was that SignalContext::GetAddress would read the
ExceptionInformation array to retreive an address for any kind of
exception. That data is only available for access violation exceptions.
This changes it to be conditional on the exception type, and to use the
PC otherwise.

I added a variety of tests for common exception types:

- int div zero
- breakpoint
- ud2a / illegal instruction
- SSE misalignment

I also tightened up IsMemoryAccess and GetWriteFlag to check the
ExceptionCode rather than looking at ExceptionInformation[1] directly.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D92344

Files:
  compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
  compiler-rt/test/asan/TestCases/Windows/breakpoint.cpp
  compiler-rt/test/asan/TestCases/Windows/illegal_instruction.cpp
  compiler-rt/test/asan/TestCases/Windows/integer_divide_by_zero.cpp
  compiler-rt/test/asan/TestCases/Windows/sse_misalignment.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D92344.308464.patch
Type: text/x-patch
Size: 5317 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201130/fdc796d5/attachment.bin>


More information about the llvm-commits mailing list