From 3e0a3a0259324b4c40a9a62c8506fe683cd0273b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 16 Jul 2024 11:27:19 +0200 Subject: [PATCH] bootctl: show whether a PE file is an addon in 'booctl kernel-identify' --- man/bootctl.xml | 3 ++- src/shared/kernel-image.c | 11 +++++++++++ src/shared/kernel-image.h | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/man/bootctl.xml b/man/bootctl.xml index f6218519c47..57455f2dacb 100644 --- a/man/bootctl.xml +++ b/man/bootctl.xml @@ -267,7 +267,8 @@ kernel Takes a kernel image as argument. Checks what kind of kernel the image is. Returns - one of uki, pe, and unknown. + one of uki, addon, pe, and + unknown. diff --git a/src/shared/kernel-image.c b/src/shared/kernel-image.c index 4230d012be9..57e851fa543 100644 --- a/src/shared/kernel-image.c +++ b/src/shared/kernel-image.c @@ -14,6 +14,7 @@ static const char * const kernel_image_type_table[_KERNEL_IMAGE_TYPE_MAX] = { [KERNEL_IMAGE_TYPE_UNKNOWN] = "unknown", [KERNEL_IMAGE_TYPE_UKI] = "uki", + [KERNEL_IMAGE_TYPE_ADDON] = "addon", [KERNEL_IMAGE_TYPE_PE] = "pe", }; @@ -159,6 +160,16 @@ int inspect_kernel( t = KERNEL_IMAGE_TYPE_UKI; goto done; + } else if (pe_is_addon(pe_header, sections)) { + r = inspect_uki(fd, pe_header, sections, ret_cmdline, ret_uname, /* ret_pretty_name= */ NULL); + if (r < 0) + return r; + + if (ret_pretty_name) + *ret_pretty_name = NULL; + + t = KERNEL_IMAGE_TYPE_ADDON; + goto done; } else t = KERNEL_IMAGE_TYPE_PE; diff --git a/src/shared/kernel-image.h b/src/shared/kernel-image.h index 41b2c08f9a6..e9526e87eba 100644 --- a/src/shared/kernel-image.h +++ b/src/shared/kernel-image.h @@ -8,6 +8,7 @@ typedef enum KernelImageType { KERNEL_IMAGE_TYPE_UNKNOWN, KERNEL_IMAGE_TYPE_UKI, + KERNEL_IMAGE_TYPE_ADDON, KERNEL_IMAGE_TYPE_PE, _KERNEL_IMAGE_TYPE_MAX, _KERNEL_IMAGE_TYPE_INVALID = -EINVAL, -- 2.47.3