From: Jeremy Linton <jeremy.linton@arm.com>
To: Ard Biesheuvel <ardb@kernel.org>, linux-efi@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Matthew Garrett <mjg59@srcf.ucam.org>,
Peter Jones <pjones@redhat.com>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Heinrich Schuchardt <heinrich.schuchardt@canonical.com>,
AKASHI Takahiro <takahiro.akashi@linaro.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Atish Patra <atishp@atishpatra.org>,
Arnd Bergmann <arnd@arndb.de>,
Huacai Chen <chenhuacai@loongson.cn>,
Xi Ruoyao <xry111@xry111.site>,
Lennart Poettering <lennart@poettering.net>,
Will Deacon <will@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>
Subject: Re: [PATCH v5 0/8] efi: implement generic compressed boot support
Date: Sun, 18 Sep 2022 21:22:22 -0500 [thread overview]
Message-ID: <a7bb4b9f-61bf-c951-19a6-5b099c399524@arm.com> (raw)
In-Reply-To: <20220910081152.2238369-1-ardb@kernel.org>
Hi,
With the BSS "fix" in grub for fedora/rhel, this is now working fine for
both systemd-boot and normal grub2, as well as booting directly from the
UEFI shell. Given both the magic number and the bss fix were merged at
the same time I don't think anyone should ever see the bad bss message,
at least not on the above distro's.
I've largely been testing this on the PFTF/RPi4, and in a libvirt
qemu/kvm env with/without ksan/etc on a mostly fedora configured kernel.
Hooking this up to kinstall makes sense and works, although i'm not a
big fan.
So, its looking good. All thumbs up here :)
Tested-by: Jeremy Linton <jeremy.linton@arm.com>
On 9/10/22 03:11, Ard Biesheuvel wrote:
> Relatively modern architectures such as arm64 or RISC-V don't implement
> a self-decompressing kernel, and leave it up to the bootloader to
> decompress the compressed image before executing it. For bare metal
> boot, this policy makes sense, as a self-decompressing image essentially
> duplicates a lot of fiddly preparation work to create a 1:1 mapping and
> set up the C runtime, and to discover or infer where DRAM lives from
> device trees or other firmware tables.
>
> For EFI boot, the situation is a bit different: the EFI entrypoint is
> called with a 1:1 cached mapping covering all of DRAM already active,
> and with a stack, a heap, a memory map and boot services to load and
> start images. This means it is rather trivial to implement a
> self-decompressing wrapper for EFI boot in a generic manner, and reuse
> it across architectures that implement EFI boot.
>
> The only slight downside is that when UEFI secure boot is enabled, the
> generic LoadImage/StartImage only allow signed images to be loaded and
> started, and we would prefer to avoid the need to sign both the inner
> and outer PE/COFF images.
>
> However, the only truly generic and portable way to achieve this is to
> rely on LoadImage/StartImage as the EFI spec defines them, and avoid
> making assumptions about how things might work under the hood, and how
> we might circumvent that. This includes just loading the image into
> memory and jumping to the PE entry point: in the context of secure boot,
> measured boot and other hardening measures the firmware may take (such
> as disallowing mappings that are both writable and executable), using
> the firmware's image loading API is the only maintainable choice.
>
> For this reason, this version of the series includes support for signing
> the images using sbsign, if the signing key and cert are specified in
> Kconfig.
>
> The code is wired up for arm64, LoongArch and RISC-V. The latter was
> build tested only.
>
> Changes since v4:
> - make CONFIG_EFI_ZBOOT user selectable again, and turn it on by default
> only for LoongArch
> - set KBUILD_IMAGE to vmlinuz.efi if CONFIG_EFI_ZBOOT=y, so that make
> targets such as zinstall and bindeb-pkg do the right thing
> - throw an error is BSS was not cleared by the loader - this is needed
> to detect broken distro implementations of LoadImage in shim and grub
> - add vmlinuz.* to .gitignore on the various architectures
> - switch back to defining uncompressed_size as 'extern __aligned(1)' so
> that the compiler will perform the unaligned access as appropriate on
> the architecture in question - this requires the latest binutils on
> LoongArch [0]
>
> Changes since v3:
> - add support for XZ and ZSTD compression
> - deal with exit data returned by StartImage()
> - use LoadFile2 based image loading instead of passing the raw buffer -
> this way, the provenance of the data is more visible, allowing us,
> for instance, to deal with initrd= on arm64 transparently (this means
> that systemd-boot on arm64 will work unmodified provided that the
> [deprecated] command line initrd loader is enabled in the kernel
> build)
> - include LoongArch support
> - rename compressed image to vmlinuz.efi on all architectures
>
> Changes since v2:
> - drop some of the refactoring work to make efi_printk() available in
> the decompressor, and just use fixed strings instead;
> - provide memcpy/memmove/memset based on the UEFI boot services, instead
> of having to specify for each architecture how to wire these up;
> - drop PI/DXE based signature check circumvention, and just sign the
> inner image instead, if needed;
> - add a header to the zimage binary that identifies it as a EFI zboot
> image, and describes the compression algorithm and where the payload
> lives in the image - this might be used by non-EFI loaders to locate
> and decompress the bare metal image, given that the EFI zboot one is
> not a hybrid like the one it encapsulates.
>
> [0] https://sourceware.org/pipermail/binutils/2022-September/122713.html
>
> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
> Cc: Matthew Garrett <mjg59@srcf.ucam.org>
> Cc: Peter Jones <pjones@redhat.com>
> Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
> Cc: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> Cc: AKASHI Takahiro <takahiro.akashi@linaro.org>
> Cc: Palmer Dabbelt <palmer@dabbelt.com>
> Cc: Atish Patra <atishp@atishpatra.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Huacai Chen <chenhuacai@loongson.cn>
> Cc: Xi Ruoyao <xry111@xry111.site>
> Cc: Lennart Poettering <lennart@poettering.net>
> Cc: Jeremy Linton <jeremy.linton@arm.com>
> Cc: Will Deacon <will@kernel.org>
> Cc: Catalin Marinas <catalin.marinas@arm.com>
>
> Ard Biesheuvel (8):
> efi: name the ARCH-stub.c files uniformly
> efi/libstub: add some missing EFI prototypes
> efi/libstub: use EFI provided memcpy/memset routines
> efi/libstub: move efi_system_table global var into separate object
> efi/libstub: implement generic EFI zboot
> arm64: efi: enable generic EFI compressed boot
> riscv: efi: enable generic EFI compressed boot
> loongarch: efi: enable generic EFI compressed boot
>
> arch/arm64/Makefile | 9 +-
> arch/arm64/boot/.gitignore | 1 +
> arch/arm64/boot/Makefile | 6 +
> arch/arm64/kernel/image-vars.h | 13 -
> arch/loongarch/Kconfig | 1 +
> arch/loongarch/Makefile | 4 +-
> arch/loongarch/boot/.gitignore | 1 +
> arch/loongarch/boot/Makefile | 6 +
> arch/loongarch/kernel/image-vars.h | 3 -
> arch/riscv/Makefile | 6 +-
> arch/riscv/boot/.gitignore | 1 +
> arch/riscv/boot/Makefile | 6 +
> arch/riscv/kernel/image-vars.h | 9 -
> drivers/firmware/efi/Kconfig | 38 +++
> drivers/firmware/efi/libstub/Makefile | 21 +-
> drivers/firmware/efi/libstub/Makefile.zboot | 70 +++++
> drivers/firmware/efi/libstub/{arm32-stub.c => arm-stub.c} | 0
> drivers/firmware/efi/libstub/efi-stub.c | 2 -
> drivers/firmware/efi/libstub/efistub.h | 35 ++-
> drivers/firmware/efi/libstub/file.c | 17 ++
> drivers/firmware/efi/libstub/intrinsics.c | 30 ++
> drivers/firmware/efi/libstub/systable.c | 8 +
> drivers/firmware/efi/libstub/zboot-header.S | 143 ++++++++++
> drivers/firmware/efi/libstub/zboot.c | 296 ++++++++++++++++++++
> drivers/firmware/efi/libstub/zboot.lds | 43 +++
> include/linux/efi.h | 13 +
> 26 files changed, 732 insertions(+), 50 deletions(-)
> create mode 100644 drivers/firmware/efi/libstub/Makefile.zboot
> rename drivers/firmware/efi/libstub/{arm32-stub.c => arm-stub.c} (100%)
> create mode 100644 drivers/firmware/efi/libstub/intrinsics.c
> create mode 100644 drivers/firmware/efi/libstub/systable.c
> create mode 100644 drivers/firmware/efi/libstub/zboot-header.S
> create mode 100644 drivers/firmware/efi/libstub/zboot.c
> create mode 100644 drivers/firmware/efi/libstub/zboot.lds
>
prev parent reply other threads:[~2022-09-19 2:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-10 8:11 [PATCH v5 0/8] efi: implement generic compressed boot support Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 1/8] efi: name the ARCH-stub.c files uniformly Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 2/8] efi/libstub: add some missing EFI prototypes Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 3/8] efi/libstub: use EFI provided memcpy/memset routines Ard Biesheuvel
2022-09-20 9:54 ` Catalin Marinas
2022-09-10 8:11 ` [PATCH v5 4/8] efi/libstub: move efi_system_table global var into separate object Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 5/8] efi/libstub: implement generic EFI zboot Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 6/8] arm64: efi: enable generic EFI compressed boot Ard Biesheuvel
2022-09-17 16:36 ` Ard Biesheuvel
2022-09-20 9:55 ` Catalin Marinas
2022-09-10 8:11 ` [PATCH v5 7/8] riscv: " Ard Biesheuvel
2022-09-16 7:09 ` Conor.Dooley
2022-09-16 7:15 ` Ard Biesheuvel
2022-09-10 8:11 ` [PATCH v5 8/8] loongarch: " Ard Biesheuvel
2022-09-10 14:21 ` 陈华才
2022-09-10 14:28 ` Ard Biesheuvel
2022-09-11 15:02 ` 陈华才
2022-09-12 10:18 ` Ard Biesheuvel
2022-09-12 14:45 ` 陈华才
2022-09-19 2:22 ` Jeremy Linton [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a7bb4b9f-61bf-c951-19a6-5b099c399524@arm.com \
--to=jeremy.linton@arm.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=atishp@atishpatra.org \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@loongson.cn \
--cc=heinrich.schuchardt@canonical.com \
--cc=ilias.apalodimas@linaro.org \
--cc=lennart@poettering.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mjg59@srcf.ucam.org \
--cc=palmer@dabbelt.com \
--cc=pjones@redhat.com \
--cc=takahiro.akashi@linaro.org \
--cc=will@kernel.org \
--cc=xry111@xry111.site \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox