about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-13 11:43:34 +0200
committerAndrea Fioraldi <andreafioraldi@gmail.com>2020-04-13 11:43:34 +0200
commit5daec436f93240a0c411d432456f3f86fe1f3181 (patch)
tree0a4d3762b584c48bcc2f368b69108a3b98258115
parent033c743a417b208ee48218d59d8665823434ea67 (diff)
downloadafl++-5daec436f93240a0c411d432456f3f86fe1f3181.tar.gz
fix bug forksever fail not detected when using read_timed
-rw-r--r--src/afl-forkserver.c15
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);