From c046cff1cf11d63aa0f5483b758464f989fbc029 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Thu, 17 Feb 2022 13:06:11 -0800 Subject: [PATCH] [msan] strsignal interceptor Reviewed By: kstoimenov Differential Revision: https://reviews.llvm.org/D120082 --- compiler-rt/lib/msan/msan_interceptors.cpp | 10 ++++++++++ compiler-rt/test/msan/strsignal.cpp | 13 +++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 compiler-rt/test/msan/strsignal.cpp diff --git a/compiler-rt/lib/msan/msan_interceptors.cpp b/compiler-rt/lib/msan/msan_interceptors.cpp index 5317af6..dbe18ce 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cpp +++ b/compiler-rt/lib/msan/msan_interceptors.cpp @@ -1436,6 +1436,15 @@ static uptr signal_impl(int signo, uptr cb) { #include "sanitizer_common/sanitizer_common_syscalls.inc" #include "sanitizer_common/sanitizer_syscalls_netbsd.inc" +INTERCEPTOR(const char *, strsignal, int sig) { + void *ctx; + COMMON_INTERCEPTOR_ENTER(ctx, strsignal, sig); + const char *res = REAL(strsignal)(sig); + if (res) + __msan_unpoison(res, internal_strlen(res) + 1); + return res; +} + struct dlinfo { char *dli_fname; void *dli_fbase; @@ -1699,6 +1708,7 @@ void InitializeInterceptors() { INTERCEPT_FUNCTION(gethostname); MSAN_MAYBE_INTERCEPT_EPOLL_WAIT; MSAN_MAYBE_INTERCEPT_EPOLL_PWAIT; + INTERCEPT_FUNCTION(strsignal); INTERCEPT_FUNCTION(dladdr); INTERCEPT_FUNCTION(dlerror); INTERCEPT_FUNCTION(dl_iterate_phdr); diff --git a/compiler-rt/test/msan/strsignal.cpp b/compiler-rt/test/msan/strsignal.cpp new file mode 100644 index 0000000..62b68e00 --- /dev/null +++ b/compiler-rt/test/msan/strsignal.cpp @@ -0,0 +1,13 @@ +// RUN: %clangxx_msan -O0 %s -o %t && %run %t + +#include +#include +#include +#include + +int main(void) { + const char *p = strsignal(SIGSEGV); + assert(p); + printf("%s %zu\n", p, strlen(p)); + return 0; +} -- 2.7.4