[llvm-branch-commits] [compiler-rt] [sanitizer] Add MemCpyAccessible (PR #112794)
Vitaly Buka via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Oct 17 17:08:23 PDT 2024
https://github.com/vitalybuka updated https://github.com/llvm/llvm-project/pull/112794
>From 7e8937dd9c1a5895be178de0d7721cc3ed23b395 Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Thu, 17 Oct 2024 16:49:32 -0700
Subject: [PATCH 1/2] fixes
Created using spr 1.3.4
---
.../lib/sanitizer_common/sanitizer_common.h | 2 +-
.../sanitizer_common/sanitizer_common_libcdep.cpp | 14 +++++++-------
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
index a7b6a4033a5276..dd55f91dd95d06 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h
@@ -273,7 +273,7 @@ bool IsAccessibleMemoryRange(uptr beg, uptr size);
// Returns true if we can read a memory range starting at `src`, and copies
// content into `dest`.
bool TryMemCpy(void *dest, const void *src, uptr n);
-// Copies accesible memory, and zero fill the rest.
+// Copies accessible memory, and zero fill the rest.
void MemCpyAccessible(void *dest, const void *src, uptr n);
// Error report formatting.
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
index 3ad5aaa0a7d4ab..a2b10001843a42 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
@@ -230,18 +230,18 @@ void MemCpyAccessible(void *dest, const void *src, uptr n) {
uptr e = reinterpret_cast<uptr>(src) + n;
uptr e_down = RoundDownTo(e, page_size);
- auto copy_or_zero = [dest, src](uptr b, uptr e) {
- uptr d = reinterpret_cast<uptr>(dest) + (b - reinterpret_cast<uptr>(src));
- if (!TryMemCpy(reinterpret_cast<void *>(d), reinterpret_cast<void *>(b),
- e - b))
- internal_memset(reinterpret_cast<void *>(d), 0, e - b);
+ const uptr off = reinterpret_cast<uptr>(dest) - b;
+
+ auto copy_or_zero = [off](uptr beg, uptr end) {
+ void *d = reinterpret_cast<void *>(beg + off);
+ const uptr size = end - beg;
+ if (!TryMemCpy(d, reinterpret_cast<void *>(beg), size))
+ internal_memset(d, 0, size);
};
copy_or_zero(b, b_up);
-
for (uptr p = b_up; p < e_down; p += page_size)
copy_or_zero(p, p + page_size);
-
copy_or_zero(e_down, e);
}
>From d920ef34ac86e51a5e16785fab9311dfa202a58b Mon Sep 17 00:00:00 2001
From: Vitaly Buka <vitalybuka at google.com>
Date: Thu, 17 Oct 2024 17:08:13 -0700
Subject: [PATCH 2/2] offset
Created using spr 1.3.4
---
.../lib/sanitizer_common/sanitizer_common_libcdep.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
index a2b10001843a42..838881be3a0a0c 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_libcdep.cpp
@@ -230,10 +230,10 @@ void MemCpyAccessible(void *dest, const void *src, uptr n) {
uptr e = reinterpret_cast<uptr>(src) + n;
uptr e_down = RoundDownTo(e, page_size);
- const uptr off = reinterpret_cast<uptr>(dest) - b;
-
- auto copy_or_zero = [off](uptr beg, uptr end) {
- void *d = reinterpret_cast<void *>(beg + off);
+ auto copy_or_zero = [dest, src](uptr beg, uptr end) {
+ const uptr udest = reinterpret_cast<uptr>(dest);
+ const uptr usrc = reinterpret_cast<uptr>(src);
+ void *d = reinterpret_cast<void *>(udest + beg - usrc);
const uptr size = end - beg;
if (!TryMemCpy(d, reinterpret_cast<void *>(beg), size))
internal_memset(d, 0, size);
More information about the llvm-branch-commits
mailing list