[compiler-rt] [msan] Add interceptors for fortified memory functions (__memcpy_chk, etc.) (PR #206702)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 30 03:42:31 PDT 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp -- compiler-rt/test/msan/Linux/fortify.cpp compiler-rt/lib/msan/msan_interceptors.cpp --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/compiler-rt/lib/msan/msan_interceptors.cpp b/compiler-rt/lib/msan/msan_interceptors.cpp
index 862ecd60a..6a5565564 100644
--- a/compiler-rt/lib/msan/msan_interceptors.cpp
+++ b/compiler-rt/lib/msan/msan_interceptors.cpp
@@ -64,13 +64,12 @@ DECLARE_REAL(void *, memcpy, void *dest, const void *src, SIZE_T n)
 DECLARE_REAL(void *, memset, void *dest, int c, SIZE_T n)
 
 #if SANITIZER_GLIBC
-DECLARE_REAL(void *, __memcpy_chk, void *dest, const void *src, SIZE_T n,
+DECLARE_REAL(void*, __memcpy_chk, void* dest, const void* src, SIZE_T n,
              SIZE_T dest_size)
-DECLARE_REAL(void *, __memmove_chk, void *dest, const void *src, SIZE_T n,
+DECLARE_REAL(void*, __memmove_chk, void* dest, const void* src, SIZE_T n,
              SIZE_T dest_size)
-DECLARE_REAL(void *, __memset_chk, void *dest, int c, SIZE_T n,
-             SIZE_T dest_size)
-DECLARE_REAL(void *, __mempcpy_chk, void *dest, const void *src, SIZE_T n,
+DECLARE_REAL(void*, __memset_chk, void* dest, int c, SIZE_T n, SIZE_T dest_size)
+DECLARE_REAL(void*, __mempcpy_chk, void* dest, const void* src, SIZE_T n,
              SIZE_T dest_size)
 #endif
 
@@ -170,7 +169,7 @@ INTERCEPTOR(void *, bcopy, const void *src, void *dest, SIZE_T n) {
 }
 
 #if SANITIZER_GLIBC
-INTERCEPTOR(void *, __memcpy_chk, void *dest, const void *src, SIZE_T n,
+INTERCEPTOR(void*, __memcpy_chk, void* dest, const void* src, SIZE_T n,
             SIZE_T dest_size) {
   if (!msan_inited)
     return internal_memcpy(dest, src, n);
@@ -178,17 +177,17 @@ INTERCEPTOR(void *, __memcpy_chk, void *dest, const void *src, SIZE_T n,
     return REAL(__memcpy_chk)(dest, src, n, dest_size);
   ENSURE_MSAN_INITED();
   GET_STORE_STACK_TRACE;
-  void *res = REAL(__memcpy_chk)(dest, src, n, dest_size);
+  void* res = REAL(__memcpy_chk)(dest, src, n, dest_size);
   CopyShadowAndOrigin(dest, src, n, &stack);
   return res;
 }
-#define MSAN_MAYBE_INTERCEPT___MEMCPY_CHK INTERCEPT_FUNCTION(__memcpy_chk)
+#  define MSAN_MAYBE_INTERCEPT___MEMCPY_CHK INTERCEPT_FUNCTION(__memcpy_chk)
 #else
-#define MSAN_MAYBE_INTERCEPT___MEMCPY_CHK
+#  define MSAN_MAYBE_INTERCEPT___MEMCPY_CHK
 #endif
 
 #if SANITIZER_GLIBC
-INTERCEPTOR(void *, __memmove_chk, void *dest, const void *src, SIZE_T n,
+INTERCEPTOR(void*, __memmove_chk, void* dest, const void* src, SIZE_T n,
             SIZE_T dest_size) {
   if (!msan_inited)
     return internal_memmove(dest, src, n);
@@ -196,50 +195,50 @@ INTERCEPTOR(void *, __memmove_chk, void *dest, const void *src, SIZE_T n,
     return REAL(__memmove_chk)(dest, src, n, dest_size);
   ENSURE_MSAN_INITED();
   GET_STORE_STACK_TRACE;
-  void *res = REAL(__memmove_chk)(dest, src, n, dest_size);
+  void* res = REAL(__memmove_chk)(dest, src, n, dest_size);
   MoveShadowAndOrigin(dest, src, n, &stack);
   return res;
 }
-#define MSAN_MAYBE_INTERCEPT___MEMMOVE_CHK INTERCEPT_FUNCTION(__memmove_chk)
+#  define MSAN_MAYBE_INTERCEPT___MEMMOVE_CHK INTERCEPT_FUNCTION(__memmove_chk)
 #else
-#define MSAN_MAYBE_INTERCEPT___MEMMOVE_CHK
+#  define MSAN_MAYBE_INTERCEPT___MEMMOVE_CHK
 #endif
 
 #if SANITIZER_GLIBC
-INTERCEPTOR(void *, __memset_chk, void *dest, int c, SIZE_T n,
+INTERCEPTOR(void*, __memset_chk, void* dest, int c, SIZE_T n,
             SIZE_T dest_size) {
   if (!msan_inited)
     return internal_memset(dest, c, n);
   if (msan_init_is_running || __msan::IsInSymbolizerOrUnwider())
     return REAL(__memset_chk)(dest, c, n, dest_size);
   ENSURE_MSAN_INITED();
-  void *res = REAL(__memset_chk)(dest, c, n, dest_size);
+  void* res = REAL(__memset_chk)(dest, c, n, dest_size);
   __msan_unpoison(dest, n);
   return res;
 }
-#define MSAN_MAYBE_INTERCEPT___MEMSET_CHK INTERCEPT_FUNCTION(__memset_chk)
+#  define MSAN_MAYBE_INTERCEPT___MEMSET_CHK INTERCEPT_FUNCTION(__memset_chk)
 #else
-#define MSAN_MAYBE_INTERCEPT___MEMSET_CHK
+#  define MSAN_MAYBE_INTERCEPT___MEMSET_CHK
 #endif
 
 #if SANITIZER_GLIBC
-INTERCEPTOR(void *, __mempcpy_chk, void *dest, const void *src, SIZE_T n,
+INTERCEPTOR(void*, __mempcpy_chk, void* dest, const void* src, SIZE_T n,
             SIZE_T dest_size) {
   if (!msan_inited) {
     internal_memcpy(dest, src, n);
-    return (char *)dest + n;
+    return (char*)dest + n;
   }
   if (msan_init_is_running || __msan::IsInSymbolizerOrUnwider())
     return REAL(__mempcpy_chk)(dest, src, n, dest_size);
   ENSURE_MSAN_INITED();
   GET_STORE_STACK_TRACE;
-  void *res = REAL(__mempcpy_chk)(dest, src, n, dest_size);
+  void* res = REAL(__mempcpy_chk)(dest, src, n, dest_size);
   CopyShadowAndOrigin(dest, src, n, &stack);
   return res;
 }
-#define MSAN_MAYBE_INTERCEPT___MEMPCPY_CHK INTERCEPT_FUNCTION(__mempcpy_chk)
+#  define MSAN_MAYBE_INTERCEPT___MEMPCPY_CHK INTERCEPT_FUNCTION(__mempcpy_chk)
 #else
-#define MSAN_MAYBE_INTERCEPT___MEMPCPY_CHK
+#  define MSAN_MAYBE_INTERCEPT___MEMPCPY_CHK
 #endif
 
 INTERCEPTOR(int, posix_memalign, void **memptr, SIZE_T alignment, SIZE_T size) {
diff --git a/compiler-rt/test/msan/Linux/fortify.cpp b/compiler-rt/test/msan/Linux/fortify.cpp
index 4568aa182..d20559635 100644
--- a/compiler-rt/test/msan/Linux/fortify.cpp
+++ b/compiler-rt/test/msan/Linux/fortify.cpp
@@ -4,13 +4,16 @@
 // REQUIRES: glibc
 
 #include <assert.h>
-#include <string.h>
 #include <sanitizer/msan_interface.h>
+#include <string.h>
 
-extern "C" void *__memcpy_chk(void *dest, const void *src, size_t len, size_t destlen);
-extern "C" void *__memmove_chk(void *dest, const void *src, size_t len, size_t destlen);
+extern "C" void *__memcpy_chk(void *dest, const void *src, size_t len,
+                              size_t destlen);
+extern "C" void *__memmove_chk(void *dest, const void *src, size_t len,
+                               size_t destlen);
 extern "C" void *__memset_chk(void *dest, int c, size_t len, size_t destlen);
-extern "C" void *__mempcpy_chk(void *dest, const void *src, size_t len, size_t destlen);
+extern "C" void *__mempcpy_chk(void *dest, const void *src, size_t len,
+                               size_t destlen);
 
 int main(int argc, char *argv[]) {
   // Test __memcpy_chk shadow propagation
@@ -23,8 +26,10 @@ int main(int argc, char *argv[]) {
     src[2] = 2;
     __memcpy_chk(dest, src, 5, sizeof(dest));
     assert(__msan_test_shadow(dest, 5) == 0); // dest[0] is uninitialized
-    assert(__msan_test_shadow(dest + 1, 4) == 2); // dest[1], dest[2] are initialized, dest[3..4] are uninitialized
-    assert(__msan_test_shadow(dest + 5, 5) == -1); // dest[5..9] remain initialized
+    assert(__msan_test_shadow(dest + 1, 4) ==
+           2); // dest[1], dest[2] are initialized, dest[3..4] are uninitialized
+    assert(__msan_test_shadow(dest + 5, 5) ==
+           -1); // dest[5..9] remain initialized
   }
 
   // Test __memmove_chk shadow propagation
@@ -46,7 +51,8 @@ int main(int argc, char *argv[]) {
     char dest[10];
     __msan_poison(dest, sizeof(dest));
     __memset_chk(dest, 42, 5, sizeof(dest));
-    assert(__msan_test_shadow(dest, 10) == 5); // first 5 bytes are initialized, remaining 5 are uninitialized
+    assert(__msan_test_shadow(dest, 10) ==
+           5); // first 5 bytes are initialized, remaining 5 are uninitialized
   }
 
   // Test __mempcpy_chk shadow propagation

``````````

</details>


https://github.com/llvm/llvm-project/pull/206702


More information about the llvm-commits mailing list