aboutsummaryrefslogtreecommitdiff
path: root/src/afl-forkserver.c
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-03 09:39:12 +0200
committerAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-03 09:39:12 +0200
commit8610b0e40677846ba65de55fcaedd2ebee66a511 (patch)
treef5b6409fe840ac69417e348795b69cbeb0a072fc /src/afl-forkserver.c
parentffb4767fc1adf2383173e5655d4f1fcf7e0982b6 (diff)
parent97cae2df9975589eb05a543f92c6ba232242fd7b (diff)
downloadafl++-8610b0e40677846ba65de55fcaedd2ebee66a511.tar.gz
Merge branch 'dev' of github.com:vanhauser-thc/AFLplusplus into dev
Diffstat (limited to 'src/afl-forkserver.c')
-rw-r--r--src/afl-forkserver.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c
index 2dd7a9f0..11b359da 100644
--- a/src/afl-forkserver.c
+++ b/src/afl-forkserver.c
@@ -49,8 +49,6 @@
/* Describe integer as memory size. */
-extern u8 *doc_path;
-
list_t fsrv_list = {.element_prealloc_count = 0};
/* Initializes the struct */
@@ -164,10 +162,9 @@ static void afl_fauxsrv_execv(afl_forkserver_t *fsrv, char **argv) {
void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv) {
- struct timeval timeout;
- int st_pipe[2], ctl_pipe[2];
- int status;
- s32 rlen;
+ int st_pipe[2], ctl_pipe[2];
+ int status;
+ s32 rlen;
if (fsrv->use_fauxsrv) ACTF("Using Fauxserver:");
@@ -318,26 +315,19 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv) {
rlen = 0;
if (fsrv->exec_tmout) {
- fd_set readfds;
-
- FD_ZERO(&readfds);
- FD_SET(fsrv->fsrv_st_fd, &readfds);
- timeout.tv_sec = ((fsrv->exec_tmout * FORK_WAIT_MULT) / 1000);
- timeout.tv_usec = ((fsrv->exec_tmout * FORK_WAIT_MULT) % 1000) * 1000;
+ rlen = 4;
+ u32 time = read_timed(fsrv->fsrv_st_fd, &status, rlen,
+ fsrv->exec_tmout * FORK_WAIT_MULT);
- int sret = select(fsrv->fsrv_st_fd + 1, &readfds, NULL, NULL, &timeout);
-
- if (sret == 0) {
+ if (time > fsrv->exec_tmout * FORK_WAIT_MULT) {
fsrv->child_timed_out = 1;
- kill(fsrv->child_pid, SIGKILL);
-
- } else {
-
- rlen = read(fsrv->fsrv_st_fd, &status, 4);
+ kill(fsrv->fsrv_pid, SIGKILL);
}
+ if (!time) { kill(fsrv->fsrv_pid, SIGKILL); }
+
} else {
rlen = read(fsrv->fsrv_st_fd, &status, 4);