diff options
-rw-r--r-- | llvm_mode/afl-llvm-lto-instrim.so.cc | 18 | ||||
-rw-r--r-- | src/afl-sharedmem.c | 20 |
2 files changed, 27 insertions, 11 deletions
diff --git a/llvm_mode/afl-llvm-lto-instrim.so.cc b/llvm_mode/afl-llvm-lto-instrim.so.cc index 5f9731c2..4b89c9d0 100644 --- a/llvm_mode/afl-llvm-lto-instrim.so.cc +++ b/llvm_mode/afl-llvm-lto-instrim.so.cc @@ -110,8 +110,9 @@ struct InsTrimLTO : public ModulePass { bool runOnModule(Module &M) override { - char be_quiet = 0; - char *ptr; + char be_quiet = 0; + char * ptr; + uint32_t locations = 0, functions = 0; setvbuf(stdout, NULL, _IONBF, 0); @@ -563,6 +564,8 @@ struct InsTrimLTO : public ModulePass { if (F.size() < function_minimum_size) continue; if (isBlacklisted(&F)) continue; + functions++; + // whitelist check AttributeList Attrs = F.getAttributes(); if (Attrs.hasAttribute(-1, StringRef("skipinstrument"))) { @@ -659,6 +662,7 @@ struct InsTrimLTO : public ModulePass { if (PI == PE) { L = ConstantInt::get(Int32Ty, afl_global_id++); + locations++; } else { @@ -670,6 +674,7 @@ struct InsTrimLTO : public ModulePass { auto It = PredMap.insert({PBB, afl_global_id++}); unsigned Label = It.first->second; PN->addIncoming(ConstantInt::get(Int32Ty, Label), PBB); + locations++; } @@ -887,7 +892,7 @@ struct InsTrimLTO : public ModulePass { for (BasicBlock *Succ : successors(Pred)) if (Succ != NULL) count++; - if (count > 1) return true; + if (count > 1) would_instrument = true; } @@ -912,11 +917,12 @@ struct InsTrimLTO : public ModulePass { getenv("AFL_USE_MSAN") ? ", MSAN" : "", getenv("AFL_USE_CFISAN") ? ", CFISAN" : "", getenv("AFL_USE_UBSAN") ? ", UBSAN" : ""); - OKF("Instrumented %u locations (%llu, %llu) with no collisions (on " + OKF("Instrumented %u locations for %u edges in %u functions (%llu, " + "%llu) with no collisions (on " "average %llu collisions would be in afl-gcc/afl-clang-fast for %u " "edges) (%s mode).", - inst_blocks, total_rs, total_hs, calculateCollisions(edges), edges, - modeline); + inst_blocks, locations, functions, total_rs, total_hs, + calculateCollisions(edges), edges, modeline); } diff --git a/src/afl-sharedmem.c b/src/afl-sharedmem.c index 77767f21..6eb63949 100644 --- a/src/afl-sharedmem.c +++ b/src/afl-sharedmem.c @@ -240,8 +240,10 @@ u8 *afl_shm_init(sharedmem_t *shm, size_t map_size, IPC_CREAT | IPC_EXCL | 0600); if (shm->cmplog_shm_id < 0) { - shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem + + shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem PFATAL("shmget() failed"); + } } @@ -270,11 +272,16 @@ u8 *afl_shm_init(sharedmem_t *shm, size_t map_size, shm->map = shmat(shm->shm_id, NULL, 0); if (shm->map == (void *)-1 || !shm->map) { - shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem + + shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem if (shm->cmplog_mode) { - shmctl(shm->cmplog_shm_id, IPC_RMID, NULL); // do not leak shmem + + shmctl(shm->cmplog_shm_id, IPC_RMID, NULL); // do not leak shmem + } + PFATAL("shmat() failed"); + } if (shm->cmplog_mode) { @@ -283,10 +290,13 @@ u8 *afl_shm_init(sharedmem_t *shm, size_t map_size, if (shm->cmp_map == (void *)-1 || !shm->cmp_map) { - shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem + shmctl(shm->shm_id, IPC_RMID, NULL); // do not leak shmem if (shm->cmplog_mode) { - shmctl(shm->cmplog_shm_id, IPC_RMID, NULL); // do not leak shmem + + shmctl(shm->cmplog_shm_id, IPC_RMID, NULL); // do not leak shmem + } + PFATAL("shmat() failed"); } |