On 11/02/2026 12:16 am, Marek Marczykowski-Górecki wrote:
> Fix calculating the table size - it consists of a header + entries, not
> just entries.
> This bug caused the last entry to have garbage in its final fields,
> including LowestSupportedFwVersion and CapsuleFlags, which (usually)
> made fwupd to detect firmware update availability, but refuse actually

"made fwupd able to"

> installing it.
>
> Fixes: dc7da0874ba4 ("EFI: preserve the System Resource Table for dom0")
> Signed-off-by: Marek Marczykowski-Górecki <[email protected]>
> ---
>  xen/common/efi/boot.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c
> index 5b84dbf26e5e..45015a0dd583 100644
> --- a/xen/common/efi/boot.c
> +++ b/xen/common/efi/boot.c
> @@ -675,7 +675,8 @@ static size_t __init get_esrt_size(const 
> EFI_MEMORY_DESCRIPTOR *desc)
>      if ( esrt_ptr->FwResourceCount > available_len / 
> sizeof(esrt_ptr->Entries[0]) )
>          return 0;
>  
> -    return esrt_ptr->FwResourceCount * sizeof(esrt_ptr->Entries[0]);
> +    return offsetof(EFI_SYSTEM_RESOURCE_TABLE, Entries) +
> +        esrt_ptr->FwResourceCount * sizeof(esrt_ptr->Entries[0]);

offsetof(EFI_SYSTEM_RESOURCE_TABLE, Entries[esrt_ptr->FwResourceCount])

is a shorter expression with the same answer, and a pattern we use
elsewhere.  I can fix on commit if you're happy.

~Andrew

Reply via email to