mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2025-05-29 05:11:00 +00:00
Fix the broken bootpath
- The file path from DevicePathToStr may use slash as the file seperator. Change all slashes to backslashes to avoid the strange bootpath. - Remove the redundant backslashes. - ImagePath no longer requires the leading backslash. - Fix a memory leak Based on the patch from Michal Marek <mmarek@suse.com>
This commit is contained in:
parent
908eacc225
commit
f9f81a22dd
22
shim.c
22
shim.c
@ -995,15 +995,25 @@ static EFI_STATUS generate_path(EFI_LOADED_IMAGE *li, CHAR16 *ImagePath,
|
||||
|
||||
pathlen = StrLen(bootpath);
|
||||
|
||||
/*
|
||||
* DevicePathToStr() concatenates two nodes with '/'.
|
||||
* Convert '/' to '\\'.
|
||||
*/
|
||||
for (i = 0; i < pathlen; i++) {
|
||||
if (bootpath[i] == '/')
|
||||
bootpath[i] = '\\';
|
||||
}
|
||||
for (i=pathlen; i>0; i--) {
|
||||
if (bootpath[i] == '\\')
|
||||
if (bootpath[i] == '\\' && bootpath[i-1] != '\\')
|
||||
break;
|
||||
}
|
||||
if (bootpath[i] == '\\')
|
||||
bootpath[i+1] = '\0';
|
||||
else
|
||||
bootpath[0] = '\0';
|
||||
|
||||
bootpath[i+1] = '\0';
|
||||
|
||||
if (i == 0 || bootpath[i-i] == '\\')
|
||||
bootpath[i] = '\0';
|
||||
while (*ImagePath == '\\')
|
||||
ImagePath++;
|
||||
|
||||
*PathName = AllocatePool(StrSize(bootpath) + StrSize(ImagePath));
|
||||
|
||||
@ -1021,6 +1031,8 @@ static EFI_STATUS generate_path(EFI_LOADED_IMAGE *li, CHAR16 *ImagePath,
|
||||
*grubpath = FileDevicePath(device, *PathName);
|
||||
|
||||
error:
|
||||
FreePool(bootpath);
|
||||
|
||||
return efi_status;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user