[compiler-rt] r335762 - [UBSan] Add silence_unsigned_overflow flag.
Matt Morehouse via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 27 11:24:46 PDT 2018
Author: morehouse
Date: Wed Jun 27 11:24:46 2018
New Revision: 335762
URL: http://llvm.org/viewvc/llvm-project?rev=335762&view=rev
Log:
[UBSan] Add silence_unsigned_overflow flag.
Summary:
Setting UBSAN_OPTIONS=silence_unsigned_overflow=1 will silence all UIO
reports. This feature, combined with
-fsanitize-recover=unsigned-integer-overflow, is useful for providing
fuzzing signal without the excessive log output.
Helps with https://github.com/google/oss-fuzz/issues/910.
Reviewers: kcc, vsk
Reviewed By: vsk
Subscribers: vsk, kubamracek, Dor1s, llvm-commits
Differential Revision: https://reviews.llvm.org/D48660
Modified:
compiler-rt/trunk/lib/ubsan/ubsan_flags.inc
compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp
Modified: compiler-rt/trunk/lib/ubsan/ubsan_flags.inc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_flags.inc?rev=335762&r1=335761&r2=335762&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/ubsan_flags.inc (original)
+++ compiler-rt/trunk/lib/ubsan/ubsan_flags.inc Wed Jun 27 11:24:46 2018
@@ -24,3 +24,6 @@ UBSAN_FLAG(bool, print_stacktrace, false
UBSAN_FLAG(const char *, suppressions, "", "Suppressions file name.")
UBSAN_FLAG(bool, report_error_type, false,
"Print specific error type instead of 'undefined-behavior' in summary.")
+UBSAN_FLAG(bool, silence_unsigned_overflow, false,
+ "Do not print error reports for unsigned integer overflow. "
+ "Used to provide fuzzing signal without blowing up logs.")
Modified: compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc?rev=335762&r1=335761&r2=335762&view=diff
==============================================================================
--- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc (original)
+++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc Wed Jun 27 11:24:46 2018
@@ -15,6 +15,7 @@
#if CAN_SANITIZE_UB
#include "ubsan_handlers.h"
#include "ubsan_diag.h"
+#include "ubsan_flags.h"
#include "ubsan_monitor.h"
#include "sanitizer_common/sanitizer_common.h"
@@ -118,6 +119,9 @@ static void handleIntegerOverflowImpl(Ov
if (ignoreReport(Loc, Opts, ET))
return;
+ if (!IsSigned && flags()->silence_unsigned_overflow)
+ return;
+
ScopedReport R(Opts, Loc, ET);
Diag(Loc, DL_Error, ET, "%0 integer overflow: "
Modified: compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp?rev=335762&r1=335761&r2=335762&view=diff
==============================================================================
--- compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp (original)
+++ compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp Wed Jun 27 11:24:46 2018
@@ -1,5 +1,6 @@
// RUN: %clangxx -fsanitize=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=all -fsanitize-recover=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER
+// RUN: %env_ubsan_opts=silence_unsigned_overflow=1 %run %t 2>&1 | FileCheck %s --check-prefix=SILENT-RECOVER --allow-empty
// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT
#include <stdint.h>
@@ -18,5 +19,6 @@ int main() {
(void)(uint64_t(10000000000000000000ull) + uint64_t(9000000000000000000ull));
// RECOVER: 10000000000000000000 + 9000000000000000000 cannot be represented in type 'unsigned {{long( long)?}}'
+ // SILENT-RECOVER-NOT: runtime error
// ABORT-NOT: runtime error
}
More information about the llvm-commits
mailing list