1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-30 23:11:32 +02: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:
Heinrich Schuchardt
2019-07-14 20:14:46 +02:00
parent 046fe7b507
commit f62be16ddb

View File

@@ -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;