diff options
author | van Hauser <vh@thc.org> | 2021-11-03 21:55:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-03 21:55:21 +0100 |
commit | f5535e348d37460daa4c6ea43063b451aa83d9cc (patch) | |
tree | 2339a99aa53f604cbe77b0dc88882f29ec9a6bf6 /src/afl-forkserver.c | |
parent | 25c947cd5ae93cb865081f9259255b4fdb3ca3ba (diff) | |
parent | 9278f27d749bcf0852ba2629caa319375c9a60e4 (diff) | |
download | afl++-f5535e348d37460daa4c6ea43063b451aa83d9cc.tar.gz |
Merge pull request #1142 from AFLplusplus/dev
Dev
Diffstat (limited to 'src/afl-forkserver.c')
-rw-r--r-- | src/afl-forkserver.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c index da036d2f..93fd19e1 100644 --- a/src/afl-forkserver.c +++ b/src/afl-forkserver.c @@ -608,19 +608,31 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, /* Wait for the fork server to come up, but don't wait too long. */ rlen = 0; - if (fsrv->exec_tmout) { + if (fsrv->init_tmout) { u32 time_ms = read_s32_timed(fsrv->fsrv_st_fd, &status, fsrv->init_tmout, stop_soon_p); if (!time_ms) { - if (fsrv->fsrv_pid > 0) { kill(fsrv->fsrv_pid, fsrv->kill_signal); } + s32 tmp_pid = fsrv->fsrv_pid; + if (tmp_pid > 0) { + + kill(tmp_pid, fsrv->kill_signal); + fsrv->fsrv_pid = -1; + + } } else if (time_ms > fsrv->init_tmout) { fsrv->last_run_timed_out = 1; - if (fsrv->fsrv_pid > 0) { kill(fsrv->fsrv_pid, fsrv->kill_signal); } + s32 tmp_pid = fsrv->fsrv_pid; + if (tmp_pid > 0) { + + kill(tmp_pid, fsrv->kill_signal); + fsrv->fsrv_pid = -1; + + } } else { @@ -1259,7 +1271,14 @@ fsrv_run_result_t afl_fsrv_run_target(afl_forkserver_t *fsrv, u32 timeout, /* If there was no response from forkserver after timeout seconds, we kill the child. The forkserver should inform us afterwards */ - if (fsrv->child_pid > 0) { kill(fsrv->child_pid, fsrv->kill_signal); } + s32 tmp_pid = fsrv->child_pid; + if (tmp_pid > 0) { + + kill(tmp_pid, fsrv->kill_signal); + fsrv->child_pid = -1; + + } + fsrv->last_run_timed_out = 1; if (read(fsrv->fsrv_st_fd, &fsrv->child_status, 4) < 4) { exec_ms = 0; } @@ -1293,7 +1312,7 @@ fsrv_run_result_t afl_fsrv_run_target(afl_forkserver_t *fsrv, u32 timeout, } - if (!WIFSTOPPED(fsrv->child_status)) { fsrv->child_pid = 0; } + if (!WIFSTOPPED(fsrv->child_status)) { fsrv->child_pid = -1; } fsrv->total_execs++; |