use super::alloc_policy::AllocPolicy;
use super::mitigations;
use super::private;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct StandardPolicy;
impl private::Sealed for StandardPolicy {}
impl AllocPolicy for StandardPolicy {
const ENABLE_POISONING: bool = false;
const ZERO_INITIALIZE: bool = false;
const SEGMENT_POOL_WARM_THRESHOLD: usize = 4;
const POLICY_NAME: &'static str = "standard";
const MITIGATION_FLAGS: u32 = mitigations::NONE;
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct SecurePolicy;
impl private::Sealed for SecurePolicy {}
impl AllocPolicy for SecurePolicy {
const ENABLE_POISONING: bool = true;
const ZERO_INITIALIZE: bool = true;
const RANDOMIZE_ALLOCATION: bool = true;
const POLICY_NAME: &'static str = "secure";
const MITIGATION_FLAGS: u32 =
mitigations::POISONING | mitigations::ZERO_INIT | mitigations::RANDOMIZE_ALLOCATION;
}
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct HardenedPolicy;
impl private::Sealed for HardenedPolicy {}
impl AllocPolicy for HardenedPolicy {
const ENABLE_POISONING: bool = true;
const ZERO_INITIALIZE: bool = true;
const ENABLE_FREE_LIST_ENCRYPTION: bool = true;
const RANDOMIZE_ALLOCATION: bool = true;
const DELAY_PAGE_WAKE: bool = true;
const POLICY_NAME: &'static str = "hardened";
const MITIGATION_FLAGS: u32 = mitigations::IMPLEMENTED;
}
const _: () = assert!(
!StandardPolicy::ENABLE_POISONING,
"StandardPolicy must have ENABLE_POISONING = false (zero-cost guarantee)"
);
const _: () = assert!(
!StandardPolicy::ZERO_INITIALIZE,
"StandardPolicy must have ZERO_INITIALIZE = false (zero-cost guarantee)"
);
const _: () = assert!(
!StandardPolicy::ENABLE_FREE_LIST_ENCRYPTION,
"StandardPolicy must have ENABLE_FREE_LIST_ENCRYPTION = false (zero-cost guarantee)"
);
const _: () = assert!(
core::mem::size_of::<StandardPolicy>() == 0,
"StandardPolicy must be a ZST"
);
const _: () = assert!(
core::mem::size_of::<SecurePolicy>() == 0,
"SecurePolicy must be a ZST"
);
const _: () = assert!(
core::mem::size_of::<HardenedPolicy>() == 0,
"HardenedPolicy must be a ZST"
);
const _: () = assert!(
StandardPolicy::MITIGATION_FLAGS == mitigations::NONE,
"StandardPolicy::MITIGATION_FLAGS must be NONE"
);
const _: () = assert!(
HardenedPolicy::MITIGATION_FLAGS == mitigations::IMPLEMENTED,
"HardenedPolicy::MITIGATION_FLAGS must equal mitigations::IMPLEMENTED"
);