[compiler-rt] [compiler-rt][rtsan] Fix failing file permissions test (PR #106095)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 26 08:44:17 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: Chris Apple (cjappl)
<details>
<summary>Changes</summary>
This reverts:
d8d8d659685b114f31d1c42d6d18c3bc6d98b171
This test was failing with the assertion:
```
/build/buildbot/premerge-monolithic-linux/llvm-project/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp:198: Failure
Value of: st.st_mode & 0777
Expected: is equal to 420
Actual: 384
```
My thought is that on my local machine, umask starts at 0022 (owner everything, group read, others read) and on the build machine umask starts at 0077 (owner everything, group nothing, others nothing).
To fix this bug, we need to record the delta between the existing umask and the requested file permissions. Does this seem reasonable?
---
Full diff: https://github.com/llvm/llvm-project/pull/106095.diff
1 Files Affected:
- (modified) compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp (+18-19)
``````````diff
diff --git a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp
index 5b88cf64612942..8e55ccc1116727 100644
--- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp
+++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors.cpp
@@ -184,25 +184,24 @@ TEST_F(RtsanFileTest, OpenatDiesWhenRealtime) {
ExpectNonRealtimeSurvival(func);
}
-// FIXME: This fails on the build machines, but not locally!
-// see https://github.com/llvm/llvm-project/pull/105732#issuecomment-2310286530
-// Value of: st.st_mode & 0777
-// Expected: is equal to 420
-// Actual: 384
-// TEST_F(RtsanFileTest, OpenCreatesFileWithProperMode) {
-// const int mode = S_IRGRP | S_IROTH | S_IRUSR | S_IWUSR;
-//
-// const int fd = open(GetTemporaryFilePath(), O_CREAT | O_WRONLY, mode);
-// ASSERT_THAT(fd, Ne(-1));
-// close(fd);
-//
-// struct stat st;
-// ASSERT_THAT(stat(GetTemporaryFilePath(), &st), Eq(0));
-//
-// // Mask st_mode to get permission bits only
-//
-// //ASSERT_THAT(st.st_mode & 0777, Eq(mode)); FAILED ASSERTION
-// }
+TEST_F(RtsanFileTest, OpenCreatesFileWithProperMode) {
+ const mode_t existing_umask = umask(0);
+ umask(existing_umask);
+
+ const int mode = S_IRGRP | S_IROTH | S_IRUSR | S_IWUSR;
+
+ const int fd = open(GetTemporaryFilePath(), O_CREAT | O_WRONLY, mode);
+ ASSERT_THAT(fd, Ne(-1));
+ close(fd);
+
+ struct stat st;
+ ASSERT_THAT(stat(GetTemporaryFilePath(), &st), Eq(0));
+
+ // Mask st_mode to get permission bits only
+ const mode_t actual_mode = st.st_mode & 0777;
+ const mode_t expected_mode = mode & ~existing_umask;
+ ASSERT_THAT(actual_mode, Eq(expected_mode));
+}
TEST_F(RtsanFileTest, CreatDiesWhenRealtime) {
auto func = [this]() { creat(GetTemporaryFilePath(), S_IWOTH | S_IROTH); };
``````````
</details>
https://github.com/llvm/llvm-project/pull/106095
More information about the llvm-commits
mailing list