diff mbox series

kernel-fit-image: Split signing variables

Message ID 20251016135758.32738-1-reatmon@ti.com
State New
Headers show
Series kernel-fit-image: Split signing variables | expand

Commit Message

Ryan Eatmon Oct. 16, 2025, 1:57 p.m. UTC
Right now all signing is done with a single variable: UBOOT_SIGN_ENABLE.
This has the side effect of not allowing for signing the fitImage while
not signing the uboot files.

This patch creates three new variables specific to KERNEL_FITIMAGE and
defaults them to the corresponding UBOOT variables.  That way all
existing code will remain the same, but we can selectively control just
signing the fitImage without also signing the uboot files.

Signed-off-by: Ryan Eatmon <reatmon@ti.com>
---
 meta/classes-recipe/kernel-fit-image.bbclass | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Adrian Freihofer Oct. 20, 2025, 6:39 a.m. UTC | #1
Am Do., 16. Okt. 2025 um 15:58 Uhr schrieb Ryan Eatmon via
lists.openembedded.org <reatmon=ti.com@lists.openembedded.org>:

> Right now all signing is done with a single variable: UBOOT_SIGN_ENABLE.
> This has the side effect of not allowing for signing the fitImage while
> not signing the uboot files.
>
> This patch creates three new variables specific to KERNEL_FITIMAGE and
> defaults them to the corresponding UBOOT variables.  That way all
> existing code will remain the same, but we can selectively control just
> signing the fitImage without also signing the uboot files.
>
> Signed-off-by: Ryan Eatmon <reatmon@ti.com>
> ---
>  meta/classes-recipe/kernel-fit-image.bbclass | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/meta/classes-recipe/kernel-fit-image.bbclass
> b/meta/classes-recipe/kernel-fit-image.bbclass
> index f04aee1807..29f4098ccc 100644
> --- a/meta/classes-recipe/kernel-fit-image.bbclass
> +++ b/meta/classes-recipe/kernel-fit-image.bbclass
> @@ -35,6 +35,10 @@ do_configure[noexec] = "1"
>  UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
>  KERNEL_IMAGEDEST ?= "/boot"
>
> +KERNEL_FITIMAGE_SIGN_ENABLE ?= "${UBOOT_SIGN_ENABLE}"
> +KERNEL_FITIMAGE_SIGN_KEYNAME ?= "${UBOOT_SIGN_KEYNAME}"
> +KERNEL_FITIMAGE_SIGN_KEYDIR ?= "${UBOOT_SIGN_KEYDIR}"
> +
>

This kind of introduces a new namespace KERNEL_FITIMAGE_.
However, there are already namespaces which we could re-use.
Would that be better?

FIT_KERNEL_SIGN_ENABLE ?= "${UBOOT_SIGN_ENABLE}"
FIT_KERNEL_SIGN_KEYNAME ?= "${UBOOT_SIGN_KEYNAME}"
FIT_KERNEL_SIGN_KEYDIR ?= "${UBOOT_SIGN_KEYDIR}"

It would also be interesting to understand your use case, because signing
the FIT
image usually requires a bootloader which can verify the signature at
run-time.
Your patch basically removes the deployment of the public key into
u-boot's DTB.
Do you use a different bootloader?

Regards
Adrian



>  python do_compile() {
>      import shutil
>      import oe.fitimage
> @@ -50,11 +54,11 @@ python do_compile() {
>      root_node = oe.fitimage.ItsNodeRootKernel(
>          d.getVar("FIT_DESC"), d.getVar("FIT_ADDRESS_CELLS"),
>          d.getVar('HOST_PREFIX'), d.getVar('UBOOT_ARCH'),
> d.getVar("FIT_CONF_PREFIX"),
> -        oe.types.boolean(d.getVar('UBOOT_SIGN_ENABLE')),
> d.getVar("UBOOT_SIGN_KEYDIR"),
> +        oe.types.boolean(d.getVar('KERNEL_FITIMAGE_SIGN_ENABLE')),
> d.getVar("KERNEL_FITIMAGE_SIGN_KEYDIR"),
>          d.getVar("UBOOT_MKIMAGE"), d.getVar("UBOOT_MKIMAGE_DTCOPTS"),
>          d.getVar("UBOOT_MKIMAGE_SIGN"),
> d.getVar("UBOOT_MKIMAGE_SIGN_ARGS"),
>          d.getVar('FIT_HASH_ALG'), d.getVar('FIT_SIGN_ALG'),
> d.getVar('FIT_PAD_ALG'),
> -        d.getVar('UBOOT_SIGN_KEYNAME'),
> +        d.getVar('KERNEL_FITIMAGE_SIGN_KEYNAME'),
>          oe.types.boolean(d.getVar('FIT_SIGN_INDIVIDUAL')),
> d.getVar('UBOOT_SIGN_IMG_KEYNAME')
>      )
>
> --
> 2.17.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#224965):
> https://lists.openembedded.org/g/openembedded-core/message/224965
> Mute This Topic: https://lists.openembedded.org/mt/115789309/4454582
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> adrian.freihofer@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>
Ryan Eatmon Oct. 20, 2025, 2:44 p.m. UTC | #2
On 10/20/2025 1:39 AM, Adrian Freihofer wrote:
> Am Do., 16. Okt. 2025 um 15:58 Uhr schrieb Ryan Eatmon via 
> lists.openembedded.org <http://lists.openembedded.org> 
> <reatmon=ti.com@lists.openembedded.org 
> <mailto:ti.com@lists.openembedded.org>>:
> 
>     Right now all signing is done with a single variable: UBOOT_SIGN_ENABLE.
>     This has the side effect of not allowing for signing the fitImage while
>     not signing the uboot files.
> 
>     This patch creates three new variables specific to KERNEL_FITIMAGE and
>     defaults them to the corresponding UBOOT variables.  That way all
>     existing code will remain the same, but we can selectively control just
>     signing the fitImage without also signing the uboot files.
> 
>     Signed-off-by: Ryan Eatmon <reatmon@ti.com <mailto:reatmon@ti.com>>
>     ---
>       meta/classes-recipe/kernel-fit-image.bbclass | 8 ++++++--
>       1 file changed, 6 insertions(+), 2 deletions(-)
> 
>     diff --git a/meta/classes-recipe/kernel-fit-image.bbclass b/meta/
>     classes-recipe/kernel-fit-image.bbclass
>     index f04aee1807..29f4098ccc 100644
>     --- a/meta/classes-recipe/kernel-fit-image.bbclass
>     +++ b/meta/classes-recipe/kernel-fit-image.bbclass
>     @@ -35,6 +35,10 @@ do_configure[noexec] = "1"
>       UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
>       KERNEL_IMAGEDEST ?= "/boot"
> 
>     +KERNEL_FITIMAGE_SIGN_ENABLE ?= "${UBOOT_SIGN_ENABLE}"
>     +KERNEL_FITIMAGE_SIGN_KEYNAME ?= "${UBOOT_SIGN_KEYNAME}"
>     +KERNEL_FITIMAGE_SIGN_KEYDIR ?= "${UBOOT_SIGN_KEYDIR}"
>     +
> 
> 
> This kind of introduces a new namespace KERNEL_FITIMAGE_.
> However, there are already namespaces which we could re-use.
> Would that be better?
> 
> FIT_KERNEL_SIGN_ENABLE ?= "${UBOOT_SIGN_ENABLE}"
> FIT_KERNEL_SIGN_KEYNAME ?= "${UBOOT_SIGN_KEYNAME}"
> FIT_KERNEL_SIGN_KEYDIR ?= "${UBOOT_SIGN_KEYDIR}"

I'm fine with that.  I'll send a v2.


> It would also be interesting to understand your use case, because 
> signing the FIT
> image usually requires a bootloader which can verify the signature at 
> run-time.
> Your patch basically removes the deployment of the public key into u- 
> boot's DTB.
> Do you use a different bootloader?

We are using u-boot, but we are making use of the UBOOT_CONFIG flow to 
build multiple versions of the u-boot files at the same time.  Sometimes 
we build different configs, sometimes we just want to change the make 
command line options when building the same config.  In the UBOOT_CONFIG 
flow, the last variation in the list because the "default" variation for 
the main uboot files and what aligns with the fitImage as the "default" 
out of the build.

We then use the individual files in our testing by uploading the image 
files over uart to our boards and booting from there.

Second piece of background, our u-boot files are all signed by the 
binman flow within the u-boot build process.  So oe-core signing them a 
second time is not needed.

In this specific case, one variation we are trying to build is our main 
config but sign all of the files using a different key type (ecdsa) to 
test out that our board and software work correctly.  But we ran into 
the problem that UBOOT_SIGN_ENABLE was re-signing the files using the 
"default" key and not the key that we had already signed them with.

So we need the fitImage signing for the default set of files, but we do 
not want the u-boot file signing since they are already signed by the 
u-boot build itself.

Hope that helps clarify...
diff mbox series

Patch

diff --git a/meta/classes-recipe/kernel-fit-image.bbclass b/meta/classes-recipe/kernel-fit-image.bbclass
index f04aee1807..29f4098ccc 100644
--- a/meta/classes-recipe/kernel-fit-image.bbclass
+++ b/meta/classes-recipe/kernel-fit-image.bbclass
@@ -35,6 +35,10 @@  do_configure[noexec] = "1"
 UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
 KERNEL_IMAGEDEST ?= "/boot"
 
+KERNEL_FITIMAGE_SIGN_ENABLE ?= "${UBOOT_SIGN_ENABLE}"
+KERNEL_FITIMAGE_SIGN_KEYNAME ?= "${UBOOT_SIGN_KEYNAME}"
+KERNEL_FITIMAGE_SIGN_KEYDIR ?= "${UBOOT_SIGN_KEYDIR}"
+
 python do_compile() {
     import shutil
     import oe.fitimage
@@ -50,11 +54,11 @@  python do_compile() {
     root_node = oe.fitimage.ItsNodeRootKernel(
         d.getVar("FIT_DESC"), d.getVar("FIT_ADDRESS_CELLS"),
         d.getVar('HOST_PREFIX'), d.getVar('UBOOT_ARCH'),  d.getVar("FIT_CONF_PREFIX"),
-        oe.types.boolean(d.getVar('UBOOT_SIGN_ENABLE')), d.getVar("UBOOT_SIGN_KEYDIR"),
+        oe.types.boolean(d.getVar('KERNEL_FITIMAGE_SIGN_ENABLE')), d.getVar("KERNEL_FITIMAGE_SIGN_KEYDIR"),
         d.getVar("UBOOT_MKIMAGE"), d.getVar("UBOOT_MKIMAGE_DTCOPTS"),
         d.getVar("UBOOT_MKIMAGE_SIGN"), d.getVar("UBOOT_MKIMAGE_SIGN_ARGS"),
         d.getVar('FIT_HASH_ALG'), d.getVar('FIT_SIGN_ALG'), d.getVar('FIT_PAD_ALG'),
-        d.getVar('UBOOT_SIGN_KEYNAME'),
+        d.getVar('KERNEL_FITIMAGE_SIGN_KEYNAME'),
         oe.types.boolean(d.getVar('FIT_SIGN_INDIVIDUAL')), d.getVar('UBOOT_SIGN_IMG_KEYNAME')
     )