1#[doc(hidden)]
4pub mod private {
5 pub trait Sealed {}
6}
7
8pub trait AllocPolicy: private::Sealed + Send + Sync + 'static {
10 const ENABLE_POISONING: bool;
12
13 const ZERO_INITIALIZE: bool;
15
16 const POISON_FREE_BYTE: u8 = 0xDE;
18
19 const POISON_ALLOC_BYTE: u8 = 0xAD;
21
22 const ENABLE_FREE_LIST_ENCRYPTION: bool = false;
24
25 const RANDOMIZE_ALLOCATION: bool = false;
27}
28
29#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
31pub struct StandardPolicy;
32
33impl private::Sealed for StandardPolicy {}
34impl AllocPolicy for StandardPolicy {
35 const ENABLE_POISONING: bool = false;
36 const ZERO_INITIALIZE: bool = false;
37}
38
39#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
42pub struct SecurePolicy;
43
44impl private::Sealed for SecurePolicy {}
45impl AllocPolicy for SecurePolicy {
46 const ENABLE_POISONING: bool = true;
47 const ZERO_INITIALIZE: bool = true;
48 const RANDOMIZE_ALLOCATION: bool = true;
49}
50
51#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
54pub struct HardenedPolicy;
55
56impl private::Sealed for HardenedPolicy {}
57impl AllocPolicy for HardenedPolicy {
58 const ENABLE_POISONING: bool = true;
59 const ZERO_INITIALIZE: bool = true;
60 const ENABLE_FREE_LIST_ENCRYPTION: bool = true;
61 const RANDOMIZE_ALLOCATION: bool = true;
62}