projects
/
platform
/
kernel
/
u-boot.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
046fe7b
)
efi_loader: unaligned access in efi_file_from_path()
author
Heinrich Schuchardt
<xypron.glpk@gmx.de>
Sun, 14 Jul 2019 18:14:46 +0000
(20:14 +0200)
committer
Heinrich Schuchardt
<xypron.glpk@gmx.de>
Tue, 16 Jul 2019 22:17:23 +0000
(22:17 +0000)
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>
lib/efi_loader/efi_file.c
patch
|
blob
|
history
diff --git
a/lib/efi_loader/efi_file.c
b/lib/efi_loader/efi_file.c
index 36ca719a82fde2b33b181203bd1a8146ec720e37..f4ca5694eee3a688ca2a4331096f42ab7f30a122 100644
(file)
--- a/
lib/efi_loader/efi_file.c
+++ b/
lib/efi_loader/efi_file.c
@@
-755,6
+755,7
@@
struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp)
struct efi_device_path_file_path *fdp =
container_of(fp, struct efi_device_path_file_path, dp);
struct efi_file_handle *f2;
+ u16 *filename;
if (!EFI_DP_TYPE(fp, MEDIA_DEVICE, FILE_PATH)) {
printf("bad file path!\n");
@@
-762,8
+763,12
@@
struct efi_file_handle *efi_file_from_path(struct efi_device_path *fp)
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));
+ free(filename);
if (ret != EFI_SUCCESS)
return NULL;