diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-04-23 11:48:31 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-04-23 11:48:31 +0000 |
commit | 7cdae1683c9c2fcd4473a5862c90c64be3a8c5fd (patch) | |
tree | d1f619b5f51c7d353e20b0aa5802c17ef1a8085f | |
parent | 51ecba39a18cc292c5ecb3adcb6571ad141b5402 (diff) | |
download | compiler-rt-7cdae1683c9c2fcd4473a5862c90c64be3a8c5fd.tar.gz |
[msan] Allow clock_getres(, 0).
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@180090 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/msan/tests/msan_test.cc | 12 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_common_interceptors.inc | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/msan/tests/msan_test.cc b/lib/msan/tests/msan_test.cc index 51b4be82e..db7e55a96 100644 --- a/lib/msan/tests/msan_test.cc +++ b/lib/msan/tests/msan_test.cc @@ -880,6 +880,18 @@ TEST(MemorySanitizer, clock_gettime) { EXPECT_NOT_POISONED(tp.tv_nsec); } +TEST(MemorySanitizer, clock_getres) { + struct timespec tp; + EXPECT_POISONED(tp.tv_sec); + EXPECT_POISONED(tp.tv_nsec); + assert(0 == clock_getres(CLOCK_REALTIME, 0)); + EXPECT_POISONED(tp.tv_sec); + EXPECT_POISONED(tp.tv_nsec); + assert(0 == clock_getres(CLOCK_REALTIME, &tp)); + EXPECT_NOT_POISONED(tp.tv_sec); + EXPECT_NOT_POISONED(tp.tv_nsec); +} + TEST(MemorySanitizer, getitimer) { struct itimerval it1, it2; int res; diff --git a/lib/sanitizer_common/sanitizer_common_interceptors.inc b/lib/sanitizer_common/sanitizer_common_interceptors.inc index 43e5a6df3..a42014373 100644 --- a/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -492,7 +492,7 @@ INTERCEPTOR(int, clock_getres, u32 clk_id, void *tp) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, clock_getres, clk_id, tp); int res = REAL(clock_getres)(clk_id, tp); - if (!res) { + if (!res && tp) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, tp, struct_timespec_sz); } return res; |