From 8f16001c47e5dc5807f12f1524a6f83c86d91856 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Sun, 13 Aug 2023 19:36:13 +0100 Subject: [PATCH] minibsod::generate_minibsod openbsd implementation (#1420) --- libafl_bolts/src/minibsod.rs | 51 ++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/libafl_bolts/src/minibsod.rs b/libafl_bolts/src/minibsod.rs index d903d171ec..c23b31e979 100644 --- a/libafl_bolts/src/minibsod.rs +++ b/libafl_bolts/src/minibsod.rs @@ -688,7 +688,58 @@ pub fn generate_minibsod( start = start + sz as usize; } } + } else { + return Err(std::io::Error::last_os_error()); } + } else { + return Err(std::io::Error::last_os_error()); + } + } + + #[cfg(target_os = "openbsd")] + { + let mut pentry = std::mem::MaybeUninit::::uninit(); + let mut s = std::mem::size_of::(); + let arr = &[libc::CTL_KERN, libc::KERN_PROC_VMMAP, unsafe { + libc::getpid() + }]; + let mib = arr.as_ptr(); + let miblen = arr.len() as u32; + unsafe { (*pentry.as_mut_ptr()).kve_start = 0 }; + if unsafe { + libc::sysctl( + mib, + miblen, + pentry.as_mut_ptr() as *mut libc::c_void, + &mut s, + std::ptr::null_mut(), + 0, + ) + } == 0 + { + let end: u64 = s as u64; + unsafe { + let mut entry = pentry.assume_init(); + while libc::sysctl( + mib, + miblen, + &mut entry as *mut libc::kinfo_vmentry as *mut libc::c_void, + &mut s, + std::ptr::null_mut(), + 0, + ) == 0 + { + if entry.kve_end == end { + break; + } + // OpenBSD's vm mappings have no knowledge of their paths on disk + let i = format!("{}-{}\n", entry.kve_start, entry.kve_end); + writer.write(&i.into_bytes())?; + entry.kve_start = entry.kve_start + 1; + } + } + } else { + return Err(std::io::Error::last_os_error()); } }