forked from OSchip/llvm-project
parent
d33516ef32
commit
ffffbefa43
|
@ -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);
|
||||
|
|
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue