From 23596fece043fa04206dcd5b26b4ca832e6741db Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 10 May 2021 13:27:06 +0200 Subject: [PATCH] sanitizer_common: don't write into .rodata setlocale interceptor imitates a write into result, which may be located in .rodata section. This is the only interceptor that tries to do this and I think the intention was to initialize the range for msan. So do that instead. Writing into .rodata shouldn't happen (without crashing later on the actual write) and this traps on my local tsan experiments. Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D102161 --- compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 39b494e..7867fcc 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -3357,7 +3357,7 @@ INTERCEPTOR(char *, setlocale, int category, char *locale) { COMMON_INTERCEPTOR_READ_RANGE(ctx, locale, REAL(strlen)(locale) + 1); char *res = REAL(setlocale)(category, locale); if (res) { - COMMON_INTERCEPTOR_WRITE_RANGE(ctx, res, REAL(strlen)(res) + 1); + COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, REAL(strlen)(res) + 1); unpoison_ctype_arrays(ctx); } return res; -- 2.7.4