forked from OSchip/llvm-project
Add MSan interceptor for fstat(2)
Summary: Add new MSan interceptor that corrects NetBSD's specific handling of fstat(2). NetBSD renames the call to __fstat50. Add new test: test/msan/fstat.cc Sponsored by <The NetBSD Foundation> Reviewers: joerg, eugenis, vitalybuka Reviewed By: vitalybuka Subscribers: llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D41637 llvm-svn: 321765
This commit is contained in:
parent
cf524a408a
commit
31abb45803
|
@ -35,6 +35,7 @@
|
|||
#include "sanitizer_common/sanitizer_tls_get_addr.h"
|
||||
|
||||
#if SANITIZER_NETBSD
|
||||
#define fstat __fstat50
|
||||
#define gettimeofday __gettimeofday50
|
||||
#define getrusage __getrusage50
|
||||
#endif
|
||||
|
@ -688,6 +689,19 @@ INTERCEPTOR(int, putenv, char *string) {
|
|||
return res;
|
||||
}
|
||||
|
||||
#if SANITIZER_NETBSD
|
||||
INTERCEPTOR(int, fstat, int fd, void *buf) {
|
||||
ENSURE_MSAN_INITED();
|
||||
int res = REAL(fstat)(fd, buf);
|
||||
if (!res)
|
||||
__msan_unpoison(buf, __sanitizer::struct_stat_sz);
|
||||
return res;
|
||||
}
|
||||
#define MSAN_MAYBE_INTERCEPT_FSTAT INTERCEPT_FUNCTION(fstat)
|
||||
#else
|
||||
#define MSAN_MAYBE_INTERCEPT_FSTAT
|
||||
#endif
|
||||
|
||||
#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD
|
||||
INTERCEPTOR(int, __fxstat, int magic, int fd, void *buf) {
|
||||
ENSURE_MSAN_INITED();
|
||||
|
@ -1633,6 +1647,7 @@ void InitializeInterceptors() {
|
|||
INTERCEPT_FUNCTION(putenv);
|
||||
INTERCEPT_FUNCTION(gettimeofday);
|
||||
MSAN_MAYBE_INTERCEPT_FCVT;
|
||||
MSAN_MAYBE_INTERCEPT_FSTAT;
|
||||
MSAN_MAYBE_INTERCEPT___FXSTAT;
|
||||
MSAN_INTERCEPT_FSTATAT;
|
||||
MSAN_MAYBE_INTERCEPT___FXSTAT64;
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
// RUN: %clangxx_msan -O0 %s -o %t && %run %t
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(void) {
|
||||
struct stat st;
|
||||
if (fstat(0, &st))
|
||||
exit(1);
|
||||
|
||||
if (S_ISBLK(st.st_mode))
|
||||
exit(0);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue