diff mbox series

[v7,12/12] (RFC) efi_loader, dts: add public keys for capsules to device tree

Message ID 20211116043238.67226-13-takahiro.akashi@linaro.org
State Superseded
Headers show
Series efi_loader: capsule: improve capsule authentication support | expand

Commit Message

AKASHI Takahiro Nov. 16, 2021, 4:32 a.m. UTC
By specifying CONFIG_EFI_CAPSULE_KEY_PATH, the build process will
automatically insert the given key into the device tree.
Otherwise, users are required to do so manually, possibly, with
the utility script, fdtsig.sh.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
 doc/develop/uefi/uefi.rst |  4 ++++
 dts/Makefile              | 23 +++++++++++++++++++++--
 lib/efi_loader/Kconfig    |  7 +++++++
 3 files changed, 32 insertions(+), 2 deletions(-)

Comments

Simon Glass Nov. 25, 2021, 12:11 a.m. UTC | #1
Hi Takahiro,

On Mon, 15 Nov 2021 at 21:33, AKASHI Takahiro
<takahiro.akashi@linaro.org> wrote:
>
> By specifying CONFIG_EFI_CAPSULE_KEY_PATH, the build process will
> automatically insert the given key into the device tree.
> Otherwise, users are required to do so manually, possibly, with
> the utility script, fdtsig.sh.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> ---
>  doc/develop/uefi/uefi.rst |  4 ++++
>  dts/Makefile              | 23 +++++++++++++++++++++--
>  lib/efi_loader/Kconfig    |  7 +++++++
>  3 files changed, 32 insertions(+), 2 deletions(-)
>

This should be handled by binman. I can create an etype for it if you like.

Regards,
Simon
AKASHI Takahiro Nov. 25, 2021, 2:21 a.m. UTC | #2
Hi Simon,

On Wed, Nov 24, 2021 at 05:11:49PM -0700, Simon Glass wrote:
> Hi Takahiro,
> 
> On Mon, 15 Nov 2021 at 21:33, AKASHI Takahiro
> <takahiro.akashi@linaro.org> wrote:
> >
> > By specifying CONFIG_EFI_CAPSULE_KEY_PATH, the build process will
> > automatically insert the given key into the device tree.
> > Otherwise, users are required to do so manually, possibly, with
> > the utility script, fdtsig.sh.
> >
> > Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> > ---
> >  doc/develop/uefi/uefi.rst |  4 ++++
> >  dts/Makefile              | 23 +++++++++++++++++++++--
> >  lib/efi_loader/Kconfig    |  7 +++++++
> >  3 files changed, 32 insertions(+), 2 deletions(-)
> >
> 
> This should be handled by binman. I can create an etype for it if you like.

Basically I'd defer to you, but I don't still understand
when and how binman be invoked in this particular use case.

> Regards,
> Simon
Simon Glass Dec. 7, 2021, 3:07 p.m. UTC | #3
Hi Takahiro,

On Wed, 24 Nov 2021 at 19:21, AKASHI Takahiro
<takahiro.akashi@linaro.org> wrote:
>
> Hi Simon,
>
> On Wed, Nov 24, 2021 at 05:11:49PM -0700, Simon Glass wrote:
> > Hi Takahiro,
> >
> > On Mon, 15 Nov 2021 at 21:33, AKASHI Takahiro
> > <takahiro.akashi@linaro.org> wrote:
> > >
> > > By specifying CONFIG_EFI_CAPSULE_KEY_PATH, the build process will
> > > automatically insert the given key into the device tree.
> > > Otherwise, users are required to do so manually, possibly, with
> > > the utility script, fdtsig.sh.
> > >
> > > Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
> > > ---
> > >  doc/develop/uefi/uefi.rst |  4 ++++
> > >  dts/Makefile              | 23 +++++++++++++++++++++--
> > >  lib/efi_loader/Kconfig    |  7 +++++++
> > >  3 files changed, 32 insertions(+), 2 deletions(-)
> > >
> >
> > This should be handled by binman. I can create an etype for it if you like.
>
> Basically I'd defer to you, but I don't still understand
> when and how binman be invoked in this particular use case.

OK I will give it a try. Basically we need to create an etype for
with, with a entry argument that specifies the key file. See

https://github.com/u-boot/u-boot/blob/master/tools/binman/etype/vblock.py

This one collects the data to sign, calls a tool to sign it, then puts
the signature in the entry.

It is really easy (TM).

Regards,
SImon
diff mbox series

Patch

diff --git a/doc/develop/uefi/uefi.rst b/doc/develop/uefi/uefi.rst
index 54fefd76f0f5..7f85b9e5a4a6 100644
--- a/doc/develop/uefi/uefi.rst
+++ b/doc/develop/uefi/uefi.rst
@@ -347,6 +347,7 @@  following config, in addition to the configs listed above for capsule
 update::
 
     CONFIG_EFI_CAPSULE_AUTHENTICATE=y
+    CONFIG_EFI_CAPSULE_KEY_PATH=<path to .esl cert>
 
 The public and private keys used for the signing process are generated
 and used by the steps highlighted below.
@@ -392,6 +393,9 @@  and used by the steps highlighted below.
                 };
         };
 
+   If CONFIG_EFI_CAPSULE_KEY_PATH is specified, the build process will
+   take care of it for you.
+
 Executing the boot manager
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/dts/Makefile b/dts/Makefile
index cb3111382959..6c5486719ecd 100644
--- a/dts/Makefile
+++ b/dts/Makefile
@@ -20,11 +20,30 @@  $(obj)/dt-$(SPL_NAME).dtb: dts/dt.dtb $(objtree)/tools/fdtgrep FORCE
 	mkdir -p $(dir $@)
 	$(call if_changed,fdtgrep)
 
+quiet_cmd_fdtsig = FDTSIG $@
+	cmd_fdtsig = \
+		cat $< > $@; \
+		$(srctree)/tools/fdtsig.sh \
+			$(patsubst "%",%,$(CONFIG_EFI_CAPSULE_KEY_PATH)) $@
+
+ifeq ($(CONFIG_EFI_CAPSULE_AUTHENTICATE),y)
+ifneq ($(patsubst "%",%,$(CONFIG_EFI_CAPSULE_KEY_PATH)),)
+DTB_ov := $(obj)/dt.dtb_ov
+
+$(obj)/dt.dtb_ov: $(DTB) FORCE
+	$(call if_changed,fdtsig)
+else
+DTB_ov := $(DTB)
+endif
+else
+DTB_ov := $(DTB)
+endif
+
 ifeq ($(CONFIG_OF_DTB_PROPS_REMOVE),y)
-$(obj)/dt.dtb: $(DTB) $(objtree)/tools/fdtgrep FORCE
+$(obj)/dt.dtb: $(DTB_ov) $(objtree)/tools/fdtgrep FORCE
 	$(call if_changed,fdt_rm_props)
 else
-$(obj)/dt.dtb: $(DTB) FORCE
+$(obj)/dt.dtb: $(DTB_ov) FORCE
 	$(call if_changed,shipped)
 endif
 
diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 700dc838ddb9..8c8d14d46433 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -209,6 +209,13 @@  config EFI_CAPSULE_AUTHENTICATE
 	  Select this option if you want to enable capsule
 	  authentication
 
+config EFI_CAPSULE_KEY_PATH
+	string "Path to .esl cert for capsule authentication"
+	depends on EFI_CAPSULE_AUTHENTICATE
+	help
+	  Provide the EFI signature list (esl) certificate used for capsule
+	  authentication
+
 config EFI_DEVICE_PATH_TO_TEXT
 	bool "Device path to text protocol"
 	default y