1 // SPDX-License-Identifier: GPL-2.0 2 3 //! Helper crate for KASAN testing. 4 //! 5 //! Provides behavior to check the sanitization of Rust code. 6 7 use core::ptr::addr_of_mut; 8 use kernel::prelude::*; 9 10 /// Trivial UAF - allocate a big vector, grab a pointer partway through, 11 /// drop the vector, and touch it. 12 #[no_mangle] 13 pub extern "C" fn kasan_test_rust_uaf() -> u8 { 14 let mut v: KVec<u8> = KVec::new(); 15 for _ in 0..4096 { 16 v.push(0x42, GFP_KERNEL).unwrap(); 17 } 18 let ptr: *mut u8 = addr_of_mut!(v[2048]); 19 drop(v); 20 // SAFETY: Incorrect, on purpose. 21 unsafe { *ptr } 22 } 23