Skip to content

Commit 38752ff

Browse files
authored
[sanitizer] Adjust size for begin/start mismatch (#109079)
Follow up to 51d913a.
1 parent 2383bc8 commit 38752ff

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

compiler-rt/lib/sanitizer_common/sanitizer_tls_get_addr.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "sanitizer_allocator_interface.h"
1616
#include "sanitizer_atomic.h"
1717
#include "sanitizer_common/sanitizer_common.h"
18+
#include "sanitizer_common/sanitizer_internal_defs.h"
1819
#include "sanitizer_flags.h"
1920
#include "sanitizer_platform_interceptors.h"
2021

@@ -116,10 +117,14 @@ SANITIZER_INTERFACE_WEAK_DEF(uptr, __sanitizer_get_dtls_size,
116117
const void *start = __sanitizer_get_allocated_begin(tls_begin);
117118
if (!start)
118119
return 0;
120+
CHECK_LE(start, tls_begin);
119121
uptr tls_size = __sanitizer_get_allocated_size(start);
120122
VReport(2, "__tls_get_addr: glibc DTLS suspected; tls={%p,0x%zx}\n",
121123
tls_begin, tls_size);
122-
return tls_size;
124+
uptr offset =
125+
(reinterpret_cast<uptr>(tls_begin) - reinterpret_cast<uptr>(start));
126+
CHECK_LE(offset, tls_size);
127+
return tls_size - offset;
123128
}
124129

125130
DTLS::DTV *DTLS_on_tls_get_addr(void *arg_void, void *res,

0 commit comments

Comments
 (0)