aboutsummaryrefslogtreecommitdiffstats
path: root/executor/executor_linux.h
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-08-08 12:48:06 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-08-08 12:48:06 +0200
commit9a791c399266a650acac45ac55a066a84aad7c64 (patch)
tree681c84b68c945f14cc64087bd19c6d04ee2f25cb /executor/executor_linux.h
parentddeb9f8d8828ea4f297656445164e17a9f4c2591 (diff)
executor: remap cover fd's to higher values
Remap cover fd's to 24x range to prevent interference with fd's used during fuzzing and also to make fd number consistent with/without cover enabled.
Diffstat (limited to 'executor/executor_linux.h')
-rw-r--r--executor/executor_linux.h7
1 files changed, 5 insertions, 2 deletions
diff --git a/executor/executor_linux.h b/executor/executor_linux.h
index 1cdb2dc46..2eab98560 100644
--- a/executor/executor_linux.h
+++ b/executor/executor_linux.h
@@ -40,9 +40,12 @@ static long execute_syscall(const call_t* c, long a[kMaxArgs])
static void cover_open(cover_t* cov)
{
- cov->fd = open("/sys/kernel/debug/kcov", O_RDWR);
- if (cov->fd == -1)
+ int fd = open("/sys/kernel/debug/kcov", O_RDWR);
+ if (fd == -1)
fail("open of /sys/kernel/debug/kcov failed");
+ if (dup2(fd, cov->fd) < 0)
+ fail("filed to dup2(%d, %d) cover fd", fd, cov->fd);
+ close(fd);
const int kcov_init_trace = is_kernel_64_bit ? KCOV_INIT_TRACE64 : KCOV_INIT_TRACE32;
if (ioctl(cov->fd, kcov_init_trace, kCoverSize))
fail("cover init trace write failed");