mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-23 13:36:05 +00:00
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
This commit is contained in:
commit
be1d3a1a85
7 changed files with 46 additions and 7 deletions
|
@ -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
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <common/debug.h>
|
#include <common/debug.h>
|
||||||
|
#include <common/tf_crc32.h>
|
||||||
#include <drivers/io/io_storage.h>
|
#include <drivers/io/io_storage.h>
|
||||||
#include <drivers/partition/efi.h>
|
#include <drivers/partition/efi.h>
|
||||||
#include <drivers/partition/partition.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.
|
* If partition numbers could be found, check & update it.
|
||||||
*/
|
*/
|
||||||
static int load_gpt_header(uintptr_t image_handle)
|
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;
|
gpt_header_t header;
|
||||||
size_t bytes_read;
|
size_t bytes_read;
|
||||||
int result;
|
int result;
|
||||||
|
uint32_t header_crc, calc_crc;
|
||||||
|
|
||||||
result = io_seek(image_handle, IO_SEEK_SET, GPT_HEADER_OFFSET);
|
result = io_seek(image_handle, IO_SEEK_SET, GPT_HEADER_OFFSET);
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
|
@ -99,6 +101,23 @@ static int load_gpt_header(uintptr_t image_handle)
|
||||||
return -EINVAL;
|
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 */
|
/* partition numbers can't exceed PLAT_PARTITION_MAX_ENTRIES */
|
||||||
list.entry_count = header.list_num;
|
list.entry_count = header.list_num;
|
||||||
if (list.entry_count > PLAT_PARTITION_MAX_ENTRIES) {
|
if (list.entry_count > PLAT_PARTITION_MAX_ENTRIES) {
|
||||||
|
|
|
@ -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
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -29,6 +29,8 @@ CASSERT((PLAT_PARTITION_BLOCK_SIZE == 512) ||
|
||||||
|
|
||||||
#define LEGACY_PARTITION_BLOCK_SIZE 512
|
#define LEGACY_PARTITION_BLOCK_SIZE 512
|
||||||
|
|
||||||
|
#define DEFAULT_GPT_HEADER_SIZE 92
|
||||||
|
|
||||||
typedef struct partition_entry {
|
typedef struct partition_entry {
|
||||||
uint64_t start;
|
uint64_t start;
|
||||||
uint64_t length;
|
uint64_t length;
|
||||||
|
|
|
@ -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
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
@ -95,6 +95,10 @@ ifeq (${SPD},opteed)
|
||||||
BL2_SOURCES += lib/optee/optee_utils.c
|
BL2_SOURCES += lib/optee/optee_utils.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
include lib/zlib/zlib.mk
|
||||||
|
PLAT_INCLUDES += -Ilib/zlib
|
||||||
|
BL2_SOURCES += $(ZLIB_SOURCES)
|
||||||
|
|
||||||
HIKEY_GIC_SOURCES := drivers/arm/gic/common/gic_common.c \
|
HIKEY_GIC_SOURCES := drivers/arm/gic/common/gic_common.c \
|
||||||
drivers/arm/gic/v2/gicv2_main.c \
|
drivers/arm/gic/v2/gicv2_main.c \
|
||||||
drivers/arm/gic/v2/gicv2_helpers.c \
|
drivers/arm/gic/v2/gicv2_helpers.c \
|
||||||
|
|
|
@ -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
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
#
|
#
|
||||||
|
@ -94,6 +94,10 @@ ifeq (${SPD},opteed)
|
||||||
BL2_SOURCES += lib/optee/optee_utils.c
|
BL2_SOURCES += lib/optee/optee_utils.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
include lib/zlib/zlib.mk
|
||||||
|
PLAT_INCLUDES += -Ilib/zlib
|
||||||
|
BL2_SOURCES += $(ZLIB_SOURCES)
|
||||||
|
|
||||||
BL31_SOURCES += drivers/arm/cci/cci.c \
|
BL31_SOURCES += drivers/arm/cci/cci.c \
|
||||||
drivers/arm/pl061/pl061_gpio.c \
|
drivers/arm/pl061/pl061_gpio.c \
|
||||||
drivers/gpio/gpio.c \
|
drivers/gpio/gpio.c \
|
||||||
|
|
|
@ -56,6 +56,10 @@ BL2_SOURCES += \
|
||||||
plat/intel/soc/common/drivers/qspi/cadence_qspi.c \
|
plat/intel/soc/common/drivers/qspi/cadence_qspi.c \
|
||||||
plat/intel/soc/common/drivers/wdt/watchdog.c
|
plat/intel/soc/common/drivers/wdt/watchdog.c
|
||||||
|
|
||||||
|
include lib/zlib/zlib.mk
|
||||||
|
PLAT_INCLUDES += -Ilib/zlib
|
||||||
|
BL2_SOURCES += $(ZLIB_SOURCES)
|
||||||
|
|
||||||
BL31_SOURCES += \
|
BL31_SOURCES += \
|
||||||
drivers/arm/cci/cci.c \
|
drivers/arm/cci/cci.c \
|
||||||
lib/cpus/aarch64/aem_generic.S \
|
lib/cpus/aarch64/aem_generic.S \
|
||||||
|
|
|
@ -55,6 +55,10 @@ BL2_SOURCES += \
|
||||||
plat/intel/soc/common/drivers/qspi/cadence_qspi.c \
|
plat/intel/soc/common/drivers/qspi/cadence_qspi.c \
|
||||||
plat/intel/soc/common/drivers/wdt/watchdog.c
|
plat/intel/soc/common/drivers/wdt/watchdog.c
|
||||||
|
|
||||||
|
include lib/zlib/zlib.mk
|
||||||
|
PLAT_INCLUDES += -Ilib/zlib
|
||||||
|
BL2_SOURCES += $(ZLIB_SOURCES)
|
||||||
|
|
||||||
BL31_SOURCES += \
|
BL31_SOURCES += \
|
||||||
drivers/arm/cci/cci.c \
|
drivers/arm/cci/cci.c \
|
||||||
lib/cpus/aarch64/aem_generic.S \
|
lib/cpus/aarch64/aem_generic.S \
|
||||||
|
|
|
@ -320,12 +320,14 @@ BL2_SOURCES += drivers/io/io_dummy.c \
|
||||||
plat/st/stm32mp1/stm32mp1_security.c
|
plat/st/stm32mp1/stm32mp1_security.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq (${PSA_FWU_SUPPORT},1)
|
|
||||||
include lib/zlib/zlib.mk
|
include lib/zlib/zlib.mk
|
||||||
|
|
||||||
|
ifeq (${PSA_FWU_SUPPORT},1)
|
||||||
include drivers/fwu/fwu.mk
|
include drivers/fwu/fwu.mk
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
BL2_SOURCES += $(ZLIB_SOURCES)
|
BL2_SOURCES += $(ZLIB_SOURCES)
|
||||||
endif
|
|
||||||
|
|
||||||
BL2_SOURCES += drivers/io/io_block.c \
|
BL2_SOURCES += drivers/io/io_block.c \
|
||||||
drivers/io/io_mtd.c \
|
drivers/io/io_mtd.c \
|
||||||
|
|
Loading…
Add table
Reference in a new issue