diff --git a/framework/aster-frame/src/arch/x86/boot/linux_boot/mod.rs b/framework/aster-frame/src/arch/x86/boot/linux_boot/mod.rs index cff12c737..bfd72d7a9 100644 --- a/framework/aster-frame/src/arch/x86/boot/linux_boot/mod.rs +++ b/framework/aster-frame/src/arch/x86/boot/linux_boot/mod.rs @@ -69,6 +69,9 @@ fn init_kernel_commandline(kernel_cmdline: &'static Once) { fn init_initramfs(initramfs: &'static Once<&'static [u8]>) { let hdr = &BOOT_PARAMS.get().unwrap().hdr; let ptr = hdr.ramdisk_image as usize; + if ptr == 0 { + return; + } // We must return a slice composed by VA since kernel should read everything in VA. let base_va = if ptr < PHYS_MEM_BASE_VADDR { paddr_to_vaddr(ptr) @@ -76,6 +79,9 @@ fn init_initramfs(initramfs: &'static Once<&'static [u8]>) { ptr }; let length = hdr.ramdisk_size as usize; + if length == 0 { + return; + } initramfs.call_once(|| unsafe { core::slice::from_raw_parts(base_va as *const u8, length) }); } diff --git a/framework/aster-frame/src/arch/x86/boot/multiboot2/mod.rs b/framework/aster-frame/src/arch/x86/boot/multiboot2/mod.rs index c8673d964..b70f7a65f 100644 --- a/framework/aster-frame/src/arch/x86/boot/multiboot2/mod.rs +++ b/framework/aster-frame/src/arch/x86/boot/multiboot2/mod.rs @@ -50,12 +50,9 @@ fn init_kernel_commandline(kernel_cmdline: &'static Once) { } fn init_initramfs(initramfs: &'static Once<&'static [u8]>) { - let mb2_module_tag = MB2_INFO - .get() - .unwrap() - .module_tags() - .next() - .expect("No Multiboot2 modules found!"); + let Some(mb2_module_tag) = MB2_INFO.get().unwrap().module_tags().next() else { + return; + }; let base_addr = mb2_module_tag.start_address() as usize; // We must return a slice composed by VA since kernel should read every in VA. let base_va = if base_addr < PHYS_MEM_BASE_VADDR {