summaryrefslogtreecommitdiff
path: root/libsanitizer
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-02-05 12:01:50 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-02-05 11:01:50 +0000
commit4c4f3c3fefc61ca5045a6c1d7592786e2cf57499 (patch)
tree47f182084e3c2b708b3cf75ae1acf6cb4705feaf /libsanitizer
parentba26157992975c2cdad2020571cdabf77a5b7c41 (diff)
Cherry-pick libsanitizer pointer-pair tristate option.
2018-02-05 Martin Liska <mliska@suse.cz> * doc/invoke.texi: Cherry-pick upstream r323995. 2018-02-05 Martin Liska <mliska@suse.cz> * c-c++-common/asan/pointer-compare-1.c: Adjust ASAN_OPTIONS options. * c-c++-common/asan/pointer-compare-2.c: Likewise. * c-c++-common/asan/pointer-subtract-1.c: Likewise. * c-c++-common/asan/pointer-subtract-2.c: Likewise. * c-c++-common/asan/pointer-subtract-3.c: Likewise. * c-c++-common/asan/pointer-subtract-4.c: Likewise. * c-c++-common/asan/pointer-compare-3.c: New test. 2018-02-05 Martin Liska <mliska@suse.cz> * asan/asan_flags.inc: Cherry-pick upstream r323995. * asan/asan_report.cc (CheckForInvalidPointerPair): Cherry-pick upstream r323995. From-SVN: r257387
Diffstat (limited to 'libsanitizer')
-rw-r--r--libsanitizer/ChangeLog6
-rw-r--r--libsanitizer/asan/asan_flags.inc6
-rw-r--r--libsanitizer/asan/asan_report.cc6
3 files changed, 14 insertions, 4 deletions
diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog
index 0f2192aed4d..5c95e45a8f2 100644
--- a/libsanitizer/ChangeLog
+++ b/libsanitizer/ChangeLog
@@ -1,3 +1,9 @@
+2018-02-05 Martin Liska <mliska@suse.cz>
+
+ * asan/asan_flags.inc: Cherry-pick upstream r323995.
+ * asan/asan_report.cc (CheckForInvalidPointerPair):
+ Cherry-pick upstream r323995.
+
2018-01-17 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR sanitizer/82825
diff --git a/libsanitizer/asan/asan_flags.inc b/libsanitizer/asan/asan_flags.inc
index 3784f065be6..b4253e02524 100644
--- a/libsanitizer/asan/asan_flags.inc
+++ b/libsanitizer/asan/asan_flags.inc
@@ -134,9 +134,9 @@ ASAN_FLAG(
"Android. ")
ASAN_FLAG(
int, detect_invalid_pointer_pairs, 0,
- "If non-zero, try to detect operations like <, <=, >, >= and - on "
- "invalid pointer pairs (e.g. when pointers belong to different objects). "
- "The bigger the value the harder we try.")
+ "If >= 2, detect operations like <, <=, >, >= and - on invalid pointer "
+ "pairs (e.g. when pointers belong to different objects); "
+ "If == 1, detect invalid operations only when both pointers are non-null.")
ASAN_FLAG(
bool, detect_container_overflow, true,
"If true, honor the container overflow annotations. See "
diff --git a/libsanitizer/asan/asan_report.cc b/libsanitizer/asan/asan_report.cc
index 261ec1aece5..434aa734c8f 100644
--- a/libsanitizer/asan/asan_report.cc
+++ b/libsanitizer/asan/asan_report.cc
@@ -340,7 +340,11 @@ static bool IsInvalidPointerPair(uptr a1, uptr a2) {
}
static INLINE void CheckForInvalidPointerPair(void *p1, void *p2) {
- if (!flags()->detect_invalid_pointer_pairs) return;
+ switch (flags()->detect_invalid_pointer_pairs) {
+ case 0 : return;
+ case 1 : if (p1 == nullptr || p2 == nullptr) return; break;
+ }
+
uptr a1 = reinterpret_cast<uptr>(p1);
uptr a2 = reinterpret_cast<uptr>(p2);