[llvm-branch-commits] [compiler-rt] 6b5979b - Fix invalid gap found by FindAvailableMemoryRange

Mariusz Borsa via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Sep 27 15:42:53 PDT 2022


Author: Mariusz Borsa
Date: 2022-09-27T14:58:01-07:00
New Revision: 6b5979bf312af43fa50a6cdee6a466c07210358f

URL: https://github.com/llvm/llvm-project/commit/6b5979bf312af43fa50a6cdee6a466c07210358f
DIFF: https://github.com/llvm/llvm-project/commit/6b5979bf312af43fa50a6cdee6a466c07210358f.diff

LOG: Fix invalid gap found by FindAvailableMemoryRange

Plus some debugging changes, before cleaning up
and sending for review

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
    compiler-rt/test/asan/TestCases/strncat-overlap.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
index 1ae69e14b2371..23c4c6619de82 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp
@@ -1251,6 +1251,7 @@ uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
   mach_vm_address_t start_address =
     (SANITIZER_WORDSIZE == 32) ? 0x000000001000 : 0x000100000000;
 
+  const mach_vm_address_t max_vm_address = GetMaxVirtualAddress() + 1;
   mach_vm_address_t address = start_address;
   mach_vm_address_t free_begin = start_address;
   kern_return_t kr = KERN_SUCCESS;
@@ -1265,7 +1266,7 @@ uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
                                 (vm_region_info_t)&vminfo, &count);
     if (kr == KERN_INVALID_ADDRESS) {
       // No more regions beyond "address", consider the gap at the end of VM.
-      address = GetMaxVirtualAddress() + 1;
+      address = max_vm_address;
       vmsize = 0;
     } else {
       if (max_occupied_addr) *max_occupied_addr = address + vmsize;
@@ -1273,7 +1274,7 @@ uptr FindAvailableMemoryRange(uptr size, uptr alignment, uptr left_padding,
     if (free_begin != address) {
       // We found a free region [free_begin..address-1].
       uptr gap_start = RoundUpTo((uptr)free_begin + left_padding, alignment);
-      uptr gap_end = RoundDownTo((uptr)address, alignment);
+      uptr gap_end = RoundDownTo((uptr)Min(address, max_vm_address), alignment);
       uptr gap_size = gap_end > gap_start ? gap_end - gap_start : 0;
       if (size < gap_size) {
         return gap_start;

diff  --git a/compiler-rt/test/asan/TestCases/strncat-overlap.cpp b/compiler-rt/test/asan/TestCases/strncat-overlap.cpp
index 3e3f7ee2723f5..fb3817f00d787 100644
--- a/compiler-rt/test/asan/TestCases/strncat-overlap.cpp
+++ b/compiler-rt/test/asan/TestCases/strncat-overlap.cpp
@@ -30,7 +30,6 @@
 
 #include <string.h>
 
-
 // Don't inline function otherwise stacktrace changes.
 __attribute__((noinline)) void bad_function() {
   char buffer[] = "hello\0XXX";


        


More information about the llvm-branch-commits mailing list