1#![no_std]
13
14use core::{
15 alloc::{GlobalAlloc, Layout},
16 ffi::c_void,
17};
18
19pub use hardened_malloc_sys::posix_memalign;
21pub use hardened_malloc_sys::{aligned_alloc, calloc, free, malloc, realloc};
23pub use hardened_malloc_sys::{free_sized, malloc_object_size, malloc_object_size_fast};
25
26pub struct HardenedMalloc;
27
28unsafe impl GlobalAlloc for HardenedMalloc {
29 #[inline]
30 unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
31 malloc(layout.size()) as *mut u8
32 }
33
34 #[inline]
35 unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
36 calloc(layout.size(), 1) as *mut u8
37 }
38
39 #[inline]
40 unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) {
41 free_sized(ptr as *mut c_void, layout.size());
44 }
45
46 #[inline]
47 unsafe fn realloc(&self, ptr: *mut u8, _layout: Layout, size: usize) -> *mut u8 {
48 realloc(ptr as *mut c_void, size) as *mut u8
49 }
50}