[PATCH] D85947: [DFSan] Don't unmap during dfsan_flush().

Matt Morehouse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 13 17:05:25 PDT 2020


morehouse created this revision.
morehouse added reviewers: kcc, vitalybuka, pcc, eugenis.
Herald added a project: Sanitizers.
Herald added a subscriber: Sanitizers.
morehouse requested review of this revision.

Unmapping and remapping is dangerous since another thread could touch
the shadow memory while it is unmapped.  But there is really no need to
unmap anyway, since mmap(MAP_FIXED) will happily clobber the existing
mapping with zeroes.  This is thread-safe since the mmap() is done under
the same kernel lock as page faults are done.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D85947

Files:
  compiler-rt/include/sanitizer/dfsan_interface.h
  compiler-rt/lib/dfsan/dfsan.cpp


Index: compiler-rt/lib/dfsan/dfsan.cpp
===================================================================
--- compiler-rt/lib/dfsan/dfsan.cpp
+++ compiler-rt/lib/dfsan/dfsan.cpp
@@ -428,7 +428,6 @@
 }
 
 extern "C" void dfsan_flush() {
-  UnmapOrDie((void*)ShadowAddr(), UnusedAddr() - ShadowAddr());
   if (!MmapFixedNoReserve(ShadowAddr(), UnusedAddr() - ShadowAddr()))
     Die();
 }
Index: compiler-rt/include/sanitizer/dfsan_interface.h
===================================================================
--- compiler-rt/include/sanitizer/dfsan_interface.h
+++ compiler-rt/include/sanitizer/dfsan_interface.h
@@ -80,8 +80,7 @@
 size_t dfsan_get_label_count(void);
 
 /// Flushes the DFSan shadow, i.e. forgets about all labels currently associated
-/// with the application memory. Will work only if there are no other
-/// threads executing DFSan-instrumented code concurrently.
+/// with the application memory.
 /// Use this call to start over the taint tracking within the same procces.
 void dfsan_flush(void);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85947.285526.patch
Type: text/x-patch
Size: 1024 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200814/eeb9b885/attachment.bin>


More information about the llvm-commits mailing list