[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] efi/chainloader: fix device path handed to loaded image
From: |
Oliver Steffen |
Subject: |
[PATCH] efi/chainloader: fix device path handed to loaded image |
Date: |
Fri, 30 Sep 2022 07:51:15 -0700 |
Do not split the path on the filesystem into directory
and filename, and do not add them as two separate device
path nodes. Instead add one node for the full path.
When chain loading an efi binary the path constructed
currently is, for example:
/ACPI(a0341d0,0)/PCI(2,1f)/Sata(0,ffff,0)/File(\efi\Linux)/File(vmlinuz.efi)/EndEntire
This is interpreted by the firmware as:
PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/\efi\Linux/vmlinuz.efi
Which is invalid because it contains a / where a \ belongs.
This / is in fact the device path node separator, and is not part of
any File() path node.
Using one node for the full path on the filesystem results in:
PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/\efi\Linux\vmlinuz.efi
Signed-off-by: Oliver Steffen <osteffen@redhat.com>
---
grub-core/loader/efi/chainloader.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/grub-core/loader/efi/chainloader.c
b/grub-core/loader/efi/chainloader.c
index 7557eb269..6276cf491 100644
--- a/grub-core/loader/efi/chainloader.c
+++ b/grub-core/loader/efi/chainloader.c
@@ -170,7 +170,6 @@ make_file_path (grub_efi_device_path_t *dp, const
char *filename)
}
/* File Path is NULL terminated. Allocate space for 2 extra characters */
- /* FIXME why we split path in two components? */
file_path = grub_malloc (size
+ ((grub_strlen (dir_start) + 2)
* GRUB_MAX_UTF16_PER_UTF8
@@ -186,19 +185,12 @@ make_file_path (grub_efi_device_path_t *dp,
const char *filename)
+ ((char *) d - (char *) dp));
grub_efi_print_device_path (d);
if (copy_file_path ((grub_efi_file_path_device_path_t *) d,
- dir_start, dir_end - dir_start) != GRUB_ERR_NONE)
+ dir_start, grub_strlen(dir_start)) != GRUB_ERR_NONE)
{
- fail:
grub_free (file_path);
return 0;
}
- /* Fill the file path for the file. */
- d = GRUB_EFI_NEXT_DEVICE_PATH (d);
- if (copy_file_path ((grub_efi_file_path_device_path_t *) d,
- dir_end + 1, grub_strlen (dir_end + 1)) != GRUB_ERR_NONE)
- goto fail;
-
/* Fill the end of device path nodes. */
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
d->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
--
2.37.3
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] efi/chainloader: fix device path handed to loaded image,
Oliver Steffen <=