diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2022-05-19 16:04:39 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2022-05-19 16:04:39 +0200 |
commit | be1d3a1a859c34dfdeb623fe7b7ff705c16185fc (patch) | |
tree | 6251831261d26faec934b9642dfd0131d58961fb | |
parent | 0a9a0edf98d3ce83e5578e6261d81b45a0dc1ed9 (diff) | |
parent | a283d19f82ddb635d9d9fa061e7fd956167ebe60 (diff) | |
download | trusted-firmware-a-be1d3a1a859c34dfdeb623fe7b7ff705c16185fc.tar.gz |
Merge changes from topic "gpt-crc" into integration
* changes:
feat(partition): verify crc while loading gpt header
build(hikey): platform changes for verifying gpt header crc
build(agilex): platform changes for verifying gpt header crc
build(stratix10): platform changes for verifying gpt header crc
build(stm32mp1): platform changes for verifying gpt header crc
-rw-r--r-- | drivers/partition/partition.c | 23 | ||||
-rw-r--r-- | include/drivers/partition/partition.h | 4 | ||||
-rw-r--r-- | plat/hisilicon/hikey/platform.mk | 6 | ||||
-rw-r--r-- | plat/hisilicon/hikey960/platform.mk | 6 | ||||
-rw-r--r-- | plat/intel/soc/agilex/platform.mk | 4 | ||||
-rw-r--r-- | plat/intel/soc/stratix10/platform.mk | 4 | ||||
-rw-r--r-- | plat/st/stm32mp1/platform.mk | 6 |
7 files changed, 46 insertions, 7 deletions
diff --git a/drivers/partition/partition.c b/drivers/partition/partition.c index 7706f88aff..c84816f41d 100644 --- a/drivers/partition/partition.c +++ b/drivers/partition/partition.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -10,6 +10,7 @@ #include <string.h> #include <common/debug.h> +#include <common/tf_crc32.h> #include <drivers/io/io_storage.h> #include <drivers/partition/efi.h> #include <drivers/partition/partition.h> @@ -76,7 +77,7 @@ static int load_mbr_header(uintptr_t image_handle, mbr_entry_t *mbr_entry) } /* - * Load GPT header and check the GPT signature. + * Load GPT header and check the GPT signature and header CRC. * If partition numbers could be found, check & update it. */ static int load_gpt_header(uintptr_t image_handle) @@ -84,6 +85,7 @@ static int load_gpt_header(uintptr_t image_handle) gpt_header_t header; size_t bytes_read; int result; + uint32_t header_crc, calc_crc; result = io_seek(image_handle, IO_SEEK_SET, GPT_HEADER_OFFSET); if (result != 0) { @@ -99,6 +101,23 @@ static int load_gpt_header(uintptr_t image_handle) return -EINVAL; } + /* + * UEFI Spec 2.8 March 2019 Page 119: HeaderCRC32 value is + * computed by setting this field to 0, and computing the + * 32-bit CRC for HeaderSize bytes. + */ + header_crc = header.header_crc; + header.header_crc = 0U; + + calc_crc = tf_crc32(0U, (uint8_t *)&header, DEFAULT_GPT_HEADER_SIZE); + if (header_crc != calc_crc) { + ERROR("Invalid GPT Header CRC: Expected 0x%x but got 0x%x.\n", + header_crc, calc_crc); + return -EINVAL; + } + + header.header_crc = header_crc; + /* partition numbers can't exceed PLAT_PARTITION_MAX_ENTRIES */ list.entry_count = header.list_num; if (list.entry_count > PLAT_PARTITION_MAX_ENTRIES) { diff --git a/include/drivers/partition/partition.h b/include/drivers/partition/partition.h index b292ec7b22..11e5acf724 100644 --- a/include/drivers/partition/partition.h +++ b/include/drivers/partition/partition.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2016-2022, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -29,6 +29,8 @@ CASSERT((PLAT_PARTITION_BLOCK_SIZE == 512) || #define LEGACY_PARTITION_BLOCK_SIZE 512 +#define DEFAULT_GPT_HEADER_SIZE 92 + typedef struct partition_entry { uint64_t start; uint64_t length; diff --git a/plat/hisilicon/hikey/platform.mk b/plat/hisilicon/hikey/platform.mk index 18197cf4d9..3e1771c66a 100644 --- a/plat/hisilicon/hikey/platform.mk +++ b/plat/hisilicon/hikey/platform.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -95,6 +95,10 @@ ifeq (${SPD},opteed) BL2_SOURCES += lib/optee/optee_utils.c endif +include lib/zlib/zlib.mk +PLAT_INCLUDES += -Ilib/zlib +BL2_SOURCES += $(ZLIB_SOURCES) + HIKEY_GIC_SOURCES := drivers/arm/gic/common/gic_common.c \ drivers/arm/gic/v2/gicv2_main.c \ drivers/arm/gic/v2/gicv2_helpers.c \ diff --git a/plat/hisilicon/hikey960/platform.mk b/plat/hisilicon/hikey960/platform.mk index fc2c209f8e..608fe0937a 100644 --- a/plat/hisilicon/hikey960/platform.mk +++ b/plat/hisilicon/hikey960/platform.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2017-2022, ARM Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -94,6 +94,10 @@ ifeq (${SPD},opteed) BL2_SOURCES += lib/optee/optee_utils.c endif +include lib/zlib/zlib.mk +PLAT_INCLUDES += -Ilib/zlib +BL2_SOURCES += $(ZLIB_SOURCES) + BL31_SOURCES += drivers/arm/cci/cci.c \ drivers/arm/pl061/pl061_gpio.c \ drivers/gpio/gpio.c \ diff --git a/plat/intel/soc/agilex/platform.mk b/plat/intel/soc/agilex/platform.mk index 6fe0be19d7..ccb4e071f0 100644 --- a/plat/intel/soc/agilex/platform.mk +++ b/plat/intel/soc/agilex/platform.mk @@ -56,6 +56,10 @@ BL2_SOURCES += \ plat/intel/soc/common/drivers/qspi/cadence_qspi.c \ plat/intel/soc/common/drivers/wdt/watchdog.c +include lib/zlib/zlib.mk +PLAT_INCLUDES += -Ilib/zlib +BL2_SOURCES += $(ZLIB_SOURCES) + BL31_SOURCES += \ drivers/arm/cci/cci.c \ lib/cpus/aarch64/aem_generic.S \ diff --git a/plat/intel/soc/stratix10/platform.mk b/plat/intel/soc/stratix10/platform.mk index 8b39b6ff83..5c0b421468 100644 --- a/plat/intel/soc/stratix10/platform.mk +++ b/plat/intel/soc/stratix10/platform.mk @@ -55,6 +55,10 @@ BL2_SOURCES += \ plat/intel/soc/common/drivers/qspi/cadence_qspi.c \ plat/intel/soc/common/drivers/wdt/watchdog.c +include lib/zlib/zlib.mk +PLAT_INCLUDES += -Ilib/zlib +BL2_SOURCES += $(ZLIB_SOURCES) + BL31_SOURCES += \ drivers/arm/cci/cci.c \ lib/cpus/aarch64/aem_generic.S \ diff --git a/plat/st/stm32mp1/platform.mk b/plat/st/stm32mp1/platform.mk index 9e679899f4..127e3183b3 100644 --- a/plat/st/stm32mp1/platform.mk +++ b/plat/st/stm32mp1/platform.mk @@ -320,12 +320,14 @@ BL2_SOURCES += drivers/io/io_dummy.c \ plat/st/stm32mp1/stm32mp1_security.c endif -ifeq (${PSA_FWU_SUPPORT},1) include lib/zlib/zlib.mk + +ifeq (${PSA_FWU_SUPPORT},1) include drivers/fwu/fwu.mk +endif + BL2_SOURCES += $(ZLIB_SOURCES) -endif BL2_SOURCES += drivers/io/io_block.c \ drivers/io/io_mtd.c \ |