[libc-commits] [libc] 1e7624c - [libc] Make LlvmLibcStackChkFail.Smash test compatible with asan, hwasan (#125763)
via libc-commits
libc-commits at lists.llvm.org
Tue Feb 4 13:42:26 PST 2025
Author: Roland McGrath
Date: 2025-02-04T13:42:23-08:00
New Revision: 1e7624ca4f3c9df14242b532eeb9497c67bc4074
URL: https://github.com/llvm/llvm-project/commit/1e7624ca4f3c9df14242b532eeb9497c67bc4074
DIFF: https://github.com/llvm/llvm-project/commit/1e7624ca4f3c9df14242b532eeb9497c67bc4074.diff
LOG: [libc] Make LlvmLibcStackChkFail.Smash test compatible with asan, hwasan (#125763)
Previously this test was entirely disabled under asan, but not
hwasan. Instead of disabling the test, make the test compatible
with both asan and hwasan by disabling sanitizers only on the
subroutine that does the stack-smashing.
Added:
Modified:
libc/test/src/compiler/stack_chk_guard_test.cpp
Removed:
################################################################################
diff --git a/libc/test/src/compiler/stack_chk_guard_test.cpp b/libc/test/src/compiler/stack_chk_guard_test.cpp
index 4ec8398c9fc95d..d1869a2af412e4 100644
--- a/libc/test/src/compiler/stack_chk_guard_test.cpp
+++ b/libc/test/src/compiler/stack_chk_guard_test.cpp
@@ -12,19 +12,24 @@
#include "src/string/memset.h"
#include "test/UnitTest/Test.h"
+namespace {
+
TEST(LlvmLibcStackChkFail, Death) {
EXPECT_DEATH([] { __stack_chk_fail(); }, WITH_SIGNAL(SIGABRT));
}
-// Disable the test when asan is enabled so that it doesn't immediately fail
-// after the memset, but before the stack canary is re-checked.
-#ifndef LIBC_HAS_ADDRESS_SANITIZER
+// Disable sanitizers such as asan and hwasan that would catch the buffer
+// overrun before it clobbered the stack canary word. Function attributes
+// can't be applied to lambdas before C++23, so this has to be separate. When
+// https://github.com/llvm/llvm-project/issues/125760 is fixed, this can use
+// the modern spelling [[gnu::no_sanitize(...)]] without conditionalization.
+__attribute__((no_sanitize("all"))) void smash_stack() {
+ int arr[20];
+ LIBC_NAMESPACE::memset(arr, 0xAA, 2001);
+}
+
TEST(LlvmLibcStackChkFail, Smash) {
- EXPECT_DEATH(
- [] {
- int arr[20];
- LIBC_NAMESPACE::memset(arr, 0xAA, 2001);
- },
- WITH_SIGNAL(SIGABRT));
+ EXPECT_DEATH(smash_stack, WITH_SIGNAL(SIGABRT));
}
-#endif // LIBC_HAS_ADDRESS_SANITIZER
+
+} // namespace
More information about the libc-commits
mailing list