[compiler-rt] r321765 - Add MSan interceptor for fstat(2)

Kamil Rytarowski via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 3 14:28:39 PST 2018


Author: kamil
Date: Wed Jan  3 14:28:39 2018
New Revision: 321765

URL: http://llvm.org/viewvc/llvm-project?rev=321765&view=rev
Log:
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

Added:
    compiler-rt/trunk/test/msan/fstat.cc
Modified:
    compiler-rt/trunk/lib/msan/msan_interceptors.cc

Modified: compiler-rt/trunk/lib/msan/msan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interceptors.cc?rev=321765&r1=321764&r2=321765&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/msan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/msan/msan_interceptors.cc Wed Jan  3 14:28:39 2018
@@ -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;

Added: compiler-rt/trunk/test/msan/fstat.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/fstat.cc?rev=321765&view=auto
==============================================================================
--- compiler-rt/trunk/test/msan/fstat.cc (added)
+++ compiler-rt/trunk/test/msan/fstat.cc Wed Jan  3 14:28:39 2018
@@ -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;
+}




More information about the llvm-commits mailing list