]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
efi/zboot: Limit compression options to GZIP and ZSTD
authorArd Biesheuvel <ardb@kernel.org>
Fri, 6 Dec 2024 10:41:40 +0000 (11:41 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Fri, 6 Dec 2024 15:59:56 +0000 (16:59 +0100)
For historical reasons, the legacy decompressor code on various
architectures supports 7 different compression types for the compressed
kernel image.

EFI zboot is not a compression library museum, and so the options can be
limited to what is likely to be useful in practice:

- GZIP is tried and tested, and is still one of the fastest at
  decompression time, although the compression ratio is not very high;
  moreover, Fedora is already shipping EFI zboot kernels for arm64 that
  use GZIP, and QEMU implements direct support for it when booting a
  kernel without firmware loaded;

- ZSTD has a very high compression ratio (although not the highest), and
  is almost as fast as GZIP at decompression time.

Reducing the number of options makes it less of a hassle for other
consumers of the EFI zboot format (such as QEMU today, and kexec in the
future) to support it transparently without having to carry 7 different
decompression libraries.

Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/Kconfig
drivers/firmware/efi/libstub/Makefile.zboot

index e312d731f4a36e98b105cfae3452f43ae6c674b1..5fe61b9ab5f969ca4fd9c15b0528f03824f9d62f 100644 (file)
@@ -76,10 +76,6 @@ config EFI_ZBOOT
        bool "Enable the generic EFI decompressor"
        depends on EFI_GENERIC_STUB && !ARM
        select HAVE_KERNEL_GZIP
-       select HAVE_KERNEL_LZ4
-       select HAVE_KERNEL_LZMA
-       select HAVE_KERNEL_LZO
-       select HAVE_KERNEL_XZ
        select HAVE_KERNEL_ZSTD
        help
          Create the bootable image as an EFI application that carries the
index 65ffd0b760b2fb46c058da7c89b68300c001e912..48842b5c106b83a26cfc7fd7e2dfe95f85a289e4 100644 (file)
@@ -12,22 +12,16 @@ quiet_cmd_copy_and_pad = PAD     $@
 $(obj)/vmlinux.bin: $(obj)/$(EFI_ZBOOT_PAYLOAD) FORCE
        $(call if_changed,copy_and_pad)
 
-comp-type-$(CONFIG_KERNEL_GZIP)                := gzip
-comp-type-$(CONFIG_KERNEL_LZ4)         := lz4
-comp-type-$(CONFIG_KERNEL_LZMA)                := lzma
-comp-type-$(CONFIG_KERNEL_LZO)         := lzo
-comp-type-$(CONFIG_KERNEL_XZ)          := xzkern
-comp-type-$(CONFIG_KERNEL_ZSTD)                := zstd22
-
 # in GZIP, the appended le32 carrying the uncompressed size is part of the
 # format, but in other cases, we just append it at the end for convenience,
 # causing the original tools to complain when checking image integrity.
-# So disregard it when calculating the payload size in the zimage header.
-zboot-method-y                         := $(comp-type-y)_with_size
-zboot-size-len-y                       := 4
+comp-type-y                            := gzip
+zboot-method-y                         := gzip
+zboot-size-len-y                       := 0
 
-zboot-method-$(CONFIG_KERNEL_GZIP)     := gzip
-zboot-size-len-$(CONFIG_KERNEL_GZIP)   := 0
+comp-type-$(CONFIG_KERNEL_ZSTD)                := zstd
+zboot-method-$(CONFIG_KERNEL_ZSTD)     := zstd22_with_size
+zboot-size-len-$(CONFIG_KERNEL_ZSTD)   := 4
 
 $(obj)/vmlinuz: $(obj)/vmlinux.bin FORCE
        $(call if_changed,$(zboot-method-y))