diff options
author | Tom Rini <trini@konsulko.com> | 2021-02-04 17:35:50 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-02-04 17:35:50 -0500 |
commit | 55ffabec7f9108060350fae29b932fbd832f8296 (patch) | |
tree | ca7399205efb7aeb994def6728c6d79fc10d4ba5 /lib/efi_loader/efi_dt_fixup.c | |
parent | 21cb717e79e3f6588abae52fe55e2c415850c913 (diff) | |
parent | 5489448cd7d46554f7f45a180754be78eff9f54d (diff) |
Merge tag 'efi-2021-04-rc2' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
Pull request for UEFI sub-system for efi-2021-04-rc2
Bug fixes:
* do not allow creating of files with filenames on FAT file system
* install UEFI System Partition GUID on ESP handle
* in dtbdump.efi test tool use GUID to find ESP handle
Documentation:
* man-page for load command
* describe end of life of plat_auto
Diffstat (limited to 'lib/efi_loader/efi_dt_fixup.c')
-rw-r--r-- | lib/efi_loader/efi_dt_fixup.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/efi_loader/efi_dt_fixup.c b/lib/efi_loader/efi_dt_fixup.c index 3850ab3b0fe..6de57b84d20 100644 --- a/lib/efi_loader/efi_dt_fixup.c +++ b/lib/efi_loader/efi_dt_fixup.c @@ -110,6 +110,7 @@ efi_dt_fixup(struct efi_dt_fixup_protocol *this, void *dtb, { efi_status_t ret; size_t required_size; + size_t total_size; bootm_headers_t img = { 0 }; EFI_ENTRY("%p, %p, %p, %d", this, dtb, buffer_size, flags); @@ -124,20 +125,20 @@ efi_dt_fixup(struct efi_dt_fixup_protocol *this, void *dtb, goto out; } if (flags & EFI_DT_APPLY_FIXUPS) { + /* Check size */ required_size = fdt_off_dt_strings(dtb) + fdt_size_dt_strings(dtb) + 0x3000; - } else { - required_size = fdt_totalsize(dtb); - } - if (required_size > *buffer_size) { - *buffer_size = required_size; - ret = EFI_BUFFER_TOO_SMALL; - goto out; - } - fdt_set_totalsize(dtb, *buffer_size); + total_size = fdt_totalsize(dtb); + if (required_size < total_size) + required_size = total_size; + if (required_size > *buffer_size) { + *buffer_size = required_size; + ret = EFI_BUFFER_TOO_SMALL; + goto out; + } - if (flags & EFI_DT_APPLY_FIXUPS) { + fdt_set_totalsize(dtb, *buffer_size); if (image_setup_libfdt(&img, dtb, 0, NULL)) { log_err("failed to process device tree\n"); ret = EFI_INVALID_PARAMETER; @@ -147,10 +148,10 @@ efi_dt_fixup(struct efi_dt_fixup_protocol *this, void *dtb, if (flags & EFI_DT_RESERVE_MEMORY) efi_carve_out_dt_rsv(dtb); - if (EFI_DT_INSTALL_TABLE) { + if (flags & EFI_DT_INSTALL_TABLE) { ret = efi_install_configuration_table(&efi_guid_fdt, dtb); if (ret != EFI_SUCCESS) { - log_err("ERROR: failed to install device tree\n"); + log_err("failed to install device tree\n"); goto out; } } |