[compiler-rt] 6c9e098 - [compiler-rt][rtsan] symlink/symlinkat interception. (#134168)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 5 02:30:48 PDT 2025
Author: David CARLIER
Date: 2025-04-05T10:30:45+01:00
New Revision: 6c9e098b397fa8802b701a3a4ac827476b33568e
URL: https://github.com/llvm/llvm-project/commit/6c9e098b397fa8802b701a3a4ac827476b33568e
DIFF: https://github.com/llvm/llvm-project/commit/6c9e098b397fa8802b701a3a4ac827476b33568e.diff
LOG: [compiler-rt][rtsan] symlink/symlinkat interception. (#134168)
Added:
Modified:
compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
index aed43fcd92249..e8cea21ddf9aa 100644
--- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp
@@ -322,6 +322,17 @@ INTERCEPTOR(int, ftruncate64, int fd, off64_t length) {
#define RTSAN_MAYBE_INTERCEPT_FTRUNCATE64
#endif
+INTERCEPTOR(int, symlink, const char *target, const char *linkpath) {
+ __rtsan_notify_intercepted_call("symlink");
+ return REAL(symlink)(target, linkpath);
+}
+
+INTERCEPTOR(int, symlinkat, const char *target, int newdirfd,
+ const char *linkpath) {
+ __rtsan_notify_intercepted_call("symlinkat");
+ return REAL(symlinkat)(target, newdirfd, linkpath);
+}
+
// Streams
INTERCEPTOR(FILE *, fopen, const char *path, const char *mode) {
@@ -1523,6 +1534,8 @@ void __rtsan::InitializeInterceptors() {
RTSAN_MAYBE_INTERCEPT_READLINKAT;
INTERCEPT_FUNCTION(unlink);
INTERCEPT_FUNCTION(unlinkat);
+ INTERCEPT_FUNCTION(symlink);
+ INTERCEPT_FUNCTION(symlinkat);
INTERCEPT_FUNCTION(truncate);
INTERCEPT_FUNCTION(ftruncate);
RTSAN_MAYBE_INTERCEPT_TRUNCATE64;
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 3a43f4f9c434c..048da5858d665 100644
--- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
+++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp
@@ -897,6 +897,22 @@ TEST_F(RtsanOpenedFileTest, FtruncateDiesWhenRealtime) {
ExpectNonRealtimeSurvival(Func);
}
+TEST_F(RtsanOpenedFileTest, SymlinkDiesWhenRealtime) {
+ auto Func = [&]() {
+ symlink("/tmp/rtsan_symlink_test", GetTemporaryFilePath());
+ };
+ ExpectRealtimeDeath(Func, "symlink");
+ ExpectNonRealtimeSurvival(Func);
+}
+
+TEST_F(RtsanOpenedFileTest, SymlinkatDiesWhenRealtime) {
+ auto Func = [&]() {
+ symlinkat("/tmp/rtsan_symlinkat_test", AT_FDCWD, GetTemporaryFilePath());
+ };
+ ExpectRealtimeDeath(Func, "symlinkat");
+ ExpectNonRealtimeSurvival(Func);
+}
+
TEST_F(RtsanFileTest, FcloseDiesWhenRealtime) {
FILE *f = fopen(GetTemporaryFilePath(), "w");
EXPECT_THAT(f, Ne(nullptr));
More information about the llvm-commits
mailing list