[compiler-rt] [rtsan] Fix issue where close test would lead to crash (PR #144017)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 12 21:55:41 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Chris Apple (cjappl)
<details>
<summary>Changes</summary>
fixes: #<!-- -->138311
See that ticket for the steps that led to the crash.
# Changes in this PR
1. Change so that we always try to close an open fd by making it use our OpenFile fixture
2. Ensure we never close the fd twice by adjusting the fixture
3. Out of an abundance of caution, split the test in two so we never double close.
---
Full diff: https://github.com/llvm/llvm-project/pull/144017.diff
1 Files Affected:
- (modified) compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp (+13-7)
``````````diff
diff --git a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
index 048da5858d665..aa4ad6477e6e1 100644
--- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
@@ -449,12 +449,6 @@ TEST_F(RtsanFileTest, FcntlSetFdDiesWhenRealtime) {
close(fd);
}
-TEST(TestRtsanInterceptors, CloseDiesWhenRealtime) {
- auto Func = []() { close(0); };
- ExpectRealtimeDeath(Func, "close");
- ExpectNonRealtimeSurvival(Func);
-}
-
TEST(TestRtsanInterceptors, ChdirDiesWhenRealtime) {
auto Func = []() { chdir("."); };
ExpectRealtimeDeath(Func, "chdir");
@@ -606,8 +600,10 @@ class RtsanOpenedFileTest : public RtsanFileTest {
}
void TearDown() override {
- if (file != nullptr)
+ const bool is_open = fcntl(fd, F_GETFD) != -1;
+ if (is_open && file != nullptr)
fclose(file);
+
RtsanFileTest::TearDown();
}
@@ -620,6 +616,16 @@ class RtsanOpenedFileTest : public RtsanFileTest {
int fd = -1;
};
+TEST_F(RtsanOpenedFileTest, CloseDiesWhenRealtime) {
+ auto Func = [this]() { close(GetOpenFd()); };
+ ExpectRealtimeDeath(Func, "close");
+}
+
+TEST_F(RtsanOpenedFileTest, CloseSurvivesWhenNotRealtime) {
+ auto Func = [this]() { close(GetOpenFd()); };
+ ExpectNonRealtimeSurvival(Func);
+}
+
#if SANITIZER_INTERCEPT_FSEEK
TEST_F(RtsanOpenedFileTest, FgetposDieWhenRealtime) {
auto Func = [this]() {
``````````
</details>
https://github.com/llvm/llvm-project/pull/144017
More information about the llvm-commits
mailing list