FRET-LibAFL/libafl_qemu/librasan/asan/tests/guest_shadow_align.rs
WorksButNotTested 728b1216bb
Librasan (#3023)
* Fixes to main

* Add librasan

* Party like it's 2024

* Fix snapshot module to work with guest asan

* Fix guest_asan module

* Fixes to runner

* Fix linking issues using a REL

* Fix qemu_launcher

* Change modify_mapping to a method

* Fix gasan_test

* Remove debug from Justfile

* Optimize release build of librasan

* Set ulimit for qasan and gasan tests

* Tidy up symbol renaming

* Add missing symbols for PPC

* Change to support rustix 1.0.0

* Canonicalize the CUSTOM_ASAN_PATH

* Review changes

* Restructure backends

* release_max_level_info

* More review changes

* Clippy fixes

* Changes to reduce the burden on the CI

* Fix macos clippy

---------

Co-authored-by: Your Name <you@example.com>
2025-03-10 17:27:55 +01:00

125 lines
3.2 KiB
Rust

#[cfg(test)]
#[cfg(feature = "guest")]
mod tests {
use asan::{
GuestAddr,
mmap::Mmap,
shadow::guest::{DefaultShadowLayout, GuestShadow},
};
#[derive(Ord, PartialOrd, PartialEq, Eq, Debug)]
struct DummyMmap;
impl Mmap for DummyMmap {
type Error = DummyMmapError;
fn map(_size: usize) -> Result<Self, Self::Error> {
unimplemented!()
}
fn map_at(_base: asan::GuestAddr, _size: usize) -> Result<Self, Self::Error> {
unimplemented!()
}
fn protect(
_addr: GuestAddr,
_len: usize,
_prot: asan::mmap::MmapProt,
) -> Result<(), Self::Error> {
unimplemented!()
}
fn as_slice(&self) -> &[u8] {
unimplemented!()
}
fn as_mut_slice(&mut self) -> &mut [u8] {
unimplemented!()
}
fn huge_pages(_addr: GuestAddr, _len: usize) -> Result<(), Self::Error> {
unimplemented!()
}
fn dont_dump(_addr: GuestAddr, _len: usize) -> Result<(), Self::Error> {
unimplemented!()
}
}
#[derive(Debug)]
struct DummyMmapError;
type GS = GuestShadow<DummyMmap, DefaultShadowLayout>;
#[test]
fn test_align_up_zero() {
assert_eq!(GS::align_up(0), 0);
assert_eq!(GS::align_up(1), 8);
assert_eq!(GS::align_up(2), 8);
assert_eq!(GS::align_up(3), 8);
assert_eq!(GS::align_up(4), 8);
assert_eq!(GS::align_up(5), 8);
assert_eq!(GS::align_up(6), 8);
assert_eq!(GS::align_up(7), 8);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_one() {
GS::align_up(GuestAddr::MAX - 1);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_two() {
GS::align_up(GuestAddr::MAX - 2);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_three() {
GS::align_up(GuestAddr::MAX - 3);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_four() {
GS::align_up(GuestAddr::MAX - 4);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_five() {
GS::align_up(GuestAddr::MAX - 5);
}
#[test]
#[should_panic]
fn test_align_up_max_minus_six() {
GS::align_up(GuestAddr::MAX - 6);
}
#[test]
fn test_align_down_zero() {
assert_eq!(GS::align_down(0), 0);
assert_eq!(GS::align_down(1), 0);
assert_eq!(GS::align_down(2), 0);
assert_eq!(GS::align_down(3), 0);
assert_eq!(GS::align_down(4), 0);
assert_eq!(GS::align_down(5), 0);
assert_eq!(GS::align_down(6), 0);
assert_eq!(GS::align_down(7), 0);
}
#[test]
fn test_align_down_max() {
assert_eq!(GS::align_down(GuestAddr::MAX), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 1), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 2), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 3), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 4), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 5), GuestAddr::MAX - 7);
assert_eq!(GS::align_down(GuestAddr::MAX - 6), GuestAddr::MAX - 7);
}
}