Skip to content

Commit 57bb9de

Browse files
committed
Fixes from PR
- Update system table crc32 Signed-off-by: Ayush Singh <[email protected]>
1 parent b7b6bce commit 57bb9de

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

Diff for: library/std/src/sys/pal/uefi/process.rs

+24-1
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,9 @@ mod uefi_command_internal {
393393
}
394394
}
395395

396-
pub fn start_image(&self) -> io::Result<r_efi::efi::Status> {
396+
pub fn start_image(&mut self) -> io::Result<r_efi::efi::Status> {
397+
self.update_st_crc32()?;
398+
397399
let boot_services: NonNull<r_efi::efi::BootServices> = boot_services()
398400
.ok_or_else(|| const_io_error!(io::ErrorKind::NotFound, "Boot Services not found"))?
399401
.cast();
@@ -476,6 +478,27 @@ mod uefi_command_internal {
476478

477479
self.args = Some(args);
478480
}
481+
482+
fn update_st_crc32(&mut self) -> io::Result<()> {
483+
let bt: NonNull<r_efi::efi::BootServices> = boot_services().unwrap().cast();
484+
let st_size = self.st.hdr.header_size as usize;
485+
let mut crc32: u32 = 0;
486+
487+
let r = unsafe {
488+
((*bt.as_ptr()).calculate_crc32)(
489+
self.st.as_mut() as *mut r_efi::efi::SystemTable as *mut crate::ffi::c_void,
490+
st_size,
491+
&mut crc32,
492+
)
493+
};
494+
495+
if r.is_error() {
496+
Err(io::Error::from_raw_os_error(r.as_usize()))
497+
} else {
498+
self.st.hdr.crc32 = crc32;
499+
Ok(())
500+
}
501+
}
479502
}
480503

481504
impl Drop for Command {

0 commit comments

Comments
 (0)