boot: Fix invalid free

LocateDevicePath() advances the device path pointer, making it invalid
when freed.
This commit is contained in:
Jan Janssen
2022-01-13 14:19:32 +01:00
parent 2ebb69bc09
commit 41b74a18b2
2 changed files with 5 additions and 3 deletions
+3 -2
View File
@@ -118,13 +118,14 @@ static EFIAPI EFI_STATUS security_policy_authentication (const EFI_SECURITY_PROT
if (!dev_path)
return EFI_OUT_OF_RESOURCES;
status = BS->LocateDevicePath(&FileSystemProtocol, &dev_path, &h);
EFI_DEVICE_PATH *dp = dev_path;
status = BS->LocateDevicePath(&FileSystemProtocol, &dp, &h);
if (EFI_ERROR(status))
return status;
/* No need to check return value, this already happened in efi_main() */
root = LibOpenRoot(h);
dev_path_str = DevicePathToStr(dev_path);
dev_path_str = DevicePathToStr(dp);
if (!dev_path_str)
return EFI_OUT_OF_RESOURCES;
+2 -1
View File
@@ -286,7 +286,8 @@ EFI_STATUS xbootldr_open(EFI_HANDLE *device, EFI_HANDLE *ret_device, EFI_FILE **
hd->SignatureType = SIGNATURE_TYPE_GUID;
}
err = BS->LocateDevicePath(&BlockIoProtocol, &partition_path, &new_device);
EFI_DEVICE_PATH *dp = partition_path;
err = BS->LocateDevicePath(&BlockIoProtocol, &dp, &new_device);
if (EFI_ERROR(err))
return err;