diff options
author | Andrea Fioraldi <andreafioraldi@gmail.com> | 2020-04-13 11:43:34 +0200 |
---|---|---|
committer | Andrea Fioraldi <andreafioraldi@gmail.com> | 2020-04-13 11:43:34 +0200 |
commit | 5daec436f93240a0c411d432456f3f86fe1f3181 (patch) | |
tree | 0a4d3762b584c48bcc2f368b69108a3b98258115 | |
parent | 033c743a417b208ee48218d59d8665823434ea67 (diff) | |
download | afl++-5daec436f93240a0c411d432456f3f86fe1f3181.tar.gz |
fix bug forksever fail not detected when using read_timed
-rw-r--r-- | src/afl-forkserver.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c index 9c964bf3..28f664fa 100644 --- a/src/afl-forkserver.c +++ b/src/afl-forkserver.c @@ -352,19 +352,24 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, rlen = 0; if (fsrv->exec_tmout) { - rlen = 4; - u32 time = read_timed(fsrv->fsrv_st_fd, &status, rlen, + u32 time = read_timed(fsrv->fsrv_st_fd, &status, 4, fsrv->exec_tmout * FORK_WAIT_MULT, stop_soon_p); - if (time > fsrv->exec_tmout * FORK_WAIT_MULT) { + if (!time) { + + kill(fsrv->fsrv_pid, SIGKILL); + + } else if (time > fsrv->exec_tmout * FORK_WAIT_MULT) { fsrv->child_timed_out = 1; kill(fsrv->fsrv_pid, SIGKILL); + } else { + + rlen = 4; + } - if (!time) { kill(fsrv->fsrv_pid, SIGKILL); } - } else { rlen = read(fsrv->fsrv_st_fd, &status, 4); |