region: Turn region_end() into an inclusive region_last()

The current region_end() implementation is susceptible to overflow
if the region is at the end of the addressable space. A common case
with the memory-mapped flash of x86 directly below the 32-bit limit.

Note: This patch also changes console output to inclusive limits.
IMO, to the better.

Change-Id: Ic4bd6eced638745b7e845504da74542e4220554a
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/79946
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Nico Huber
2024-01-14 14:26:37 +01:00
committed by Julius Werner
parent 7bb8de1843
commit 41feb32559
8 changed files with 23 additions and 27 deletions

View File

@@ -17,7 +17,7 @@ static void test_region(void **state)
struct region outer = {.offset = VAL(2), .size = VAL(4)};
assert_int_equal(region_offset(&outer), VAL(2));
assert_int_equal(region_sz(&outer), VAL(4));
assert_int_equal(region_end(&outer), VAL(6));
assert_int_equal(region_last(&outer), VAL(6) - 1);
struct region inner = {.offset = VAL(3), .size = VAL(2)};
assert_true(region_is_subregion(&outer, &inner));
@@ -118,7 +118,7 @@ static void test_rdev_basics(void **state)
{
assert_int_equal(region_device_offset(&mock_rdev), 0);
assert_int_equal(region_device_sz(&mock_rdev), ~(size_t)0);
assert_int_equal(region_device_end(&mock_rdev), ~(size_t)0);
assert_int_equal(region_device_last(&mock_rdev), ~(size_t)0 - 1);
}
/*
@@ -254,7 +254,7 @@ static void test_rdev_chain(void **state)
assert_int_equal(rdev_chain(&child, &mock_rdev, child_offs, child_size), 0);
assert_int_equal(region_device_sz(&child), child_size);
assert_int_equal(region_device_offset(&child), child_offs);
assert_int_equal(region_device_end(&child), child_offs + child_size);
assert_int_equal(region_device_last(&child), child_offs + child_size - 1);
assert_int_equal(rdev_relative_offset(&mock_rdev, &child), child_offs);
assert_int_equal(rdev_relative_offset(&child, &mock_rdev), -1);