summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViktor Kutuzov <vkutuzov@accesssoftek.com>2015-01-14 14:59:46 +0000
committerViktor Kutuzov <vkutuzov@accesssoftek.com>2015-01-14 14:59:46 +0000
commitebd1d5bbdbf66799d0da03068af1649753cf5f27 (patch)
tree518933ff5f5fb3099a56588c2be42ce11effe414
parent0f57ea6762e52aa65732ae8036409fbb0e467b26 (diff)
downloadcompiler-rt-ebd1d5bbdbf66799d0da03068af1649753cf5f27.tar.gz
[Msan] Fix strlen() and strnlen() interceptors to work on FreeBSD
Differential Revision: http://reviews.llvm.org/D6928 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@225986 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/msan/msan_interceptors.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc
index ee3d5f432..d0e59d130 100644
--- a/lib/msan/msan_interceptors.cc
+++ b/lib/msan/msan_interceptors.cc
@@ -318,6 +318,8 @@ INTERCEPTOR(char *, stpcpy, char *dest, const char *src) { // NOLINT
INTERCEPTOR(char *, strdup, char *src) {
ENSURE_MSAN_INITED();
GET_STORE_STACK_TRACE;
+ // On FreeBSD strdup() leverages strlen().
+ InterceptorScope interceptor_scope;
SIZE_T n = REAL(strlen)(src);
char *res = REAL(strdup)(src);
CopyPoison(res, src, n + 1, &stack);
@@ -341,6 +343,8 @@ INTERCEPTOR(char *, __strdup, char *src) {
INTERCEPTOR(char *, strndup, char *src, SIZE_T n) {
ENSURE_MSAN_INITED();
GET_STORE_STACK_TRACE;
+ // On FreeBSD strndup() leverages strnlen().
+ InterceptorScope interceptor_scope;
SIZE_T copy_size = REAL(strnlen)(src, n);
char *res = REAL(strndup)(src, n);
CopyPoison(res, src, copy_size, &stack);