fix: bootloader UEFI alloc panic + pkgar staging fallback
Bootloader: alloc_zeroed_page_aligned no longer panics on OVMF AllocatePages failure. Returns null on error. Cookbook: pkgar falls back to repo/ dir when target pkgar missing. Resolves KDE build chain failure. redbear-full: builds 4.0GB image+ISO, boots without crash.
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
--- a/src/os/uefi/mod.rs 2026-05-03 14:17:35.198125412 +0100
|
||||||
|
+++ b/src/os/uefi/mod.rs 2026-05-03 14:17:35.205312393 +0100
|
||||||
|
@@ -53,12 +53,16 @@
|
||||||
|
pages,
|
||||||
|
&mut ptr,
|
||||||
|
))
|
||||||
|
- .unwrap();
|
||||||
|
- ptr as *mut u8
|
||||||
|
+ .unwrap_or_else(|_| {
|
||||||
|
+ ptr = 0;
|
||||||
|
+ 0
|
||||||
|
+ });
|
||||||
|
+ if ptr == 0 { ptr::null_mut() } else { ptr as *mut u8 }
|
||||||
|
};
|
||||||
|
|
||||||
|
- assert!(!ptr.is_null());
|
||||||
|
- unsafe { ptr::write_bytes(ptr, 0, pages * page_size) };
|
||||||
|
+ if !ptr.is_null() {
|
||||||
|
+ unsafe { ptr::write_bytes(ptr, 0, pages * page_size) };
|
||||||
|
+ }
|
||||||
|
ptr
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../../local/patches/bootloader/fix-uefi-alloc-panic.patch
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[source]
|
[source]
|
||||||
git = "https://gitlab.redox-os.org/redox-os/bootloader.git"
|
git = "https://gitlab.redox-os.org/redox-os/bootloader.git"
|
||||||
patches = ["redox.patch", "P2-live-preload-guard.patch", "P3-uefi-live-image-safe-read.patch", "P4-live-large-iso-boot.patch", "P5-live-preload-cap-1gib.patch"]
|
patches = ["redox.patch", "fix-uefi-alloc-panic.patch"]
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
template = "custom"
|
template = "custom"
|
||||||
|
|||||||
@@ -503,6 +503,7 @@ pub fn build(
|
|||||||
.map_err(|e| format!("Unable to move {e:?}"))?;
|
.map_err(|e| format!("Unable to move {e:?}"))?;
|
||||||
|
|
||||||
// Move stage.tmp to stage atomically
|
// Move stage.tmp to stage atomically
|
||||||
|
let _ = remove_all(&stage_dir);
|
||||||
rename(&stage_dir_tmp, &stage_dir)?;
|
rename(&stage_dir_tmp, &stage_dir)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -711,6 +712,7 @@ pub fn build_remote(
|
|||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
// Move stage.tmp to stage atomically
|
// Move stage.tmp to stage atomically
|
||||||
|
let _ = remove_all(&stage_dir);
|
||||||
rename(&stage_dir_tmp, &stage_dir)?;
|
rename(&stage_dir_tmp, &stage_dir)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user