Coverage Report

Created: 2026-07-16 06:03

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/getrandom-0.4.3/src/utils/sanitizer.rs
Line
Count
Source
1
use core::mem::MaybeUninit;
2
3
/// Unpoisons `buf` if MSAN support is enabled.
4
///
5
/// Most backends do not need to unpoison their output. Rust language- and
6
/// library- provided functionality unpoisons automatically. Similarly, libc
7
/// either natively supports MSAN and/or MSAN hooks libc-provided functions
8
/// to unpoison outputs on success. Only when all of these things are
9
/// bypassed do we need to do it ourselves.
10
///
11
/// The call to unpoison should be done as close to the write as possible.
12
/// For example, if the backend partially fills the output buffer in chunks,
13
/// each chunk should be unpoisoned individually. This way, the correctness of
14
/// the chunking logic can be validated (in part) using MSAN.
15
0
pub unsafe fn unpoison(buf: &mut [MaybeUninit<u8>]) {
16
    cfg_if! {
17
        if #[cfg(getrandom_msan)] {
18
            unsafe extern "C" {
19
                fn __msan_unpoison(a: *mut core::ffi::c_void, size: usize);
20
            }
21
            let a = buf.as_mut_ptr().cast();
22
            let size = buf.len();
23
            unsafe { __msan_unpoison(a, size) };
24
        } else {
25
0
            let _ = buf;
26
        }
27
    }
28
0
}