From 011e9cef0f485cea3f7e979640d0619929383768 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Fri, 22 Nov 2024 02:48:11 +0000 Subject: [PATCH 1/2] [compiler-rt][rtsan] intercept accept4 syscall. --- compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp index 4f7b534ee17a8..20021e414794a 100644 --- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp @@ -707,6 +707,14 @@ INTERCEPTOR(int, shutdown, int socket, int how) { return REAL(shutdown)(socket, how); } +#if SANITIZER_INTERCEPT_ACCEPT4 +INTERCEPTOR(int, accept4, int socket, struct sockaddr *address, + socklen_t *address_len, int flags) { + __rtsan_notify_intercepted_call("accept4"); + return REAL(accept4)(socket, address, address_len, flags); +} +#endif + // I/O Multiplexing INTERCEPTOR(int, poll, struct pollfd *fds, nfds_t nfds, int timeout) { @@ -956,6 +964,9 @@ void __rtsan::InitializeInterceptors() { INTERCEPT_FUNCTION(sendto); INTERCEPT_FUNCTION(shutdown); INTERCEPT_FUNCTION(socket); +#if SANITIZER_INTERCEPT_ACCEPT4 + INTERCEPT_FUNCTION(accept4); +#endif RTSAN_MAYBE_INTERCEPT_SELECT; INTERCEPT_FUNCTION(pselect); From 1f2f70dfb4c632308c9afe866408d1a97fb1bc3b Mon Sep 17 00:00:00 2001 From: David Carlier Date: Thu, 5 Dec 2024 04:52:19 +0000 Subject: [PATCH 2/2] changes from review --- compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp | 7 ++++--- .../lib/rtsan/tests/rtsan_test_interceptors_posix.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp index 20021e414794a..f99d68defa613 100644 --- a/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/rtsan_interceptors_posix.cpp @@ -713,6 +713,9 @@ INTERCEPTOR(int, accept4, int socket, struct sockaddr *address, __rtsan_notify_intercepted_call("accept4"); return REAL(accept4)(socket, address, address_len, flags); } +#define RTSAN_MAYBE_INTERCEPT_ACCEPT4 INTERCEPT_FUNCTION(accept4) +#else +#define RTSAN_MAYBE_INTERCEPT_ACCEPT4 #endif // I/O Multiplexing @@ -964,9 +967,7 @@ void __rtsan::InitializeInterceptors() { INTERCEPT_FUNCTION(sendto); INTERCEPT_FUNCTION(shutdown); INTERCEPT_FUNCTION(socket); -#if SANITIZER_INTERCEPT_ACCEPT4 - INTERCEPT_FUNCTION(accept4); -#endif + RTSAN_MAYBE_INTERCEPT_ACCEPT4; RTSAN_MAYBE_INTERCEPT_SELECT; INTERCEPT_FUNCTION(pselect); 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 88df8ec46d0a3..6e7cc3b3b3481 100644 --- a/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp +++ b/compiler-rt/lib/rtsan/tests/rtsan_test_interceptors_posix.cpp @@ -860,6 +860,16 @@ TEST(TestRtsanInterceptors, AcceptingASocketDiesWhenRealtime) { ExpectNonRealtimeSurvival(Func); } +#if SANITIZER_INTERCEPT_ACCEPT4 +TEST(TestRtsanInterceptors, Accepting4ASocketDiesWhenRealtime) { + auto Func = []() { + EXPECT_LT(accept4(kNotASocketFd, nullptr, nullptr, 0), 0); + }; + ExpectRealtimeDeath(Func, "accept4"); + ExpectNonRealtimeSurvival(Func); +} +#endif + TEST(TestRtsanInterceptors, ConnectingASocketDiesWhenRealtime) { auto Func = []() { EXPECT_NE(connect(kNotASocketFd, nullptr, 0), 0); }; ExpectRealtimeDeath(Func, "connect");