[compiler-rt] 4fb7c12 - [HWASan] Use hwasan_memalign for aligned new.
Matt Morehouse via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 7 13:10:40 PST 2022
Author: Matt Morehouse
Date: 2022-02-07T13:10:16-08:00
New Revision: 4fb7c120fed504519d167c93ed9d920aeae46fb0
URL: https://github.com/llvm/llvm-project/commit/4fb7c120fed504519d167c93ed9d920aeae46fb0
DIFF: https://github.com/llvm/llvm-project/commit/4fb7c120fed504519d167c93ed9d920aeae46fb0.diff
LOG: [HWASan] Use hwasan_memalign for aligned new.
Aligned new does not require size to be a multiple of alignment, so
memalign is the correct choice instead of aligned_alloc.
Fixes false reports for unaligned sizes.
Reviewed By: eugenis
Differential Revision: https://reviews.llvm.org/D119161
Added:
Modified:
compiler-rt/lib/hwasan/hwasan_new_delete.cpp
compiler-rt/test/hwasan/TestCases/new-test.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/hwasan/hwasan_new_delete.cpp b/compiler-rt/lib/hwasan/hwasan_new_delete.cpp
index 4e057a651e1dd..31efb70bca141 100644
--- a/compiler-rt/lib/hwasan/hwasan_new_delete.cpp
+++ b/compiler-rt/lib/hwasan/hwasan_new_delete.cpp
@@ -29,7 +29,7 @@
return res
#define OPERATOR_NEW_ALIGN_BODY(nothrow) \
GET_MALLOC_STACK_TRACE; \
- void *res = hwasan_aligned_alloc(static_cast<uptr>(align), size, &stack); \
+ void *res = hwasan_memalign(static_cast<uptr>(align), size, &stack); \
if (!nothrow && UNLIKELY(!res)) \
ReportOutOfMemory(size, &stack); \
return res
diff --git a/compiler-rt/test/hwasan/TestCases/new-test.cpp b/compiler-rt/test/hwasan/TestCases/new-test.cpp
index 3b1991e4deaa5..8a4b3476ea161 100644
--- a/compiler-rt/test/hwasan/TestCases/new-test.cpp
+++ b/compiler-rt/test/hwasan/TestCases/new-test.cpp
@@ -1,11 +1,13 @@
// Test basic new functionality.
-// RUN: %clangxx_hwasan %s -o %t
+// RUN: %clangxx_hwasan -std=c++17 %s -o %t
// RUN: %run %t
-#include <stdlib.h>
-#include <assert.h>
-#include <sanitizer/hwasan_interface.h>
+#include <cassert>
+#include <cstdint>
+#include <cstdlib>
+#include <new>
#include <sanitizer/allocator_interface.h>
+#include <sanitizer/hwasan_interface.h>
int main() {
__hwasan_enable_allocator_tagging();
@@ -15,4 +17,12 @@ int main() {
assert(a1 != nullptr);
assert(__sanitizer_get_allocated_size(a1) == 0);
delete[] a1;
+
+ // Aligned new/delete
+ constexpr auto kAlign = std::align_val_t{8};
+ void *a2 = ::operator new(4, kAlign);
+ assert(a2 != nullptr);
+ assert(reinterpret_cast<uintptr_t>(a2) % static_cast<uintptr_t>(kAlign) == 0);
+ assert(__sanitizer_get_allocated_size(a2) >= 4);
+ ::operator delete(a2, kAlign);
}
More information about the llvm-commits
mailing list