提交 53e1d8fa 编写于 作者: H Heinrich Schuchardt

efi_loader: parameter check in SetVirtualAddressMap

Check the parameters DescriptorSize and DescriptiorVersion of
SetVirtualAddressMap() as prescribed by the UEFI specification.
Signed-off-by: NHeinrich Schuchardt <xypron.glpk@gmx.de>
上级 a6d37098
......@@ -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 i;
efi_status_t ret = EFI_INVALID_PARAMETER;
int rt_code_sections = 0;
struct efi_event *event;
EFI_ENTRY("%zx %zx %x %p", memory_map_size, descriptor_size,
descriptor_version, virtmap);
if (descriptor_version != EFI_MEMORY_DESCRIPTOR_VERSION ||
descriptor_size < sizeof(struct efi_mem_desc))
goto out;
efi_virtmap = virtmap;
efi_descriptor_size = descriptor_size;
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
* something is definitely going wrong.
*/
return EFI_EXIT(EFI_INVALID_PARAMETER);
goto out;
}
/* 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_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);
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册