From a625fa5096ccdf87036379a5cb237bd43516d605 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas 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 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