mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2025-05-30 14:32:16 +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);
|
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--) {
|
for (i=pathlen; i>0; i--) {
|
||||||
if (bootpath[i] == '\\')
|
if (bootpath[i] == '\\' && bootpath[i-1] != '\\')
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (bootpath[i] == '\\')
|
||||||
|
bootpath[i+1] = '\0';
|
||||||
|
else
|
||||||
|
bootpath[0] = '\0';
|
||||||
|
|
||||||
bootpath[i+1] = '\0';
|
while (*ImagePath == '\\')
|
||||||
|
ImagePath++;
|
||||||
if (i == 0 || bootpath[i-i] == '\\')
|
|
||||||
bootpath[i] = '\0';
|
|
||||||
|
|
||||||
*PathName = AllocatePool(StrSize(bootpath) + StrSize(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);
|
*grubpath = FileDevicePath(device, *PathName);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
FreePool(bootpath);
|
||||||
|
|
||||||
return efi_status;
|
return efi_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user