From e1f9d2c780567a8a366f3112ef1f1a21f355ab64 Mon Sep 17 00:00:00 2001 From: Tobias Heider Date: Thu, 21 Aug 2025 14:22:43 +0200 Subject: [PATCH] Fixup loader. Actually pass path, restore when entry() returns Signed-off-by: Tobias Heider --- linux.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/linux.c b/linux.c index 77f1d7e..bc99dda 100644 --- a/linux.c +++ b/linux.c @@ -27,6 +27,7 @@ EFI_STATUS linux_exec( const struct iovec *kernel, const struct iovec *initrd) { + EFI_LOADED_IMAGE_PROTOCOL original_parent_loaded_image; size_t kernel_size_in_memory = 0; uint32_t entry_point; uint64_t image_base; @@ -97,6 +98,8 @@ EFI_STATUS linux_exec( kernel_file_path->end_path.SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; kernel_file_path->end_path.Length = sizeof (EFI_DEVICE_PATH); + original_parent_loaded_image = *parent_loaded_image; + parent_loaded_image->FilePath = &kernel_file_path->memmap_path.Header; parent_loaded_image->ImageBase = loaded_kernel; parent_loaded_image->ImageSize = kernel_size_in_memory; @@ -116,5 +119,8 @@ EFI_STATUS linux_exec( (EFI_IMAGE_ENTRY_POINT) ((const uint8_t *) parent_loaded_image->ImageBase + entry_point); err = entry(parent_image, ST); + /* Restore */ + *parent_loaded_image = original_parent_loaded_image; + return log_error_status(err, "Error starting kernel image: %m"); }