Function nix::sys::mman::mprotect

source ·
pub unsafe fn mprotect(
    addr: NonNull<c_void>,
    length: size_t,
    prot: ProtFlags
) -> Result<()>
Available on crate feature mman only.
Expand description

Set protection of memory mapping.

See mprotect(3) for details.

§Safety

Calls to mprotect are inherently unsafe, as changes to memory protections can lead to SIGSEGVs.

const ONE_K: size_t = 1024;
let one_k_non_zero = std::num::NonZeroUsize::new(ONE_K).unwrap();
let mut slice: &mut [u8] = unsafe {
    let mem = mmap_anonymous(None, one_k_non_zero, ProtFlags::PROT_NONE, MapFlags::MAP_PRIVATE)
        .unwrap();
    mprotect(mem, ONE_K, ProtFlags::PROT_READ | ProtFlags::PROT_WRITE).unwrap();
    std::slice::from_raw_parts_mut(mem.as_ptr().cast(), ONE_K)
};
assert_eq!(slice[0], 0x00);
slice[0] = 0xFF;
assert_eq!(slice[0], 0xFF);