diff options
author | Sergey Matveev <earthdok@google.com> | 2014-03-21 10:12:17 +0000 |
---|---|---|
committer | Sergey Matveev <earthdok@google.com> | 2014-03-21 10:12:17 +0000 |
commit | 10611387bbadd3bc811b3bced9228b52b0e75dca (patch) | |
tree | da6472f68d876f7944eced51ca6d6b68a2277190 /lib/msan | |
parent | d754f1f61549c5f7014a64c42556f686e23b1891 (diff) |
[MSan] Add __msan_unpoison_string() to the public interface.
Using __msan_unpoison() on null-terminated strings is awkward because
strlen() can't be called on a poisoned string. This case warrants a special
interface function.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@204448 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan')
-rw-r--r-- | lib/msan/msan_interceptors.cc | 5 | ||||
-rw-r--r-- | lib/msan/msan_interface_internal.h | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 8f30d4d0e..992d73516 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -1372,6 +1372,11 @@ void *__msan_memmove(void *dest, const void *src, SIZE_T n) { return res; } +void __msan_unpoison_string(const char* s) { + if (!MEM_IS_APP(s)) return; + __msan_unpoison(s, REAL(strlen)(s) + 1); +} + namespace __msan { void CopyOrigin(void *dst, const void *src, uptr size, StackTrace *stack) { diff --git a/lib/msan/msan_interface_internal.h b/lib/msan/msan_interface_internal.h index 685a8c69f..ebafe3c5f 100644 --- a/lib/msan/msan_interface_internal.h +++ b/lib/msan/msan_interface_internal.h @@ -40,6 +40,8 @@ void __msan_warning_noreturn(); SANITIZER_INTERFACE_ATTRIBUTE void __msan_unpoison(const void *a, uptr size); SANITIZER_INTERFACE_ATTRIBUTE +void __msan_unpoison_string(const char *s); +SANITIZER_INTERFACE_ATTRIBUTE void __msan_clear_and_unpoison(void *a, uptr size); SANITIZER_INTERFACE_ATTRIBUTE void* __msan_memcpy(void *dst, const void *src, uptr size); |