[PATCH] D48660: [UBSan] Add silence_unsigned_overflow flag.

Matt Morehouse via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 27 11:27:19 PDT 2018


morehouse updated this revision to Diff 153139.
morehouse added a comment.

- Remove unnecesary printf in test.
- Update documentation.


https://reviews.llvm.org/D48660

Files:
  clang/docs/UndefinedBehaviorSanitizer.rst
  compiler-rt/lib/ubsan/ubsan_flags.inc
  compiler-rt/lib/ubsan/ubsan_handlers.cc
  compiler-rt/test/ubsan/TestCases/Integer/no-recover.cpp


Index: compiler-rt/test/ubsan/TestCases/Integer/no-recover.cpp
===================================================================
--- compiler-rt/test/ubsan/TestCases/Integer/no-recover.cpp
+++ compiler-rt/test/ubsan/TestCases/Integer/no-recover.cpp
@@ -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 @@
 
   (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
 }
Index: compiler-rt/lib/ubsan/ubsan_handlers.cc
===================================================================
--- compiler-rt/lib/ubsan/ubsan_handlers.cc
+++ compiler-rt/lib/ubsan/ubsan_handlers.cc
@@ -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 @@
   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: "
Index: compiler-rt/lib/ubsan/ubsan_flags.inc
===================================================================
--- compiler-rt/lib/ubsan/ubsan_flags.inc
+++ compiler-rt/lib/ubsan/ubsan_flags.inc
@@ -24,3 +24,6 @@
 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.")
Index: clang/docs/UndefinedBehaviorSanitizer.rst
===================================================================
--- clang/docs/UndefinedBehaviorSanitizer.rst
+++ clang/docs/UndefinedBehaviorSanitizer.rst
@@ -180,6 +180,13 @@
    ``UBSAN_OPTIONS=print_stacktrace=1``.
 #. Make sure ``llvm-symbolizer`` binary is in ``PATH``.
 
+Silencing Unsigned Integer Overflow
+===================================
+To silence reports from unsigned integer overflow, you can set
+``UBSAN_OPTIONS=silence_unsigned_overflow=1``.  This feature, combined with
+``-fsanitize-recover=unsigned-integer-overflow``, is particularly useful for
+providing fuzzing signal without blowing up logs.
+
 Issue Suppression
 =================
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48660.153139.patch
Type: text/x-patch
Size: 3115 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180627/58ce0f9b/attachment.bin>


More information about the llvm-commits mailing list