From 8009fa49845cd6fb7b7014ab06218b68fe702006 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 16 Jul 2026 15:59:08 +0200 Subject: [PATCH] boot: fix MEMMAP_DEVICE_PATH EndingAddress field calculation Let's do what EDK2 does. Fixes: #43038 --- src/boot/linux.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/boot/linux.c b/src/boot/linux.c index 09fb63419dc..4ebba7bd4ac 100644 --- a/src/boot/linux.c +++ b/src/boot/linux.c @@ -217,7 +217,11 @@ EFI_STATUS linux_exec( }, .MemoryType = EfiLoaderData, .StartingAddress = POINTER_TO_PHYSICAL_ADDRESS(kernel->iov_base), - .EndingAddress = POINTER_TO_PHYSICAL_ADDRESS(kernel->iov_base) + kernel->iov_len, + /* NB: the UEFI spec doesn't clarify whether the EndingAddress field should point to + * the very last byte or the byte one after. EDK2 puts the very last byte in this + * field, hence let's do so here too. Note that iovec_is_set() check above ensured + * this cannot underflow. */ + .EndingAddress = POINTER_TO_PHYSICAL_ADDRESS(kernel->iov_base) + kernel->iov_len - 1, }, .end_path = DEVICE_PATH_END_NODE, };