[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