[RFC] efi_loader: UKI Secure Boot verification failure with PE section gaps

Aleksandr Iashchenko aleksandr.iashchenko at linutronix.de
Tue Feb 17 11:46:04 CET 2026


Hi,

I am using U-Boot as UEFI firmware and trying to boot a Unified Kernel Image 
(UKI) with Secure Boot enabled.

I see a signature verification failure in U-Boot, even though the image is 
signed with the correct key (trusted in db).
The issue appears to be related to gaps between PE sections (UKI built by ukify 
from systemd).

My understanding of the current flow / why signature verification fails: 


1. efi_image_parse() computes bytes_hashed as a sum of aligned section sizes 
(without explicitly accounting for file gaps). This seems consistent with what 
sbsign is doing.
2. Then the final "extra data" region is defined as the range from efi + 
bytes_hashed up to the certificate table. This region will have non-zero length 
in case if there were gaps.
3. The start of "extra data" region will overlap with already added regions.
4. As a result, efi_image_region_add(..., nocheck=0) will reject this final 
region because of the detected overlap, so it is not included in the hashed 
region list. In contrast, sbsigntools still computes the hash including this 
final extra-data range, which leads to a mismatch and signature verification 
failure in U-Boot.

I'm not entirely sure - is this an issue on the U-Boot side? I reviewed the 
Authenticode specification (the PE/COFF hashing rules), but I did not find a 
clear description of how gaps between sections should be handled when computing 
the hashed regions. In practice, the way U-Boot computes the hash in this case 
it seems differs from how sbsigntools computes it. Would it make sense to 
include the final "extra data" region regardless of a potential overlap (i.e., 
using nocheck=1) so that verification remains consistent with the signing tools?

Thanks for your feedback.


More information about the U-Boot mailing list