diff --git a/man/bootctl.xml b/man/bootctl.xml
index f6218519c4..57455f2dac 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 4230d012be..57e851fa54 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 41b2c08f9a..e9526e87eb 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,