[PATCH] [Sanitizers] Intercept opendir()
Viktor Kutuzov
vkutuzov at accesssoftek.com
Fri Jan 16 06:36:40 PST 2015
- The opendir() interceptor moved to Msan so it doesn't interfere with the Tsan's one;
- The comment fixed to mention internal structures that cause false positives;
- A test added.
http://reviews.llvm.org/D6968
Files:
lib/msan/msan_interceptors.cc
lib/msan/tests/msan_test.cc
Index: lib/msan/msan_interceptors.cc
===================================================================
--- lib/msan/msan_interceptors.cc
+++ lib/msan/msan_interceptors.cc
@@ -1084,6 +1084,21 @@
return res;
}
+#if SANITIZER_FREEBSD
+// On FreeBSD opendir() relies on strlen() to inspect internal structures
+// so we have to intercept it.
+INTERCEPTOR(__sanitizer_dirent *, opendir, const char *filename) {
+ ENSURE_MSAN_INITED();
+ SIZE_T len = REAL(strlen)(filename);
+ CHECK_UNPOISONED(filename, len + 1);
+ InterceptorScope interceptor_scope;
+ return REAL(opendir)(filename);
+}
+#define MSAN_MAYBE_INTERCEPT_OPENDIR INTERCEPT_FUNCTION(opendir)
+#else
+#define MSAN_MAYBE_INTERCEPT_OPENDIR
+#endif
+
class SignalHandlerScope {
public:
SignalHandlerScope() {
@@ -1667,6 +1682,7 @@
INTERCEPT_FUNCTION(__cxa_atexit);
INTERCEPT_FUNCTION(shmat);
INTERCEPT_FUNCTION(fork);
+ MSAN_MAYBE_INTERCEPT_OPENDIR;
inited = 1;
}
Index: lib/msan/tests/msan_test.cc
===================================================================
--- lib/msan/tests/msan_test.cc
+++ lib/msan/tests/msan_test.cc
@@ -1225,6 +1225,16 @@
ASSERT_EQ(res, strlen(buf2) + 1);
}
+TEST(MemorySanitizer, opendir) {
+ DIR *dir = opendir(".");
+ closedir(dir);
+
+ char name[10] = ".";
+ __msan_poison(name, sizeof(name));
+ EXPECT_UMR(dir = opendir(name));
+ closedir(dir);
+}
+
TEST(MemorySanitizer, readdir) {
DIR *dir = opendir(".");
struct dirent *d = readdir(dir);
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D6968.18300.patch
Type: text/x-patch
Size: 1485 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150116/32f66f19/attachment.bin>
More information about the llvm-commits
mailing list