53 lines
1.7 KiB
Diff
53 lines
1.7 KiB
Diff
|
From 79be2af5260b1f2e2a4680e74e14da0fdb42b570 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 13/62] 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
|
||
|
Upstream-commit-id: a625fa5096c
|
||
|
---
|
||
|
shim.c | 6 ++++--
|
||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/shim.c b/shim.c
|
||
|
index 05fc65005d1..5ab23d03db4 100644
|
||
|
--- a/shim.c
|
||
|
+++ b/shim.c
|
||
|
@@ -1610,9 +1610,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.26.2
|
||
|
|