ooops, I forgot to merge thsi part :(
@@ -130,6 +130,48 @@ static void __afl_map_shm(void) {
}
+ id_str = getenv(CMPLOG_SHM_ENV_VAR);
+
+ if (id_str) {
+
+#ifdef USEMMAP
+ const char* shm_file_path = id_str;
+ int shm_fd = -1;
+ unsigned char* shm_base = NULL;
+
+ /* create the shared memory segment as if it was a file */
+ shm_fd = shm_open(shm_file_path, O_RDWR, 0600);
+ if (shm_fd == -1) {
+
+ printf("shm_open() failed\n");
+ exit(1);
+
+ }
+
+ /* map the shared memory segment to the address space of the process */
+ shm_base = mmap(0, sizeof(struct cmp_map), PROT_READ | PROT_WRITE,
+ MAP_SHARED, shm_fd, 0);
+ if (shm_base == MAP_FAILED) {
+
+ close(shm_fd);
+ shm_fd = -1;
+
+ printf("mmap() failed\n");
+ exit(2);
+
+ }
+
+ __afl_cmp_map = shm_base;
+#else
+ u32 shm_id = atoi(id_str);
+
+ __afl_cmp_map = shmat(shm_id, NULL, 0);
+#endif
+
+ if (__afl_cmp_map == (void*)-1) _exit(1);
+
+ }
+
}
/* Fork server logic. */
