pvmfw: Unpack FDT before applying overlay
Bug: 277993056
Test: Manually
Change-Id: Id57c392239b3a4495628ae04d091c4092a77cd29
diff --git a/pvmfw/src/fdt.rs b/pvmfw/src/fdt.rs
index 4fe2c34..7c138d7 100644
--- a/pvmfw/src/fdt.rs
+++ b/pvmfw/src/fdt.rs
@@ -627,6 +627,11 @@
RebootReason::InvalidFdt
})?;
+ fdt.unpack().map_err(|e| {
+ error!("Failed to unpack DT for patching: {e}");
+ RebootReason::InvalidFdt
+ })?;
+
if let Some(device_assignment_info) = &info.device_assignment {
let vm_dtbo = vm_dtbo.unwrap();
device_assignment_info.filter(vm_dtbo).map_err(|e| {
@@ -646,6 +651,11 @@
patch_device_tree(fdt, &info)?;
+ fdt.pack().map_err(|e| {
+ error!("Failed to unpack DT after patching: {e}");
+ RebootReason::InvalidFdt
+ })?;
+
Ok(info)
}
@@ -715,11 +725,6 @@
}
fn patch_device_tree(fdt: &mut Fdt, info: &DeviceTreeInfo) -> Result<(), RebootReason> {
- fdt.unpack().map_err(|e| {
- error!("Failed to unpack DT for patching: {e}");
- RebootReason::InvalidFdt
- })?;
-
if let Some(initrd_range) = &info.initrd_range {
patch_initrd_range(fdt, initrd_range).map_err(|e| {
error!("Failed to patch initrd range to DT: {e}");
@@ -769,11 +774,6 @@
})?;
}
- fdt.pack().map_err(|e| {
- error!("Failed to pack DT after patching: {e}");
- RebootReason::InvalidFdt
- })?;
-
Ok(())
}