[PATCH v12 5/8] test: Add sandbox TPM boot measurement

Ilias Apalodimas ilias.apalodimas at linaro.org
Thu Oct 19 15:33:10 CEST 2023


Hi Eddie,


On Thu, 19 Oct 2023 at 16:29, Eddie James <eajames at linux.ibm.com> wrote:
>
>
> On 10/13/23 12:22, Ilias Apalodimas wrote:
> > Hi Eddie,
> >
> > This doesn't apply on -master, can you please rebase?
>
>
> Ugh I thought you wanted -next... I can rebase again.

Yea by the time the patches were sent -next got merged into -master,
so I tried master now to include them into the 2024.01 release.
Apologies, if you don't mind please rebase

Thanks
/Ilias
>
>
> >
> > Thanks
> > /Ilias
> >
> > On Thu, 12 Oct 2023 at 16:49, Eddie James <eajames at linux.ibm.com> wrote:
> >> Use the sandbox TPM driver to measure some boot images in a unit
> >> test case.
> >>
> >> Signed-off-by: Eddie James <eajames at linux.ibm.com>
> >> Reviewed-by: Simon Glass <sjg at chromium.org>
> >> Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> >> ---
> >> Changes since v5:
> >>   - Only compile in the measurement u-boot command when
> >>     CONFIG_MEASURED_BOOT is enabled.
> >>
> >>   arch/sandbox/dts/sandbox.dtsi | 13 +++++++
> >>   arch/sandbox/dts/test.dts     | 13 +++++++
> >>   configs/sandbox_defconfig     |  1 +
> >>   include/test/suites.h         |  1 +
> >>   test/boot/Makefile            |  1 +
> >>   test/boot/measurement.c       | 66 +++++++++++++++++++++++++++++++++++
> >>   test/cmd_ut.c                 |  4 +++
> >>   7 files changed, 99 insertions(+)
> >>   create mode 100644 test/boot/measurement.c
> >>
> >> diff --git a/arch/sandbox/dts/sandbox.dtsi b/arch/sandbox/dts/sandbox.dtsi
> >> index ff7e5584c5..241f397ba6 100644
> >> --- a/arch/sandbox/dts/sandbox.dtsi
> >> +++ b/arch/sandbox/dts/sandbox.dtsi
> >> @@ -4,11 +4,23 @@
> >>    * and sandbox64 builds.
> >>    */
> >>
> >> +#include <config.h>
> >>   #include <dt-bindings/input/input.h>
> >>
> >>   #define USB_CLASS_HUB                  9
> >>
> >>   / {
> >> +       reserved-memory {
> >> +               #address-cells = <1>;
> >> +               #size-cells = <1>;
> >> +               ranges;
> >> +
> >> +               event_log: tcg_event_log {
> >> +                       no-map;
> >> +                       reg = <(CFG_SYS_SDRAM_SIZE - 0x2000) 0x2000>;
> >> +               };
> >> +       };
> >> +
> >>          binman {
> >>          };
> >>
> >> @@ -342,6 +354,7 @@
> >>
> >>          tpm2 {
> >>                  compatible = "sandbox,tpm2";
> >> +               memory-region = <&event_log>;
> >>          };
> >>
> >>          triangle {
> >> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> >> index 9a863ea732..bb2ddd9bf2 100644
> >> --- a/arch/sandbox/dts/test.dts
> >> +++ b/arch/sandbox/dts/test.dts
> >> @@ -9,6 +9,7 @@
> >>
> >>   /dts-v1/;
> >>
> >> +#include <config.h>
> >>   #include <dt-bindings/gpio/gpio.h>
> >>   #include <dt-bindings/gpio/sandbox-gpio.h>
> >>   #include <dt-bindings/input/input.h>
> >> @@ -68,6 +69,17 @@
> >>                  osd0 = "/osd";
> >>          };
> >>
> >> +       reserved-memory {
> >> +               #address-cells = <1>;
> >> +               #size-cells = <1>;
> >> +               ranges;
> >> +
> >> +               event_log: tcg_event_log {
> >> +                       no-map;
> >> +                       reg = <(CFG_SYS_SDRAM_SIZE - 0x2000) 0x2000>;
> >> +               };
> >> +       };
> >> +
> >>          binman: binman {
> >>          };
> >>
> >> @@ -1422,6 +1434,7 @@
> >>
> >>          tpm2 {
> >>                  compatible = "sandbox,tpm2";
> >> +               memory-region = <&event_log>;
> >>          };
> >>
> >>          tpm {
> >> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> >> index d667cb9ae4..12c387a77e 100644
> >> --- a/configs/sandbox_defconfig
> >> +++ b/configs/sandbox_defconfig
> >> @@ -349,3 +349,4 @@ CONFIG_UNIT_TEST=y
> >>   CONFIG_UT_TIME=y
> >>   CONFIG_UT_DM=y
> >>   CONFIG_ARM_FFA_TRANSPORT=y
> >> +CONFIG_MEASURED_BOOT=y
> >> diff --git a/include/test/suites.h b/include/test/suites.h
> >> index 1c7dc65966..48ed549c13 100644
> >> --- a/include/test/suites.h
> >> +++ b/include/test/suites.h
> >> @@ -45,6 +45,7 @@ int do_ut_font(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
> >>   int do_ut_lib(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
> >>   int do_ut_loadm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
> >>   int do_ut_log(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]);
> >> +int do_ut_measurement(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]);
> >>   int do_ut_mem(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
> >>   int do_ut_optee(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]);
> >>   int do_ut_overlay(struct cmd_tbl *cmdtp, int flag, int argc,
> >> diff --git a/test/boot/Makefile b/test/boot/Makefile
> >> index 52947580ae..068522cb9e 100644
> >> --- a/test/boot/Makefile
> >> +++ b/test/boot/Makefile
> >> @@ -4,6 +4,7 @@
> >>
> >>   obj-$(CONFIG_BOOTSTD) += bootdev.o bootstd_common.o bootflow.o bootmeth.o
> >>   obj-$(CONFIG_FIT) += image.o
> >> +obj-$(CONFIG_MEASURED_BOOT) += measurement.o
> >>
> >>   obj-$(CONFIG_EXPO) += expo.o
> >>   obj-$(CONFIG_CEDIT) += cedit.o
> >> diff --git a/test/boot/measurement.c b/test/boot/measurement.c
> >> new file mode 100644
> >> index 0000000000..9db2ed324c
> >> --- /dev/null
> >> +++ b/test/boot/measurement.c
> >> @@ -0,0 +1,66 @@
> >> +// SPDX-License-Identifier: GPL-2.0+
> >> +/*
> >> + * Test for measured boot functions
> >> + *
> >> + * Copyright 2023 IBM Corp.
> >> + * Written by Eddie James <eajames at linux.ibm.com>
> >> + */
> >> +
> >> +#include <common.h>
> >> +#include <bootm.h>
> >> +#include <malloc.h>
> >> +#include <test/suites.h>
> >> +#include <test/test.h>
> >> +#include <test/ut.h>
> >> +#include <asm/io.h>
> >> +
> >> +#define MEASUREMENT_TEST(_name, _flags)        \
> >> +       UNIT_TEST(_name, _flags, measurement_test)
> >> +
> >> +static int measure(struct unit_test_state *uts)
> >> +{
> >> +       struct bootm_headers images;
> >> +       const size_t size = 1024;
> >> +       u8 *kernel;
> >> +       u8 *initrd;
> >> +       size_t i;
> >> +
> >> +       kernel = malloc(size);
> >> +       initrd = malloc(size);
> >> +
> >> +       images.os.image_start = map_to_sysmem(kernel);
> >> +       images.os.image_len = size;
> >> +
> >> +       images.rd_start = map_to_sysmem(initrd);
> >> +       images.rd_end = images.rd_start + size;
> >> +
> >> +       images.ft_addr = malloc(size);
> >> +       images.ft_len = size;
> >> +
> >> +       env_set("bootargs", "measurement testing");
> >> +
> >> +       for (i = 0; i < size; ++i) {
> >> +               kernel[i] = 0xf0 | (i & 0xf);
> >> +               initrd[i] = (i & 0xf0) | 0xf;
> >> +               images.ft_addr[i] = i & 0xff;
> >> +       }
> >> +
> >> +       ut_assertok(bootm_measure(&images));
> >> +
> >> +       free(images.ft_addr);
> >> +       free(initrd);
> >> +       free(kernel);
> >> +
> >> +       return 0;
> >> +}
> >> +MEASUREMENT_TEST(measure, 0);
> >> +
> >> +int do_ut_measurement(struct cmd_tbl *cmdtp, int flag, int argc,
> >> +                     char *const argv[])
> >> +{
> >> +       struct unit_test *tests = UNIT_TEST_SUITE_START(measurement_test);
> >> +       const int n_ents = UNIT_TEST_SUITE_COUNT(measurement_test);
> >> +
> >> +       return cmd_ut_category("measurement", "measurement_test_", tests,
> >> +                              n_ents, argc, argv);
> >> +}
> >> diff --git a/test/cmd_ut.c b/test/cmd_ut.c
> >> index 0f56409e80..e87adcb71e 100644
> >> --- a/test/cmd_ut.c
> >> +++ b/test/cmd_ut.c
> >> @@ -99,6 +99,10 @@ static struct cmd_tbl cmd_ut_sub[] = {
> >>   #if CONFIG_IS_ENABLED(UT_UNICODE) && !defined(API_BUILD)
> >>          U_BOOT_CMD_MKENT(unicode, CONFIG_SYS_MAXARGS, 1, do_ut_unicode, "", ""),
> >>   #endif
> >> +#ifdef CONFIG_MEASURED_BOOT
> >> +       U_BOOT_CMD_MKENT(measurement, CONFIG_SYS_MAXARGS, 1, do_ut_measurement,
> >> +                        "", ""),
> >> +#endif
> >>   #ifdef CONFIG_SANDBOX
> >>          U_BOOT_CMD_MKENT(compression, CONFIG_SYS_MAXARGS, 1, do_ut_compression,
> >>                           "", ""),
> >> --
> >> 2.39.3
> >>


More information about the U-Boot mailing list