From d65663b308c99e27ef984cf021b76f107bc337ad Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Tue, 17 Sep 2024 20:34:17 -0700 Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?= =?UTF-8?q?l=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.4 --- .../lib/sanitizer_common/sanitizer_tls_get_addr.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp index 0db8547268f4e..6f3b6af3c5847 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp @@ -15,6 +15,7 @@ #include "sanitizer_allocator_interface.h" #include "sanitizer_atomic.h" #include "sanitizer_common/sanitizer_common.h" +#include "sanitizer_common/sanitizer_internal_defs.h" #include "sanitizer_flags.h" #include "sanitizer_platform_interceptors.h" @@ -116,10 +117,14 @@ SANITIZER_INTERFACE_WEAK_DEF(uptr, __sanitizer_get_dtls_size, const void *start = __sanitizer_get_allocated_begin(tls_begin); if (!start) return 0; + CHECK_LE(start, tls_begin); uptr tls_size = __sanitizer_get_allocated_size(start); VReport(2, "__tls_get_addr: glibc DTLS suspected; tls={%p,0x%zx}\n", tls_begin, tls_size); - return tls_size; + uptr offset = + (reinterpret_cast(tls_begin) - reinterpret_cast(start)); + CHECK_LE(offset, tls_size); + return tls_size - offset; } DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,