[compiler-rt] r195246 - [msan] Tweak io_submit syscall hook.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Wed Nov 20 05:04:24 PST 2013
Author: eugenis
Date: Wed Nov 20 07:04:23 2013
New Revision: 195246
URL: http://llvm.org/viewvc/llvm-project?rev=195246&view=rev
Log:
[msan] Tweak io_submit syscall hook.
Modified:
compiler-rt/trunk/lib/msan/lit_tests/Linux/syscalls.cc
compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
Modified: compiler-rt/trunk/lib/msan/lit_tests/Linux/syscalls.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/lit_tests/Linux/syscalls.cc?rev=195246&r1=195245&r2=195246&view=diff
==============================================================================
--- compiler-rt/trunk/lib/msan/lit_tests/Linux/syscalls.cc (original)
+++ compiler-rt/trunk/lib/msan/lit_tests/Linux/syscalls.cc Wed Nov 20 07:04:23 2013
@@ -95,6 +95,13 @@ int main(int argc, char *argv[]) {
iocb[1].aio_nbytes = kFortyTwo;
__sanitizer_syscall_post_io_submit(1, 0, 2, &iocbp);
assert(__msan_test_shadow(buf, sizeof(buf)) == kFortyTwo);
-
+
+ __msan_poison(buf, sizeof(buf));
+ char *p = buf;
+ __msan_poison(&p, sizeof(p));
+ __sanitizer_syscall_post_io_setup(0, 1, &p);
+ assert(__msan_test_shadow(&p, sizeof(p)) == -1);
+ assert(__msan_test_shadow(buf, sizeof(buf)) >= 32);
+
return 0;
}
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=195246&r1=195245&r2=195246&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc Wed Nov 20 07:04:23 2013
@@ -1245,11 +1245,17 @@ PRE_SYSCALL(flock)(long fd, long cmd) {}
POST_SYSCALL(flock)(long res, long fd, long cmd) {}
-PRE_SYSCALL(io_setup)(long nr_reqs, void *ctx) {}
+PRE_SYSCALL(io_setup)(long nr_reqs, void **ctx) {
+ if (ctx) PRE_WRITE(ctx, sizeof(*ctx));
+}
-POST_SYSCALL(io_setup)(long res, long nr_reqs, void *ctx) {
+POST_SYSCALL(io_setup)(long res, long nr_reqs, void **ctx) {
if (res >= 0) {
- if (ctx) POST_WRITE(ctx, sizeof(long));
+ if (ctx) POST_WRITE(ctx, sizeof(*ctx));
+ // (*ctx) is actually a pointer to a kernel mapped page, and there are
+ // people out there who are crazy enough to peek into that page's 32-byte
+ // header.
+ if (*ctx) POST_WRITE(*ctx, 32);
}
}
More information about the llvm-commits
mailing list