Commit 0b2c29fb authored by Ard Biesheuvel's avatar Ard Biesheuvel
Browse files

efi/zboot: Limit compression options to GZIP and ZSTD



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: default avatarGerd Hoffmann <kraxel@redhat.com>
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
parent 40384c84
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -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
+6 −12
Original line number Diff line number Diff line
@@ -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))