[msan] gethostbyname interceptor.

llvm-svn: 173249
This commit is contained in:
Evgeniy Stepanov 2013-01-23 10:43:38 +00:00
parent d33516ef32
commit ffffbefa43
2 changed files with 20 additions and 0 deletions

View File

@ -612,6 +612,18 @@ INTERCEPTOR(int, uname, void *utsname) {
return res;
}
INTERCEPTOR(int, gethostname, char *name, SIZE_T len) {
ENSURE_MSAN_INITED();
int res = REAL(gethostname)(name, len);
if (!res) {
SIZE_T real_len = REAL(strnlen)(name, len);
if (real_len < len)
++real_len;
__msan_unpoison(name, real_len);
}
return res;
}
INTERCEPTOR(int, epoll_wait, int epfd, void *events, int maxevents,
int timeout) {
ENSURE_MSAN_INITED();
@ -936,6 +948,7 @@ void InitializeInterceptors() {
INTERCEPT_FUNCTION(statfs64);
INTERCEPT_FUNCTION(fstatfs64);
INTERCEPT_FUNCTION(uname);
INTERCEPT_FUNCTION(gethostname);
INTERCEPT_FUNCTION(epoll_wait);
INTERCEPT_FUNCTION(epoll_pwait);
INTERCEPT_FUNCTION(recv);

View File

@ -1306,6 +1306,13 @@ TEST(MemorySanitizer, uname) {
EXPECT_NOT_POISONED(strlen(u.machine));
}
TEST(MemorySanitizer, gethostname) {
char buf[100];
int res = gethostname(buf, 100);
assert(!res);
EXPECT_NOT_POISONED(strlen(buf));
}
template<class T>
static bool applySlt(T value, T shadow) {
__msan_partial_poison(&value, &shadow, sizeof(T));