[compiler-rt] b297fd7 - [msan] Don't intercept LFS prlimit64/getrlimit64 on musl
Sam James via llvm-commits
llvm-commits at lists.llvm.org
Sat May 20 18:06:42 PDT 2023
Author: Sam James
Date: 2023-05-21T02:06:28+01:00
New Revision: b297fd7974b282b66605547c7adb2eadbf82214f
URL: https://github.com/llvm/llvm-project/commit/b297fd7974b282b66605547c7adb2eadbf82214f
DIFF: https://github.com/llvm/llvm-project/commit/b297fd7974b282b66605547c7adb2eadbf82214f.diff
LOG: [msan] Don't intercept LFS prlimit64/getrlimit64 on musl
These are aliases on musl and as of 1.2.4, aren't visible by default
(only with -D_LARGEFILE64_SOURCE), and will be removed entirely in a future
release.
This fixes a runtime failure with msan on musl-1.2.4:
```
$ echo 'int main(){}' | clang -x c - -fsanitize=memory -o /dev/null
/usr/bin/x86_64-gentoo-linux-musl-ld.bfd: /usr/lib/llvm/16/bin/../../../../lib/clang/16/lib/linux/libclang_rt.msan-x86_64.a(msan_interceptors.cpp.o): in function `__interceptor_getrlimit64':
[...]
```
Bug: https://bugs.gentoo.org/906603
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D150925
Added:
Modified:
compiler-rt/lib/msan/msan_interceptors.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/msan/msan_interceptors.cpp b/compiler-rt/lib/msan/msan_interceptors.cpp
index 8cf724b3949f2..3ebcc7f26bf91 100644
--- a/compiler-rt/lib/msan/msan_interceptors.cpp
+++ b/compiler-rt/lib/msan/msan_interceptors.cpp
@@ -678,7 +678,7 @@ INTERCEPTOR(int, fstat, int fd, void *buf) {
#define MSAN_MAYBE_INTERCEPT_FSTAT
#endif
-#if SANITIZER_STAT_LINUX
+#if SANITIZER_GLIBC
INTERCEPTOR(int, fstat64, int fd, void *buf) {
ENSURE_MSAN_INITED();
int res = REAL(fstat64)(fd, buf);
@@ -825,6 +825,7 @@ INTERCEPTOR(int, __getrlimit, int resource, void *rlim) {
INTERCEPTOR_GETRLIMIT_BODY(__getrlimit, resource, rlim);
}
+#if SANITIZER_GLIBC
INTERCEPTOR(int, getrlimit64, int resource, void *rlim) {
if (msan_init_is_running) return REAL(getrlimit64)(resource, rlim);
ENSURE_MSAN_INITED();
@@ -832,6 +833,9 @@ INTERCEPTOR(int, getrlimit64, int resource, void *rlim) {
if (!res) __msan_unpoison(rlim, __sanitizer::struct_rlimit64_sz);
return res;
}
+#else
+#define MSAN_MAYBE_INTERCEPT_GETRLIMIT64 INTERCEPT_FUNCTION(getrlimit64)
+#endif
INTERCEPTOR(int, prlimit, int pid, int resource, void *new_rlimit,
void *old_rlimit) {
@@ -844,6 +848,7 @@ INTERCEPTOR(int, prlimit, int pid, int resource, void *new_rlimit,
return res;
}
+#if SANITIZER_GLIBC
INTERCEPTOR(int, prlimit64, int pid, int resource, void *new_rlimit,
void *old_rlimit) {
if (msan_init_is_running)
@@ -854,6 +859,9 @@ INTERCEPTOR(int, prlimit64, int pid, int resource, void *new_rlimit,
if (!res) __msan_unpoison(old_rlimit, __sanitizer::struct_rlimit64_sz);
return res;
}
+#else
+#define MSAN_MAYBE_INTERCEPT_PRLIMIT64 INTERCEPT_FUNCTION(prlimit64)
+#endif
#define MSAN_MAYBE_INTERCEPT___GETRLIMIT INTERCEPT_FUNCTION(__getrlimit)
#define MSAN_MAYBE_INTERCEPT_GETRLIMIT64 INTERCEPT_FUNCTION(getrlimit64)
@@ -1777,9 +1785,13 @@ void InitializeInterceptors() {
MSAN_MAYBE_INTERCEPT_FGETS_UNLOCKED;
INTERCEPT_FUNCTION(getrlimit);
MSAN_MAYBE_INTERCEPT___GETRLIMIT;
+#if SANITIZER_GLIBC
MSAN_MAYBE_INTERCEPT_GETRLIMIT64;
+#endif
MSAN_MAYBE_INTERCEPT_PRLIMIT;
+#if SANITIZER_GLIBC
MSAN_MAYBE_INTERCEPT_PRLIMIT64;
+#endif
INTERCEPT_FUNCTION(gethostname);
MSAN_MAYBE_INTERCEPT_EPOLL_WAIT;
MSAN_MAYBE_INTERCEPT_EPOLL_PWAIT;
More information about the llvm-commits
mailing list