diff options
author | vanhauser-thc <vh@thc.org> | 2024-02-03 18:27:01 +0100 |
---|---|---|
committer | vanhauser-thc <vh@thc.org> | 2024-02-03 18:27:01 +0100 |
commit | 27338fcef121c7700a1e2e99cb31cb7106159293 (patch) | |
tree | 509eaae401df69ba8e71c14aa28c8ba242a6481c /src | |
parent | 9fab7e892d4e2ba09305aac40392a4df598464c9 (diff) | |
download | afl++-27338fcef121c7700a1e2e99cb31cb7106159293.tar.gz |
new forkserver - client side
Diffstat (limited to 'src')
-rw-r--r-- | src/afl-forkserver.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c index 1f796e53..a3a869d7 100644 --- a/src/afl-forkserver.c +++ b/src/afl-forkserver.c @@ -1030,6 +1030,12 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, * send any data anymore - except a future option requires this. */ + if ((status & FS_NEW_ERROR) == FS_NEW_ERROR) { + + report_error_and_exit(status & 0x0000ffff); + + } + if (status >= 0x41464c00 && status <= 0x41464cff) { u32 version = status - 0x41464c00; @@ -1047,6 +1053,7 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, } + u32 keep = status; status ^= 0xffffffff; if (write(fsrv->fsrv_ctl_fd, &status, 4) != 4) { @@ -1064,7 +1071,7 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, if (getenv("AFL_DEBUG")) { - ACTF("Forkserver options received: (%08x)", status); + ACTF("Forkserver options received: (0x%08x)", status); } @@ -1178,7 +1185,11 @@ void afl_fsrv_start(afl_forkserver_t *fsrv, char **argv, u32 status2; rlen = read(fsrv->fsrv_st_fd, &status2, 4); - if (status2 != status) { FATAL("Error in forkserver communication"); } + if (status2 != keep) { + + FATAL("Error in forkserver communication (%08x=>%08x)", keep, status2); + + } } else { |