mailarchive of the ptxdist mailing list
 help / color / mirror / Atom feed
From: Michael Olbrich <m.olbrich@pengutronix.de>
To: ptxdist@pengutronix.de
Cc: Alexander Dahl <ada@thorsis.com>
Subject: Re: [ptxdist] [APPLIED] u-boot: Add option to load signed kernel FIT images
Date: Sat, 17 May 2025 00:02:53 +0200	[thread overview]
Message-ID: <20250516220253.221647-1-m.olbrich@pengutronix.de> (raw)
In-Reply-To: <20250513140641.4075870-3-ada@thorsis.com>

Thanks, applied as a4c386b34b25fa0c838797a533fc716b46c80dc0.

Michael

[sent from post-receive hook]

On Sat, 17 May 2025 00:02:53 +0200, Alexander Dahl <ada@thorsis.com> wrote:
> Requires U-Boot v2023.04 or later, certain options set in board config,
> and KERNEL_FIT_SIGNED enabled.  Algorithm "sha256,rsa4096" is hardcoded
> to the same value as harcoded in ptxd_make_image_fit_its() which is used
> by the kernel-fit package.
> 
> With those premises met, U-Boot Verified Boot is possible.  Tested with
> U-Boot v2024.04 on Microchip SAM9X60-Curiosity in custom layer on top of
> DistroKit-2024.06.0.
> 
>     Hit any key to stop autoboot:  0
>     8787737 bytes read in 391 ms (21.4 MiB/s)
>     ## Loading kernel from FIT Image at 22000000 ...
>        Using 'conf-microchip,sam9x60-curiosity' configuration
>        Verifying Hash Integrity ... sha256,rsa4096:image-kernel-fit+ OK
>        Trying 'kernel' kernel subimage
>          Description:  kernel
>          Type:         Kernel Image (no loading done)
>          Compression:  uncompressed
>          Data Start:   0x220000b4
>          Data Size:    8757936 Bytes = 8.4 MiB
>          Hash algo:    sha256
>          Hash value:   8c109fc75263329402c7ae63e3d47c18aabf67307ebc0023e88921227abc7cf3
>        Verifying Hash Integrity ... sha256+ OK
>     ## Loading fdt from FIT Image at 22000000 ...
>        Using 'conf-microchip,sam9x60-curiosity' configuration
>        Verifying Hash Integrity ... sha256,rsa4096:image-kernel-fit+ OK
>        Trying 'fdt-microchip,sam9x60-curiosity' fdt subimage
>          Description:  unavailable
>          Type:         Flat Device Tree
>          Compression:  uncompressed
>          Data Start:   0x2285a45c
>          Data Size:    27903 Bytes = 27.2 KiB
>          Architecture: ARM
>          Hash algo:    sha256
>          Hash value:   db2e8047b404f92cc7ca4f7b918be1191aab3ce33d574f046c0f1da959d3cbb2
>        Verifying Hash Integrity ... sha256+ OK
>        Booting using the fdt blob at 0x2285a45c
>     Working FDT set to 2285a45c
>        XIP Kernel Image (no loading done) to 220000b4
>        Loading Device Tree to 27b31000, end 27b3acfe ... OK
>     Working FDT set to 27b31000
> 
>     Starting kernel ...
> 
>     [    0.000000] Booting Linux on physical CPU 0x0
>     [    0.000000] Linux version 6.6.0-tt (ptxdist@ptxdist) (arm-v5te-linux-gnueabi-gcc (OSELAS.Toolchain-2023.07.1 13-20231118) 13.2.1 20231118, GNU ld (GNU Binutils) 2.40) #2 PREEMPT 2024-06-07T12:29:46+00:00
> 
> Link: https://docs.u-boot.org/en/latest/usage/fit/verified-boot.html
> Signed-off-by: Alexander Dahl <ada@thorsis.com>
> Message-Id: <20250513140641.4075870-3-ada@thorsis.com>
> Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
> 
> diff --git a/platforms/u-boot.in b/platforms/u-boot.in
> index 5ce7387e495d..d263135ca7e7 100644
> --- a/platforms/u-boot.in
> +++ b/platforms/u-boot.in
> @@ -7,6 +7,7 @@ config U_BOOT_DEPENDENCIES
>  menuconfig U_BOOT
>  	select U_BOOT_DEPENDENCIES
>  	select BOOTLOADER
> +	select CODE_SIGNING		if U_BOOT_VERIFY_SIGNATURE
>  	select HOST_SYSTEM_PYTHON3
>  	select HOST_OPENSSL		if U_BOOT_NEEDS_HOST_OPENSSL
>  	select HOST_GNUTLS		if U_BOOT_NEEDS_HOST_GNUTLS
> @@ -18,11 +19,11 @@ if U_BOOT
>  
>  config U_BOOT_VERSION
>  	string
> -	default "2019.01"
> +	default "2023.04"
>  	prompt "U-Boot version"
>  	help
> -	  Enter the U-Boot version you want to build. Usually something like
> -	  "2019.01".
> +	  Enter the U-Boot version you want to build.
> +	  Usually something like "2019.01".
>  
>  config U_BOOT_MD5
>  	string
> @@ -193,6 +194,29 @@ config U_BOOT_BOOT_SCRIPT_ROOTFS_PATH
>  
>  endif
>  
> +config U_BOOT_VERIFY_SIGNATURE
> +	bool
> +	prompt "Verify FIT image signature"
> +	select U_BOOT_NEEDS_HOST_OPENSSL
> +	imply KERNEL_FIT_SIGNED
> +	help
> +	  For U-Boot Verified Boot [1] a public key has to be put into
> +	  the control dtb built with U-Boot.
> +	  The loaded image (most probably a Linux Kernel image) must be
> +	  signed with the matching private key.
> +	  Uses the PTXdist Code Signing Infrastructure.
> +
> +	  Note: You need U-Boot 2023.04 or later.
> +
> +	  Note: You must enable CONFIG_TOOLS_FIT_SIGNATURE in U-Boot
> +		Kconfig for the necessary host mkimage features, and
> +		enable CONFIG_FIT_SIGNATURE, CONFIG_RSA, and
> +		CONFIG_ECDSA for runtime verification.
> +		Ensure you have _disabled_ CONFIG_LEGACY_IMAGE_FORMAT to
> +		not accidentally allow running unsigned images.
> +
> +	  [1] https://docs.u-boot.org/en/latest/usage/fit/verified-boot.html
> +
>  comment "target install"
>  
>  config U_BOOT_INSTALL_U_BOOT_BIN
> diff --git a/rules/u-boot.make b/rules/u-boot.make
> index 204475b7843b..d3ea65cf2a53 100644
> --- a/rules/u-boot.make
> +++ b/rules/u-boot.make
> @@ -120,6 +120,19 @@ endif
>  $(STATEDIR)/u-boot.compile:
>  	@$(call targetinfo)
>  	@$(call world/compile, U_BOOT)
> +ifdef PTXCONF_U_BOOT_VERIFY_SIGNATURE
> +	@mv $(U_BOOT_BUILD_DIR)/u-boot.dtb $(U_BOOT_BUILD_DIR)/u-boot-pubkey.dtb
> +	@$(CODE_SIGNING_ENV) $(U_BOOT_BUILD_DIR)/tools/mkimage \
> +		-f auto-conf -d /dev/null -r \
> +		-g image-kernel-fit -N pkcs11 -o "sha256,rsa4096" \
> +		-k "$(shell cs_get_uri image-kernel-fit)" \
> +		-K "$(U_BOOT_BUILD_DIR)/u-boot-pubkey.dtb" \
> +		$(U_BOOT_BUILD_DIR)/unused.itb
> +#	# retrigger building dts/dt.dtb to use EXT_DTB, might stay as is otherwise
> +	@rm $(U_BOOT_BUILD_DIR)/dts/dt.dtb
> +	@$(call compile, U_BOOT, $(U_BOOT_MAKE_OPT) EXT_DTB=$(U_BOOT_BUILD_DIR)/u-boot-pubkey.dtb)
> +endif
> +
>  ifdef PTXCONF_U_BOOT_BOOT_SCRIPT
>  	@$(U_BOOT_BUILD_DIR)/tools/mkimage -T script -C none \
>  		-d $(U_BOOT_BOOT_SCRIPT_TXT) \



      reply	other threads:[~2025-05-16 22:03 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-05-13 14:06 [ptxdist] [PATCH v1 0/2] u-boot: Add verified boot support Alexander Dahl via ptxdist
2025-05-13 14:06 ` [ptxdist] [PATCH v1 1/2] u-boot-tools: Version bump 2020.07 -> 2025.04 Alexander Dahl via ptxdist
2025-05-16 22:02   ` [ptxdist] [APPLIED] " Michael Olbrich
2025-05-13 14:06 ` [ptxdist] [PATCH v1 2/2] u-boot: Add option to load signed kernel FIT images Alexander Dahl via ptxdist
2025-05-16 22:02   ` Michael Olbrich [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=20250516220253.221647-1-m.olbrich@pengutronix.de \
    --to=m.olbrich@pengutronix.de \
    --cc=ada@thorsis.com \
    --cc=ptxdist@pengutronix.de \
    /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