aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2024-05-29 12:55:28 +0200
committervanhauser-thc <vh@thc.org>2024-05-29 12:55:28 +0200
commita3125c38f496979be314c93f10adfad9dd4d363e (patch)
tree131c16131e30319bb0d2e323c5c5c95cb8c2d638 /src
parent224add0222b2004fc175e24d4e2fbd98ed6fd9e4 (diff)
downloadafl++-a3125c38f496979be314c93f10adfad9dd4d363e.tar.gz
fix afl-showmap shmmemleak
Diffstat (limited to 'src')
-rw-r--r--src/afl-showmap.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/afl-showmap.c b/src/afl-showmap.c
index 7e875040..68e5e0e0 100644
--- a/src/afl-showmap.c
+++ b/src/afl-showmap.c
@@ -225,8 +225,13 @@ static void at_exit_handler(void) {
if (remove_shm) {
+ remove_shm = false;
if (shm.map) afl_shm_deinit(&shm);
- if (fsrv->use_shmem_fuzz) deinit_shmem(fsrv, shm_fuzz);
+ if ((shm_fuzz && shm_fuzz->shmemfuzz_mode) || fsrv->use_shmem_fuzz) {
+
+ deinit_shmem(fsrv, shm_fuzz);
+
+ }
}
@@ -1527,6 +1532,8 @@ int main(int argc, char **argv_orig, char **envp) {
/* initialize cmplog_mode */
shm_fuzz->cmplog_mode = 0;
+ atexit(at_exit_handler);
+
u8 *map = afl_shm_init(shm_fuzz, MAX_FILE + sizeof(u32), 1);
shm_fuzz->shmemfuzz_mode = true;
if (!map) { FATAL("BUG: Zero return from afl_shm_init."); }
@@ -1676,8 +1683,6 @@ int main(int argc, char **argv_orig, char **envp) {
}
- atexit(at_exit_handler);
-
if (get_afl_env("AFL_DEBUG")) {
int j = optind;
@@ -1694,8 +1699,12 @@ int main(int argc, char **argv_orig, char **envp) {
map_size = fsrv->map_size;
- if (fsrv->support_shmem_fuzz && !fsrv->use_shmem_fuzz)
+ if (fsrv->support_shmem_fuzz && !fsrv->use_shmem_fuzz) {
+
shm_fuzz = deinit_shmem(fsrv, shm_fuzz);
+ shm_fuzz->shmemfuzz_mode = 0;
+
+ }
if (in_dir) {
@@ -1728,8 +1737,12 @@ int main(int argc, char **argv_orig, char **envp) {
} else {
- if (fsrv->support_shmem_fuzz && !fsrv->use_shmem_fuzz)
+ if (fsrv->support_shmem_fuzz && !fsrv->use_shmem_fuzz) {
+
shm_fuzz = deinit_shmem(fsrv, shm_fuzz);
+ shm_fuzz->shmemfuzz_mode = 0;
+
+ }
#ifdef __linux__
if (!fsrv->nyx_mode) {
@@ -1777,9 +1790,14 @@ int main(int argc, char **argv_orig, char **envp) {
}
- remove_shm = 0;
+ remove_shm = false;
afl_shm_deinit(&shm);
- if (fsrv->use_shmem_fuzz) shm_fuzz = deinit_shmem(fsrv, shm_fuzz);
+ if (fsrv->use_shmem_fuzz) {
+
+ shm_fuzz = deinit_shmem(fsrv, shm_fuzz);
+ shm_fuzz->shmemfuzz_mode = 0;
+
+ }
u32 ret;