52 lines
1.6 KiB
Diff
52 lines
1.6 KiB
Diff
From a625fa5096ccdf87036379a5cb237bd43516d605 Mon Sep 17 00:00:00 2001
|
|
From: Javier Martinez Canillas <javierm@redhat.com>
|
|
Date: Fri, 7 Sep 2018 14:11:02 +0200
|
|
Subject: [PATCH] shim: Properly generate absolute paths from relative
|
|
image paths
|
|
|
|
The generate_path_from_image_path() doesn't properly handle the case when
|
|
shim is invoked using a relative path (e.g: from the EFI shell). In that
|
|
function, always the last component is stripped from absolute file path
|
|
to calculate the dirname, and this is concatenated with the image path.
|
|
|
|
But if the path is a relative one, the function will wrongly concatenate
|
|
the dirname with the relative image path, i.e:
|
|
|
|
Shell> FS0:
|
|
FS0:\> cd EFI
|
|
FS0:\EFI\> BOOT\BOOTX64.EFI
|
|
Failed to open \EFI\BOOT\BOOT\BOOTX64.EFI - Not found
|
|
Failed to load image \EFI\BOOT\BOOT\BOOTX64.EFI: Not found
|
|
start_image() returned Not found
|
|
|
|
Calculate the image path basename and concatenate that with the dirname.
|
|
|
|
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
|
|
Reviewed-by: Maran Wilson maran.wilson@oracle.com
|
|
Tested-by: Maran Wilson maran.wilson@oracle.com
|
|
---
|
|
shim.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/shim.c b/shim.c
|
|
index f29f39214f5..32d2772b279 100644
|
|
--- a/shim.c
|
|
+++ b/shim.c
|
|
@@ -1640,9 +1640,11 @@ static EFI_STATUS generate_path_from_image_path(EFI_LOADED_IMAGE *li,
|
|
bootpath[j] = '\0';
|
|
}
|
|
|
|
- while (*ImagePath == '\\')
|
|
- ImagePath++;
|
|
+ for (i = 0, last = 0; i < StrLen(ImagePath); i++)
|
|
+ if (ImagePath[i] == '\\')
|
|
+ last = i + 1;
|
|
|
|
+ ImagePath = ImagePath + last;
|
|
*PathName = AllocatePool(StrSize(bootpath) + StrSize(ImagePath));
|
|
|
|
if (!*PathName) {
|
|
--
|
|
2.21.0
|
|
|