From f5a01ee20d56e4f9de384b0d16de21b31ca8c0cf Mon Sep 17 00:00:00 2001 From: WorksButNotTested <62701594+WorksButNotTested@users.noreply.github.com> Date: Mon, 17 Feb 2025 16:06:42 +0000 Subject: [PATCH] Asan guest fix (#2986) * Check for initialization of libgasan.so on first_exec --------- Co-authored-by: Your Name --- libafl_qemu/libqasan/libqasan.c | 6 +++++ .../src/modules/usermode/asan_guest.rs | 25 ++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/libafl_qemu/libqasan/libqasan.c b/libafl_qemu/libqasan/libqasan.c index b91dd0f212..6005765f86 100644 --- a/libafl_qemu/libqasan/libqasan.c +++ b/libafl_qemu/libqasan/libqasan.c @@ -84,6 +84,12 @@ static void __libqasan_map_shadow(void *addr, void *limit) { addr, limit + 1, errno); abort(); } + + if (madvise(addr, size, MADV_DONTDUMP) != 0) { + QASAN_LOG("Failed to madvise (MADV_DONTDUMP) shadow: %p-%p, errno: %d", + addr, limit + 1, errno); + abort(); + } } #endif diff --git a/libafl_qemu/src/modules/usermode/asan_guest.rs b/libafl_qemu/src/modules/usermode/asan_guest.rs index f1dfcfa5c5..0d3f0589eb 100644 --- a/libafl_qemu/src/modules/usermode/asan_guest.rs +++ b/libafl_qemu/src/modules/usermode/asan_guest.rs @@ -269,9 +269,21 @@ where self.asan_lib = Some(asan_lib); } - fn post_qemu_init(&mut self, qemu: Qemu, _emulator_modules: &mut EmulatorModules) + fn post_qemu_init(&mut self, _qemu: Qemu, _emulator_modules: &mut EmulatorModules) where ET: EmulatorModuleTuple, + { + } + + fn first_exec( + &mut self, + qemu: Qemu, + emulator_modules: &mut EmulatorModules, + _state: &mut S, + ) where + ET: EmulatorModuleTuple, + I: Unpin, + S: Unpin, { for mapping in qemu.mappings() { println!("mapping: {mapping:#?}"); @@ -305,18 +317,7 @@ where for mapping in &mappings { println!("asan mapping: {mapping:#?}"); } - } - fn first_exec( - &mut self, - _qemu: Qemu, - emulator_modules: &mut EmulatorModules, - _state: &mut S, - ) where - ET: EmulatorModuleTuple, - I: Unpin, - S: Unpin, - { emulator_modules.reads( Hook::Function(gen_readwrite_guest_asan::), Hook::Function(guest_trace_error_asan::),