diff options
| author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2019-02-21 21:32:24 +0000 |
|---|---|---|
| committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2019-02-21 21:32:24 +0000 |
| commit | df913868066b17c5c87c6169905ebbf8b9a4d0af (patch) | |
| tree | 6af48621815359e6ee7ddba00aefe82015a5202e /compiler-rt/lib/hwasan/hwasan.cc | |
| parent | d91bb4831b6ca315a9fbde54b7afa6e70e08bec3 (diff) | |
| download | bcm5719-llvm-df913868066b17c5c87c6169905ebbf8b9a4d0af.tar.gz bcm5719-llvm-df913868066b17c5c87c6169905ebbf8b9a4d0af.zip | |
[hwasan,asan] Intercept vfork.
Summary: AArch64 only for now.
Reviewers: vitalybuka, pcc
Subscribers: srhines, kubamracek, mgorny, javed.absar, krytarowski, kristof.beyls, jdoerfert, #sanitizers, llvm-commits, kcc
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D58313
llvm-svn: 354625
Diffstat (limited to 'compiler-rt/lib/hwasan/hwasan.cc')
| -rw-r--r-- | compiler-rt/lib/hwasan/hwasan.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/compiler-rt/lib/hwasan/hwasan.cc b/compiler-rt/lib/hwasan/hwasan.cc index 9c83f73bd98..3a87dea26d3 100644 --- a/compiler-rt/lib/hwasan/hwasan.cc +++ b/compiler-rt/lib/hwasan/hwasan.cc @@ -477,6 +477,30 @@ void __hwasan_handle_longjmp(const void *sp_dst) { TagMemory(sp, dst - sp, 0); } +void __hwasan_handle_vfork(const void *sp_dst) { + uptr sp = (uptr)sp_dst; + Thread *t = GetCurrentThread(); + CHECK(t); + uptr top = t->stack_top(); + uptr bottom = t->stack_bottom(); + static const uptr kMaxExpectedCleanupSize = 64 << 20; // 64M + if (top == 0 || bottom == 0 || sp < bottom || sp >= top || + sp - bottom > kMaxExpectedCleanupSize) { + Report( + "WARNING: HWASan is ignoring requested __hwasan_handle_vfork: " + "stack top: %zx; current %zx; bottom: %zx \n" + "False positive error reports may follow\n", + top, sp, bottom); + return; + } + TagMemory(bottom, sp - bottom, 0); +} + +void *__hwasan_extra_spill_area() { + Thread *t = GetCurrentThread(); + return &t->vfork_spill(); +} + void __hwasan_print_memory_usage() { InternalScopedString s(kMemoryUsageBufferSize); HwasanFormatMemoryUsage(s); |

