forked from OSchip/llvm-project
parent
14a4449589
commit
97aea34b54
|
@ -629,6 +629,28 @@ TEST(MemorySanitizer, socketpair) {
|
||||||
close(sv[1]);
|
close(sv[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(MemorySanitizer, bind_getsockname) {
|
||||||
|
int sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
|
|
||||||
|
struct sockaddr_in sai;
|
||||||
|
memset(&sai, 0, sizeof(sai));
|
||||||
|
sai.sin_family = AF_UNIX;
|
||||||
|
int res = bind(sock, (struct sockaddr *)&sai, sizeof(sai));
|
||||||
|
|
||||||
|
assert(!res);
|
||||||
|
char buf[200];
|
||||||
|
socklen_t addrlen;
|
||||||
|
EXPECT_UMR(getsockname(sock, (struct sockaddr *)&buf, &addrlen));
|
||||||
|
|
||||||
|
addrlen = sizeof(buf);
|
||||||
|
res = getsockname(sock, (struct sockaddr *)&buf, &addrlen);
|
||||||
|
EXPECT_NOT_POISONED(addrlen);
|
||||||
|
EXPECT_NOT_POISONED(buf[0]);
|
||||||
|
EXPECT_NOT_POISONED(buf[addrlen - 1]);
|
||||||
|
EXPECT_POISONED(buf[addrlen]);
|
||||||
|
close(sock);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(MemorySanitizer, getcwd) {
|
TEST(MemorySanitizer, getcwd) {
|
||||||
char path[PATH_MAX + 1];
|
char path[PATH_MAX + 1];
|
||||||
char* res = getcwd(path, sizeof(path));
|
char* res = getcwd(path, sizeof(path));
|
||||||
|
|
|
@ -779,6 +779,22 @@ INTERCEPTOR(int, getaddrinfo, char *node, char *service,
|
||||||
#define INIT_GETADDRINFO
|
#define INIT_GETADDRINFO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if SANITIZER_INTERCEPT_GETSOCKNAME
|
||||||
|
INTERCEPTOR(int, getsockname, int sock_fd, void *addr, int *addrlen) {
|
||||||
|
void *ctx;
|
||||||
|
COMMON_INTERCEPTOR_ENTER(ctx, getsockname, sock_fd, addr, addrlen);
|
||||||
|
COMMON_INTERCEPTOR_READ_RANGE(ctx, addrlen, sizeof(*addrlen));
|
||||||
|
int addrlen_in = *addrlen;
|
||||||
|
int res = REAL(getsockname)(sock_fd, addr, addrlen);
|
||||||
|
if (res == 0) {
|
||||||
|
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, addr, Min(addrlen_in, *addrlen));
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
#define INIT_GETSOCKNAME INTERCEPT_FUNCTION(getsockname);
|
||||||
|
#else
|
||||||
|
#define INIT_GETSOCKNAME
|
||||||
|
#endif
|
||||||
|
|
||||||
#define SANITIZER_COMMON_INTERCEPTORS_INIT \
|
#define SANITIZER_COMMON_INTERCEPTORS_INIT \
|
||||||
INIT_STRCASECMP; \
|
INIT_STRCASECMP; \
|
||||||
|
@ -803,4 +819,5 @@ INTERCEPTOR(int, getaddrinfo, char *node, char *service,
|
||||||
INIT_WAIT; \
|
INIT_WAIT; \
|
||||||
INIT_INET; \
|
INIT_INET; \
|
||||||
INIT_PTHREAD_GETSCHEDPARAM; \
|
INIT_PTHREAD_GETSCHEDPARAM; \
|
||||||
INIT_GETADDRINFO;
|
INIT_GETADDRINFO; \
|
||||||
|
INIT_GETSOCKNAME;
|
||||||
|
|
|
@ -71,5 +71,6 @@
|
||||||
# define SANITIZER_INTERCEPT_INET SI_NOT_WINDOWS
|
# define SANITIZER_INTERCEPT_INET SI_NOT_WINDOWS
|
||||||
# define SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM SI_NOT_WINDOWS
|
# define SANITIZER_INTERCEPT_PTHREAD_GETSCHEDPARAM SI_NOT_WINDOWS
|
||||||
# define SANITIZER_INTERCEPT_GETADDRINFO SI_NOT_WINDOWS
|
# define SANITIZER_INTERCEPT_GETADDRINFO SI_NOT_WINDOWS
|
||||||
|
# define SANITIZER_INTERCEPT_GETSOCKNAME SI_NOT_WINDOWS
|
||||||
|
|
||||||
#endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
|
#endif // #ifndef SANITIZER_PLATFORM_INTERCEPTORS_H
|
||||||
|
|
|
@ -312,6 +312,7 @@ void StatOutput(u64 *stat) {
|
||||||
name[StatInt_inet_ntop] = " inet_ntop ";
|
name[StatInt_inet_ntop] = " inet_ntop ";
|
||||||
name[StatInt_inet_pton] = " inet_pton ";
|
name[StatInt_inet_pton] = " inet_pton ";
|
||||||
name[StatInt_getaddrinfo] = " getaddrinfo ";
|
name[StatInt_getaddrinfo] = " getaddrinfo ";
|
||||||
|
name[StatInt_getsockname] = " getsockname ";
|
||||||
|
|
||||||
name[StatAnnotation] = "Dynamic annotations ";
|
name[StatAnnotation] = "Dynamic annotations ";
|
||||||
name[StatAnnotateHappensBefore] = " HappensBefore ";
|
name[StatAnnotateHappensBefore] = " HappensBefore ";
|
||||||
|
|
|
@ -307,6 +307,7 @@ enum StatType {
|
||||||
StatInt_inet_ntop,
|
StatInt_inet_ntop,
|
||||||
StatInt_inet_pton,
|
StatInt_inet_pton,
|
||||||
StatInt_getaddrinfo,
|
StatInt_getaddrinfo,
|
||||||
|
StatInt_getsockname,
|
||||||
|
|
||||||
// Dynamic annotations.
|
// Dynamic annotations.
|
||||||
StatAnnotation,
|
StatAnnotation,
|
||||||
|
|
Loading…
Reference in New Issue