File tree Expand file tree Collapse file tree 2 files changed +16
-0
lines changed Expand file tree Collapse file tree 2 files changed +16
-0
lines changed Original file line number Diff line number Diff line change @@ -66,6 +66,10 @@ unsafe impl GlobalAlloc for Allocator {
66
66
/// of type [`MemoryType::LOADER_DATA`] for UEFI applications, [`MemoryType::BOOT_SERVICES_DATA`]
67
67
/// for UEFI boot drivers and [`MemoryType::RUNTIME_SERVICES_DATA`] for UEFI runtime drivers.
68
68
unsafe fn alloc ( & self , layout : Layout ) -> * mut u8 {
69
+ if !boot:: are_boot_services_active ( ) {
70
+ return ptr:: null_mut ( ) ;
71
+ }
72
+
69
73
let size = layout. size ( ) ;
70
74
let align = layout. align ( ) ;
71
75
let memory_type = MemoryType ( MEMORY_TYPE . load ( Ordering :: Acquire ) ) ;
Original file line number Diff line number Diff line change @@ -60,6 +60,18 @@ pub unsafe fn set_image_handle(image_handle: Handle) {
60
60
IMAGE_HANDLE . store ( image_handle. as_ptr ( ) , Ordering :: Release ) ;
61
61
}
62
62
63
+ /// Return true if boot services are active, false otherwise.
64
+ pub ( crate ) fn are_boot_services_active ( ) -> bool {
65
+ let Some ( st) = table:: system_table_raw ( ) else {
66
+ return false ;
67
+ } ;
68
+
69
+ // SAFETY: valid per requirements of `set_system_table`.
70
+ let st = unsafe { st. as_ref ( ) } ;
71
+
72
+ !st. boot_services . is_null ( )
73
+ }
74
+
63
75
fn boot_services_raw_panicking ( ) -> NonNull < uefi_raw:: table:: boot:: BootServices > {
64
76
let st = table:: system_table_raw_panicking ( ) ;
65
77
// SAFETY: valid per requirements of `set_system_table`.
You can’t perform that action at this time.
0 commit comments