mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-11-28 14:11:29 +01:00
efi_loader: unaligned access in efi_file_from_path()
The device path structure is packed. So no assumption on the alignment is possible. Copy the file name in efi_file_from_path() to assure there is no unaligned access. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
046fe7b507
commit
f62be16ddb
@ -755,6 +755,7 @@ struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp)
|
|||||||
struct efi_device_path_file_path *fdp =
|
struct efi_device_path_file_path *fdp =
|
||||||
container_of(fp, struct efi_device_path_file_path, dp);
|
container_of(fp, struct efi_device_path_file_path, dp);
|
||||||
struct efi_file_handle *f2;
|
struct efi_file_handle *f2;
|
||||||
|
u16 *filename;
|
||||||
|
|
||||||
if (!EFI_DP_TYPE(fp, MEDIA_DEVICE, FILE_PATH)) {
|
if (!EFI_DP_TYPE(fp, MEDIA_DEVICE, FILE_PATH)) {
|
||||||
printf("bad file path!\n");
|
printf("bad file path!\n");
|
||||||
@ -762,8 +763,12 @@ struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_CALL(ret = f->open(f, &f2, fdp->str,
|
filename = u16_strdup(fdp->str);
|
||||||
|
if (!filename)
|
||||||
|
return NULL;
|
||||||
|
EFI_CALL(ret = f->open(f, &f2, filename,
|
||||||
EFI_FILE_MODE_READ, 0));
|
EFI_FILE_MODE_READ, 0));
|
||||||
|
free(filename);
|
||||||
if (ret != EFI_SUCCESS)
|
if (ret != EFI_SUCCESS)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user