region: Introduce region_create() functions
We introduce two new functions to create region objects. They allow us to check for integer overflows (region_create_untrusted()) or assert their absence (region_create()). This fixes potential overflows in region_overlap() checks in SMI handlers, where we would wrongfully report MMIO as *not* overlapping SMRAM. Also, two cases of strtol() in parse_region() (cbfstool), where the results were implicitly converted to `size_t`, are replaced with the unsigned strtoul(). FIT payload support is left out, as it doesn't use the region API (only the struct). Change-Id: I4ae3e6274c981c9ab4fb1263c2a72fa68ef1c32b Ticket: https://ticket.coreboot.org/issues/522 Found-by: Vadim Zaliva <lord@digamma.ai> Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/79905 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
This commit is contained in:
parent
0e9830884c
commit
af0d4bce65
12 changed files with 95 additions and 75 deletions
|
|
@ -10,14 +10,11 @@ uintptr_t temp_memory_end;
|
|||
|
||||
void report_fsp_output(void)
|
||||
{
|
||||
const struct region fsp_car_region = {
|
||||
.offset = temp_memory_start,
|
||||
.size = temp_memory_end - temp_memory_start,
|
||||
};
|
||||
const struct region coreboot_car_region = {
|
||||
.offset = (uintptr_t)_car_region_start,
|
||||
.size = (uintptr_t)_car_region_size,
|
||||
};
|
||||
const struct region fsp_car_region = region_create(
|
||||
temp_memory_start, temp_memory_end - temp_memory_start);
|
||||
const struct region coreboot_car_region = region_create(
|
||||
(uintptr_t)_car_region_start, (uintptr_t)_car_region_size);
|
||||
|
||||
printk(BIOS_DEBUG, "FSP: reported temp_mem region: [0x%08lx,0x%08lx)\n",
|
||||
temp_memory_start, temp_memory_end);
|
||||
if (!region_is_subregion(&fsp_car_region, &coreboot_car_region)) {
|
||||
|
|
|
|||
|
|
@ -10,14 +10,11 @@ uintptr_t temp_memory_end;
|
|||
|
||||
void report_fspt_output(void)
|
||||
{
|
||||
const struct region fsp_car_region = {
|
||||
.offset = temp_memory_start,
|
||||
.size = temp_memory_end - temp_memory_start,
|
||||
};
|
||||
const struct region coreboot_car_region = {
|
||||
.offset = (uintptr_t)_car_region_start,
|
||||
.size = (uintptr_t)_car_region_size,
|
||||
};
|
||||
const struct region fsp_car_region = region_create(
|
||||
temp_memory_start, temp_memory_end - temp_memory_start);
|
||||
const struct region coreboot_car_region = region_create(
|
||||
(uintptr_t)_car_region_start, (uintptr_t)_car_region_size);
|
||||
|
||||
printk(BIOS_DEBUG, "FSP-T: reported temp_mem region: [0x%08lx,0x%08lx)\n",
|
||||
temp_memory_start, temp_memory_end);
|
||||
if (!region_is_subregion(&fsp_car_region, &coreboot_car_region)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue