aboutsummaryrefslogtreecommitdiff
path: root/src/afl-forkserver.c
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2024-02-03 18:27:01 +0100
committervanhauser-thc <vh@thc.org>2024-02-03 18:27:01 +0100
commit27338fcef121c7700a1e2e99cb31cb7106159293 (patch)
tree509eaae401df69ba8e71c14aa28c8ba242a6481c /src/afl-forkserver.c
parent9fab7e892d4e2ba09305aac40392a4df598464c9 (diff)
downloadafl++-27338fcef121c7700a1e2e99cb31cb7106159293.tar.gz
new forkserver - client side
Diffstat (limited to 'src/afl-forkserver.c')
-rw-r--r--src/afl-forkserver.c15
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 {