aboutsummaryrefslogtreecommitdiffstats
path: root/executor/executor_linux.cc
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-05-14 11:17:58 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-05-14 11:17:58 +0200
commitfaf3e3d2299100f0fccf2f6187d58e398cab06be (patch)
treedbf468be98cbcc72b4b88104c572fe8e821a8146 /executor/executor_linux.cc
parentd5dc4006db71f4d27934000be3a499d9e56ff7fe (diff)
executor: filter out invalid PCs on linux/x86_64
Fuzzer manages to corrupt output region and write random coverage again and again. Do a sanity range check on coverage PCs to filter out invalid ones.
Diffstat (limited to 'executor/executor_linux.cc')
-rw-r--r--executor/executor_linux.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/executor/executor_linux.cc b/executor/executor_linux.cc
index d9e84a66a..4b88946dd 100644
--- a/executor/executor_linux.cc
+++ b/executor/executor_linux.cc
@@ -188,6 +188,21 @@ uint32 read_cover_size(thread_t* th)
return n;
}
+bool cover_check(uint32 pc)
+{
+ return true;
+}
+
+bool cover_check(uint64 pc)
+{
+#if defined(__i386__) || defined(__x86_64__)
+ // Text/modules range for x86_64.
+ return pc >= 0xffffffff80000000ull && pc < 0xffffffffff000000ull;
+#else
+ return true;
+#endif
+}
+
uint32* write_output(uint32 v)
{
if (collide)