1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-26 13:01:17 +02:00

efi_loader: parameter check in SetVirtualAddressMap

Check the parameters DescriptorSize and DescriptiorVersion of
SetVirtualAddressMap() as prescribed by the UEFI specification.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Heinrich Schuchardt
2019-08-14 05:19:37 +02:00
parent a6d37098bd
commit 53e1d8fae8

View File

@@ -641,12 +641,17 @@ static efi_status_t EFIAPI efi_set_virtual_address_map(
{ {
efi_uintn_t n = memory_map_size / descriptor_size; efi_uintn_t n = memory_map_size / descriptor_size;
efi_uintn_t i; efi_uintn_t i;
efi_status_t ret = EFI_INVALID_PARAMETER;
int rt_code_sections = 0; int rt_code_sections = 0;
struct efi_event *event; struct efi_event *event;
EFI_ENTRY("%zx %zx %x %p", memory_map_size, descriptor_size, EFI_ENTRY("%zx %zx %x %p", memory_map_size, descriptor_size,
descriptor_version, virtmap); descriptor_version, virtmap);
if (descriptor_version != EFI_MEMORY_DESCRIPTOR_VERSION ||
descriptor_size < sizeof(struct efi_mem_desc))
goto out;
efi_virtmap = virtmap; efi_virtmap = virtmap;
efi_descriptor_size = descriptor_size; efi_descriptor_size = descriptor_size;
efi_descriptor_count = n; efi_descriptor_count = n;
@@ -677,7 +682,7 @@ static efi_status_t EFIAPI efi_set_virtual_address_map(
* We expose exactly one single runtime code section, so * We expose exactly one single runtime code section, so
* something is definitely going wrong. * something is definitely going wrong.
*/ */
return EFI_EXIT(EFI_INVALID_PARAMETER); goto out;
} }
/* Notify EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE */ /* Notify EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE */
@@ -738,11 +743,13 @@ static efi_status_t EFIAPI efi_set_virtual_address_map(
efi_relocate_runtime_table(new_offset); efi_relocate_runtime_table(new_offset);
efi_runtime_relocate(new_offset, map); efi_runtime_relocate(new_offset, map);
return EFI_EXIT(EFI_SUCCESS); ret = EFI_SUCCESS;
goto out;
} }
} }
return EFI_EXIT(EFI_INVALID_PARAMETER); out:
return EFI_EXIT(ret);
} }
/** /**