From 02909a4046fbfffbe4332f796ea2089854c12bab Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Mon, 20 Jan 2025 07:55:40 +0000 Subject: [PATCH] [compiler-rt] rtsan pipe2 interception for Linux. (#123517) completing fpurge interception for mac too. --- .../lib/rtsan/rtsan_interceptors_posix.cpp | 15 +++++++++++++++ .../rtsan/tests/rtsan_test_interceptors_posix.cpp | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp index 7ab54c24a002f3..c4cf7791b53cf8 100644 --- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp @@ -302,6 +302,9 @@ INTERCEPTOR(int, fpurge, FILE *stream) { __rtsan_notify_intercepted_call("fpurge"); return REAL(fpurge)(stream); } +#define RTSAN_MAYBE_INTERCEPT_FPURGE INTERCEPT_FUNCTION(fpurge) +#else +#define RTSAN_MAYBE_INTERCEPT_FPURGE #endif INTERCEPTOR(FILE *, fdopen, int fd, const char *mode) { @@ -1031,6 +1034,16 @@ INTERCEPTOR(int, pipe, int pipefd[2]) { return REAL(pipe)(pipefd); } +#if !SANITIZER_APPLE +INTERCEPTOR(int, pipe2, int pipefd[2], int flags) { + __rtsan_notify_intercepted_call("pipe2"); + return REAL(pipe2)(pipefd, flags); +} +#define RTSAN_MAYBE_INTERCEPT_PIPE2 INTERCEPT_FUNCTION(pipe2) +#else +#define RTSAN_MAYBE_INTERCEPT_PIPE2 +#endif + INTERCEPTOR(int, mkfifo, const char *pathname, mode_t mode) { __rtsan_notify_intercepted_call("mkfifo"); return REAL(mkfifo)(pathname, mode); @@ -1133,6 +1146,8 @@ void __rtsan::InitializeInterceptors() { INTERCEPT_FUNCTION(puts); INTERCEPT_FUNCTION(fputs); INTERCEPT_FUNCTION(fflush); + RTSAN_MAYBE_INTERCEPT_FPURGE; + RTSAN_MAYBE_INTERCEPT_PIPE2; INTERCEPT_FUNCTION(fdopen); INTERCEPT_FUNCTION(freopen); RTSAN_MAYBE_INTERCEPT_FOPENCOOKIE; 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 0e03b19e80b6c5..3a7952efb1cf99 100644 --- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp @@ -1349,6 +1349,15 @@ TEST(TestRtsanInterceptors, PipeDiesWhenRealtime) { ExpectNonRealtimeSurvival(Func); } +#if !SANITIZER_APPLE +TEST(TestRtsanInterceptors, Pipe2DiesWhenRealtime) { + int fds[2]; + auto Func = [&fds]() { pipe2(fds, O_CLOEXEC); }; + ExpectRealtimeDeath(Func, "pipe2"); + ExpectNonRealtimeSurvival(Func); +} +#endif + #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdeprecated-declarations" TEST(TestRtsanInterceptors, SyscallDiesWhenRealtime) {