On 7/10/26 15:23, Ian Mullins wrote:
This series implements the EFI_SECURITY_ARCH_PROTOCOL and
EFI_SECURITY2_ARCH_PROTOCOL. The primary motivation is to support EFI
applications like systemd-stub in Unified Kernel Images (UKI) so they
can temporarily override authentication for embedded payloads.
Note: This work was originally authored by Enric Balletbo i Serra.
I am submitting it upstream on his behalf with additional testing.
Consumption of these protocols by EFI applications does not conform to
the UEFI specification.
Chapter 1.4 Goals has this sentence:
"On the other hand, firmware-internal interfaces, such as those defined
by the PI Specification, are produced and consumed by firmware only, and
are not considered interfaces that a UEFI aware OS can connect to,
interact with, or depend on."
Neither the PI nor the UEFI specification indicate that overwriting
pointers to the EFI_SECURITY_ARCH_PROTOCOL or
EFI_SECURITY2_ARCH_PROTOCOL at boot time shall influence which images
LoadImage() accepts. What systemd uses is undocumented behavior of EDK II.
The correct way forward is to fix systemd and Linux' EFI_ZBOOT stub to
make them comply with the UEFI specification.
See this mail by Lennart Poettering:
https://lists.freedesktop.org/archives/systemd-devel/2025-March/051313.html
Best regards
Heinrich
---
Testing Performed
I have validated these patches across various secure boot scenarios on
both physical hardware and emulators to ensure the new overrides work
without regressing standard secure boot enforcement.
Hardware: Renesas R-Car S4 (EBBR UKI boot)
- [PASS] Unsigned image, Secure Boot disabled, without patch
(Boots)
- [PASS] Unsigned image, Secure Boot compiled (not enforcing),
without patch (Boots)
- [PASS] Signed image, Secure Boot enforcing, without patch
(Fails to boot as expected)
- [PASS] Signed image, Secure Boot enforcing, with patch
(Boots successfully)
- [PASS] Signed image (wrong keys), Secure Boot enforcing, with patch
(Fails to boot as expected)
Emulator: QEMU (qemu UKI boot)
- [PASS] Unsigned image, Secure Boot disabled, without patch
(Boots)
- [PASS] Unsigned image, Secure Boot enabled, without patch
(Boots)
- [PASS] Signed image, Secure Boot enabled, without patch
(Fails to boot as expected)
- [PASS] Signed image, Secure Boot enabled, with patch
(Boots successfully)
Signed-off-by: Ian Mullins <[email protected]>
---
Enric Balletbo i Serra (2):
efi_loader: implement EFI Security Architecture protocols
efi_selftest: add tests for security architecture protocols
include/efi_api.h | 30 +++
include/efi_loader.h | 15 +-
lib/efi_loader/Kconfig | 11 ++
lib/efi_loader/Makefile | 1 +
lib/efi_loader/efi_boottime.c | 3 +-
lib/efi_loader/efi_image_loader.c | 31 ++-
lib/efi_loader/efi_security.c | 99 ++++++++++
lib/efi_loader/efi_setup.c | 7 +
lib/efi_selftest/Makefile | 1 +
lib/efi_selftest/efi_selftest_security_arch.c | 110 +++++++++++
.../py/tests/test_efi_secboot/README.security_arch | 208 +++++++++++++++++++++
.../tests/test_efi_secboot/test_security_arch.py | 73 ++++++++
12 files changed, 580 insertions(+), 9 deletions(-)
---
base-commit: 913fedc816570c07bfc7f9c4046dc2a3a55e4099
change-id: 20260710-efi_security_protocol-6b9fb0e8da41
Best regards,