From 52d7f14a895eb8669d72cd02754e5586de3e61d8 Mon Sep 17 00:00:00 2001 From: Florian Mayer Date: Thu, 27 Mar 2025 19:51:04 -0700 Subject: [PATCH] Revert "[sanitizer] intercept getservent_r, getservbyname_r, getservbyport_r" (#133358) Reverts llvm/llvm-project#133339 --- compiler-rt/lib/msan/tests/msan_test.cpp | 69 ------------------- .../sanitizer_common_interceptors.inc | 63 ----------------- .../sanitizer_platform_interceptors.h | 4 -- .../sanitizer_platform_limits_posix.h | 9 --- 4 files changed, 145 deletions(-) diff --git a/compiler-rt/lib/msan/tests/msan_test.cpp b/compiler-rt/lib/msan/tests/msan_test.cpp index 8b7df85e0ff0..a126dd4fdd55 100644 --- a/compiler-rt/lib/msan/tests/msan_test.cpp +++ b/compiler-rt/lib/msan/tests/msan_test.cpp @@ -4908,74 +4908,5 @@ TEST(MemorySanitizer, timer_create) { EXPECT_POISONED(timer2); timer_delete(timer); } - -TEST(MemorySanitizer, getservent_r) { - struct servent result_buf; - struct servent *result; - char buf[1024]; - EXPECT_POISONED(result_buf); - EXPECT_POISONED(result); - EXPECT_POISONED(buf); - ASSERT_EQ(getservent_r(&result_buf, buf, sizeof(buf), &result), 0); - EXPECT_NOT_POISONED(result); - ASSERT_NE(result, nullptr); - EXPECT_NOT_POISONED(result_buf); - EXPECT_NOT_POISONED(buf); -} - -TEST(MemorySanitizer, getservbyname_r) { - struct servent result_buf; - struct servent *result; - char buf[1024]; - EXPECT_POISONED(result_buf); - EXPECT_POISONED(result); - EXPECT_POISONED(buf); - ASSERT_EQ( - getservbyname_r("ssh", nullptr, &result_buf, buf, sizeof(buf), &result), - 0); - EXPECT_NOT_POISONED(result); - // If this fails, check /etc/services if "ssh" exists. I picked this because - // it should exist everywhere, if it doesn't, I am sorry. Disable the test - // then please. - ASSERT_NE(result, nullptr); - EXPECT_NOT_POISONED(result_buf); - EXPECT_NOT_POISONED(buf); -} - -TEST(MemorySanitizer, getservbyname_r_unknown) { - struct servent result_buf; - struct servent *result; - char buf[1024]; - EXPECT_POISONED(result_buf); - EXPECT_POISONED(result); - EXPECT_POISONED(buf); - ASSERT_EQ(getservbyname_r("invalidhadfuiasdhi", nullptr, &result_buf, buf, - sizeof(buf), &result), - 0); - EXPECT_NOT_POISONED(result); - ASSERT_EQ(result, nullptr); - EXPECT_POISONED(result_buf); - EXPECT_POISONED(buf); -} - -TEST(MemorySanitizer, getservbyport_r) { - struct servent result_buf; - struct servent *result; - char buf[1024]; - EXPECT_POISONED(result_buf); - EXPECT_POISONED(result); - EXPECT_POISONED(buf); - ASSERT_EQ(getservbyport_r(htons(22), nullptr, &result_buf, buf, sizeof(buf), - &result), - 0); - EXPECT_NOT_POISONED(result); - // If this fails, check /etc/services if "ssh" exists. I picked this because - // it should exist everywhere, if it doesn't, I am sorry. Disable the test - // then please. - ASSERT_NE(result, nullptr); - EXPECT_NOT_POISONED(result_buf); - EXPECT_NOT_POISONED(buf); -} - #endif } // namespace diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 1be8a901ab06..761dbd3f5a67 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -10279,66 +10279,6 @@ INTERCEPTOR(SSIZE_T, freadlink, int fd, char *buf, SIZE_T bufsiz) { # define INIT_FREADLINK #endif -UNUSED static void HandleGetServentReentrantResult( - void *ctx, int res, struct __sanitizer_servent *result_buf, char *buf, - SIZE_T buflen, struct __sanitizer_servent **result) { - if (res) - return; - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, (char *)result, sizeof(void *)); - if (*result) { - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, (char *)*result, - sizeof(__sanitizer_servent)); - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, buf, buflen); - } -} - -#if SANITIZER_INTERCEPT_GETSERVENT_R -INTERCEPTOR(int, getservent_r, struct __sanitizer_servent *result_buf, - char *buf, SIZE_T buflen, struct __sanitizer_servent **result) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, getservent_r, result_buf, buf, buflen, result); - int res = REAL(getservent_r)(result_buf, buf, buflen, result); - HandleGetServentReentrantResult(ctx, res, result_buf, buf, buflen, result); - return res; -} -# define INIT_GETSERVENT_R COMMON_INTERCEPT_FUNCTION(getservent_r) -#else -# define INIT_GETSERVENT_R -#endif - -#if SANITIZER_INTERCEPT_GETSERVBYNAME_R -INTERCEPTOR(int, getservbyname_r, const char *name, const char *proto, - struct __sanitizer_servent *result_buf, char *buf, SIZE_T buflen, - struct __sanitizer_servent **result) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, getservbyname_r, name, proto, result_buf, buf, - buflen, result); - COMMON_INTERCEPTOR_READ_STRING(ctx, name, internal_strlen(name)); - int res = REAL(getservbyname_r)(name, proto, result_buf, buf, buflen, result); - HandleGetServentReentrantResult(ctx, res, result_buf, buf, buflen, result); - return res; -} -# define INIT_GETSERVBYNAME_R COMMON_INTERCEPT_FUNCTION(getservbyname_r) -#else -# define INIT_GETSERVBYNAME_R -#endif - -#if SANITIZER_INTERCEPT_GETSERVBYPORT_R -INTERCEPTOR(int, getservbyport_r, int port, const char *proto, - struct __sanitizer_servent *result_buf, char *buf, SIZE_T buflen, - struct __sanitizer_servent **result) { - void *ctx; - COMMON_INTERCEPTOR_ENTER(ctx, getservbyport_r, port, proto, result_buf, buf, - buflen, result); - int res = REAL(getservbyport_r)(port, proto, result_buf, buf, buflen, result); - HandleGetServentReentrantResult(ctx, res, result_buf, buf, buflen, result); - return res; -} -# define INIT_GETSERVBYPORT_R COMMON_INTERCEPT_FUNCTION(getservbyport_r) -#else -# define INIT_GETSERVBYPORT_R -#endif - #include "sanitizer_common_interceptors_netbsd_compat.inc" namespace __sanitizer { @@ -10664,7 +10604,4 @@ static void InitializeCommonInterceptors() { INIT_FREADLINK; INIT___PRINTF_CHK; - INIT_GETSERVENT_R; - INIT_GETSERVBYNAME_R; - INIT_GETSERVBYPORT_R; } diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index b8f2f738e747..468b5494d009 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -645,10 +645,6 @@ SANITIZER_WEAK_IMPORT void *aligned_alloc(__sanitizer::usize __alignment, # define SI_MAC_OS_DEPLOYMENT_MIN_13_00 0 #endif #define SANITIZER_INTERCEPT_FREADLINK (SI_MAC && SI_MAC_OS_DEPLOYMENT_MIN_13_00) -#define SANITIZER_INTERCEPT_GETSERVENT_R SI_GLIBC -#define SANITIZER_INTERCEPT_GETSERVBYNAME_R SI_GLIBC -#define SANITIZER_INTERCEPT_GETSERVBYPORT_R SI_GLIBC - // This macro gives a way for downstream users to override the above // interceptor macros irrespective of the platform they are on. They have // to do two things: diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h index 1f7e3d21b6a6..67f00ff6f9e7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h @@ -1509,15 +1509,6 @@ extern unsigned IOCTL_KIOCSOUND; extern unsigned IOCTL_PIO_SCRNMAP; #endif -# if SANITIZER_GLIBC -struct __sanitizer_servent { - char *s_name; - char **s_aliases; - int s_port; - char *s_proto; -}; -# endif - extern const int si_SEGV_MAPERR; extern const int si_SEGV_ACCERR; } // namespace __sanitizer