From patchwork Thu Aug 29 11:05:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: bence.balogh@arm.com X-Patchwork-Id: 48452 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 24E46C83F05 for ; Thu, 29 Aug 2024 11:05:24 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web10.10177.1724929517132920861 for ; Thu, 29 Aug 2024 04:05:17 -0700 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: bence.balogh@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id DCAB7DA7; Thu, 29 Aug 2024 04:05:42 -0700 (PDT) Received: from e126523.budapest.arm.com (e126523.budapest.arm.com [10.45.26.188]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E05923F8A4; Thu, 29 Aug 2024 04:05:14 -0700 (PDT) From: bence.balogh@arm.com To: meta-arm@lists.yoctoproject.org Cc: Bence Balogh Subject: [PATCH 1/3] arm-bsp/trusted-firmware-m: corstone1000: add Secure Debug Date: Thu, 29 Aug 2024 13:05:03 +0200 Message-Id: <20240829110505.55826-2-bence.balogh@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240829110505.55826-1-bence.balogh@arm.com> References: <20240829110505.55826-1-bence.balogh@arm.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Thu, 29 Aug 2024 11:05:24 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/meta-arm/message/6007 From: Bence Balogh The Secure Debug functionality can be enabled on MPS3 by using the new corstone1000-mps3-secure-debug.yml kas file. The kas file adds the new secure-debug machine feature. The TF-M recipe adds the needed TF-M build flags and patches in order to make the Secure Debug work. This way, the Corstone-1000 will only boot fully if a debugger is connected and a debug authentication is initiated. Signed-off-by: Bence Balogh --- ci/secure-debug.yml | 8 ++ .../corstone1000/images/ExternalFlash.png | Bin 54896 -> 64795 bytes .../corstone1000-flash-firmware-image.bb | 8 +- ...m-CS1000-Increase-BL2-partition-size.patch | 111 ++++++++++++++++++ ...-Add-PSA_WANT_ALG_SHA_256-definition.patch | 42 +++++++ ...m-CS1000-Add-crypto-configs-for-ADAC.patch | 39 ++++++ ...orm-CS1000-Fix-platform-name-in-logs.patch | 27 +++++ .../0001-PSA-revert-header-versions.patch | 41 +++++++ ...nk-psa_interface-instead-of-tfm_sprt.patch | 35 ++++++ ...-Fix-psa_key_handle_t-initialization.patch | 32 +++++ .../trusted-firmware-m-corstone1000.inc | 13 ++ .../wic/corstone1000-flash-firmware.wks.in | 10 +- .../trusted-firmware-m-2.1.0-src.inc | 8 +- 13 files changed, 366 insertions(+), 8 deletions(-) create mode 100644 ci/secure-debug.yml create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0014-Platform-CS1000-Increase-BL2-partition-size.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0015-CC312-ADAC-Add-PSA_WANT_ALG_SHA_256-definition.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0016-Platform-CS1000-Add-crypto-configs-for-ADAC.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0017-Platform-CS1000-Fix-platform-name-in-logs.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0001-PSA-revert-header-versions.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0002-ADAC-Link-psa_interface-instead-of-tfm_sprt.patch create mode 100644 meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0003-Fix-psa_key_handle_t-initialization.patch diff --git a/ci/secure-debug.yml b/ci/secure-debug.yml new file mode 100644 index 00000000..33cf00a3 --- /dev/null +++ b/ci/secure-debug.yml @@ -0,0 +1,8 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/siemens/kas/master/kas/schema-kas.json + +header: + version: 14 + +local_conf_header: + secure-debug: | + MACHINE_FEATURES += "secure-debug" diff --git a/meta-arm-bsp/documentation/corstone1000/images/ExternalFlash.png b/meta-arm-bsp/documentation/corstone1000/images/ExternalFlash.png index 578f0389969ecebbd284d78e062a0df1af4067fe..46519df9c08110d9e37cd32754cd2e4e8976677e 100644 GIT binary patch literal 64795 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 z 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 Hp$iVH>f{#6OIhN!$$frm9+o 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 F{{ai-t4II< literal 54896 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 bA90zX)!`kTO<`BSzZcRkpB6qg@cTai!N_3V diff --git a/meta-arm-bsp/recipes-bsp/images/corstone1000-flash-firmware-image.bb b/meta-arm-bsp/recipes-bsp/images/corstone1000-flash-firmware-image.bb index 4a32192d..73cc32aa 100644 --- a/meta-arm-bsp/recipes-bsp/images/corstone1000-flash-firmware-image.bb +++ b/meta-arm-bsp/recipes-bsp/images/corstone1000-flash-firmware-image.bb @@ -53,9 +53,11 @@ TFM_SIGN_PRIVATE_KEY = "${libdir}/tfm-scripts/root-RSA-3072_1.pem" RE_IMAGE_OFFSET = "0x1000" # Offsets for the .nopt image generation -TFM_OFFSET = "102400" -FIP_OFFSET = "479232" -KERNEL_OFFSET = "2576384" +# These offset values have to be aligned with those in +# meta-arm/meta-arm-bsp/wic/corstone1000-flash-firmware.wks.in +TFM_OFFSET = "147456" +FIP_OFFSET = "475136" +KERNEL_OFFSET = "2572288" do_sign_images() { # Sign TF-A BL2 diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0014-Platform-CS1000-Increase-BL2-partition-size.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0014-Platform-CS1000-Increase-BL2-partition-size.patch new file mode 100644 index 00000000..7c2a6325 --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0014-Platform-CS1000-Increase-BL2-partition-size.patch @@ -0,0 +1,111 @@ +From ddd4abdb3893e284a35303e4a5ac7b6ad2ed8320 Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Tue, 16 Jul 2024 21:04:49 +0200 +Subject: [PATCH] Platform: CS1000: Increase BL2 partition size + +Enabling secure debug increases the BL2 code size considerably. This +patch increases the BL2 partition size to enable secure debug feature +on Corstone-1000. The TF-M partition size has to be decreased for this. +The RAM_MPU_REGION_BLOCK_1_SIZE had to be aligned with the changes to +fully cover the S_DATA. + +Signed-off-by: Emekcan Aras +Signed-off-by: Bence Balogh +Upstream-Status: Backport [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/30406] +--- + .../ext/target/arm/corstone1000/CMakeLists.txt | 9 ++++++--- + .../target/arm/corstone1000/create-flash-image.sh | 14 ++++++++------ + .../arm/corstone1000/partition/flash_layout.h | 4 ++-- + 3 files changed, 16 insertions(+), 11 deletions(-) + +diff --git a/platform/ext/target/arm/corstone1000/CMakeLists.txt b/platform/ext/target/arm/corstone1000/CMakeLists.txt +index b13dc26c0e..3ba26e0de7 100644 +--- a/platform/ext/target/arm/corstone1000/CMakeLists.txt ++++ b/platform/ext/target/arm/corstone1000/CMakeLists.txt +@@ -44,10 +44,13 @@ target_compile_definitions(platform_region_defs + # The RAM MPU Region block sizes are calculated manually. The RAM has to be covered + # with the MPU regions. These regions also have to be the power of 2 and + # the start addresses have to be aligned to these sizes. The sizes can be calculated +- # from the S_DATA_START and S_DATA_SIZE defines. +- RAM_MPU_REGION_BLOCK_1_SIZE=0x4000 ++ # from the S_DATA_START and S_DATA_SIZE defines the following way: ++ # S_DATA_SIZE = RAM_MPU_REGION_BLOCK_1_SIZE + RAM_MPU_REGION_BLOCK_2_SIZE ++ # And the following constraints have to be taken: ++ # S_DATA_START % RAM_MPU_REGION_BLOCK_1_SIZE = 0 ++ # (S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE) % RAM_MPU_REGION_BLOCK_2_SIZE = 0 ++ RAM_MPU_REGION_BLOCK_1_SIZE=0x10000 + RAM_MPU_REGION_BLOCK_2_SIZE=0x20000 +- + ) + #========================= Platform common defs ===============================# + +diff --git a/platform/ext/target/arm/corstone1000/create-flash-image.sh b/platform/ext/target/arm/corstone1000/create-flash-image.sh +index a6be61384f..06f0d1ec9a 100755 +--- a/platform/ext/target/arm/corstone1000/create-flash-image.sh ++++ b/platform/ext/target/arm/corstone1000/create-flash-image.sh +@@ -1,6 +1,6 @@ + #!/bin/bash + #------------------------------------------------------------------------------- +-# Copyright (c) 2023, Arm Limited. All rights reserved. ++# Copyright (c) 2023-2024, Arm Limited. All rights reserved. + # + # SPDX-License-Identifier: BSD-3-Clause + # +@@ -65,6 +65,8 @@ FWU_METADATA_TYPE_UUID="8A7A84A0-8387-40F6-AB41-A8B9A5A60D23" + PRIVATE_METADATA_TYPE_UUID="ECB55DC3-8AB7-4A84-AB56-EB0A9974DB42" + SE_BL2_TYPE_UUID="64BD8ADB-02C0-4819-8688-03AB4CAB0ED9" + TFM_TYPE_UUID="D763C27F-07F6-4FF0-B2F3-060CB465CD4E" ++SE_BL2_PARTITION_SIZE="+144k" ++TFM_S_PARTITION_SIZE="+320K" + + # Create the image + rm -f $IMAGE +@@ -81,10 +83,10 @@ sgdisk --mbrtogpt \ + --new=3:48:+4K --typecode=3:$FWU_METADATA_TYPE_UUID --partition-guid=3:$(uuidgen) --change-name=3:'Bkup-FWU-Metadata' \ + --new=4:56:+4K --typecode=4:$PRIVATE_METADATA_TYPE_UUID --partition-guid=4:$(uuidgen) --change-name=4:'private_metadata_replica_1' \ + --new=5:64:+4k --typecode=5:$PRIVATE_METADATA_TYPE_UUID --partition-guid=5:$(uuidgen) --change-name=5:'private_metadata_replica_2' \ +- --new=6:72:+100k --typecode=6:$SE_BL2_TYPE_UUID --partition-guid=6:$(uuidgen) --change-name=6:'bl2_primary' \ +- --new=7:272:+368K --typecode=7:$TFM_TYPE_UUID --partition-guid=7:$(uuidgen) --change-name=7:'tfm_primary' \ +- --new=8:32784:+100k --typecode=8:$SE_BL2_TYPE_UUID --partition-guid=8:$(uuidgen) --change-name=8:'bl2_secondary' \ +- --new=9:32984:+368K --typecode=9:$TFM_TYPE_UUID --partition-guid=9:$(uuidgen) --change-name=9:'tfm_secondary' \ ++ --new=6:72:$SE_BL2_PARTITION_SIZE --typecode=6:$SE_BL2_TYPE_UUID --partition-guid=6:$(uuidgen) --change-name=6:'bl2_primary' \ ++ --new=7:360:$TFM_S_PARTITION_SIZE --typecode=7:$TFM_TYPE_UUID --partition-guid=7:$(uuidgen) --change-name=7:'tfm_primary' \ ++ --new=8:32784:$SE_BL2_PARTITION_SIZE --typecode=8:$SE_BL2_TYPE_UUID --partition-guid=8:$(uuidgen) --change-name=8:'bl2_secondary' \ ++ --new=9:33072:$TFM_S_PARTITION_SIZE --typecode=9:$TFM_TYPE_UUID --partition-guid=9:$(uuidgen) --change-name=9:'tfm_secondary' \ + --new=10:65496:65501 --partition-guid=10:$(uuidgen) --change-name=10:'reserved_2' \ + $IMAGE + +@@ -93,7 +95,7 @@ sgdisk --mbrtogpt \ + # Write partitions + # conv=notrunc avoids truncation to keep the geometry of the image. + dd if=$BIN_DIR/bl2_signed.bin of=${IMAGE} seek=72 conv=notrunc +-dd if=$BIN_DIR/tfm_s_signed.bin of=${IMAGE} seek=272 conv=notrunc ++dd if=$BIN_DIR/tfm_s_signed.bin of=${IMAGE} seek=360 conv=notrunc + + # Print the gpt table + sgdisk -p $IMAGE +diff --git a/platform/ext/target/arm/corstone1000/partition/flash_layout.h b/platform/ext/target/arm/corstone1000/partition/flash_layout.h +index 9fc1d9fa63..73c430ce57 100644 +--- a/platform/ext/target/arm/corstone1000/partition/flash_layout.h ++++ b/platform/ext/target/arm/corstone1000/partition/flash_layout.h +@@ -92,7 +92,7 @@ + #define FLASH_DEV_NAME_BL1 FLASH_DEV_NAME + + /* Static Configurations of the Flash */ +-#define SE_BL2_PARTITION_SIZE (0x18000) /* 96 KB */ ++#define SE_BL2_PARTITION_SIZE (0x24000) /* 144 KB */ + #define SE_BL2_BANK_0_OFFSET (0x9000) /* 72nd LBA */ + #define SE_BL2_BANK_1_OFFSET (0x1002000) /* 32784th LBA */ + +@@ -137,7 +137,7 @@ + + /* Bank configurations */ + #define BANK_PARTITION_SIZE (0xFE0000) /* 15.875 MB */ +-#define TFM_PARTITION_SIZE (0x5C000) /* 368 KB */ ++#define TFM_PARTITION_SIZE (0x50000) /* 320 KB */ + + /************************************************************/ + /* Bank : Images flash offsets are with respect to the bank */ +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0015-CC312-ADAC-Add-PSA_WANT_ALG_SHA_256-definition.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0015-CC312-ADAC-Add-PSA_WANT_ALG_SHA_256-definition.patch new file mode 100644 index 00000000..63737a0f --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0015-CC312-ADAC-Add-PSA_WANT_ALG_SHA_256-definition.patch @@ -0,0 +1,42 @@ +From 756cfad0cc05e7f4c02faa74aea14962aa54420c Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Wed, 31 Jul 2024 13:38:09 +0200 +Subject: [PATCH 2/3] CC312: ADAC: Add PSA_WANT_ALG_SHA_256 definition + +The bl2_mbedcrypto_config is linked to the psa_adac_cc312 target so +the MCUBOOT_PSA_CRYPTO_CONFIG_FILEPATH and +MCUBOOT_MBEDCRYPTO_CONFIG_FILEPATH configs are used for the ADAC driver +too. The MCUBOOT_USE_PSA_CRYPTO is OFF by default, that means the +MCUBOOT_PSA_CRYPTO_CONFIG_FILEPATH is not included during the build so +the PSA_WANT_ALG_SHA_256 is not defined for the ADAC driver. Because +of this, the PSA_HASH_MAX_SIZE is not set correctly for the sources +of the psa_adac_cc312 target. This caused runtime issues. + +Signed-off-by: Bence Balogh +Upstream-Status: Pending [Not submitted to upstream yet] +--- + platform/ext/accelerator/cc312/psa-adac/CMakeLists.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/platform/ext/accelerator/cc312/psa-adac/CMakeLists.txt b/platform/ext/accelerator/cc312/psa-adac/CMakeLists.txt +index cb0553b40a..d7f5a54f3c 100644 +--- a/platform/ext/accelerator/cc312/psa-adac/CMakeLists.txt ++++ b/platform/ext/accelerator/cc312/psa-adac/CMakeLists.txt +@@ -1,5 +1,5 @@ + #------------------------------------------------------------------------------- +-# Copyright (c) 2020-2023, Arm Limited. All rights reserved. ++# Copyright (c) 2020-2024, Arm Limited. All rights reserved. + # + # SPDX-License-Identifier: BSD-3-Clause + # +@@ -32,6 +32,7 @@ target_compile_options(psa_adac_cc312 + -DCC_IOT + -DUSE_MBEDTLS_CRYPTOCELL + -D_INTERNAL_CC_NO_RSA_SCHEME_15_SUPPORT ++ -DPSA_WANT_ALG_SHA_256 + ) + + target_link_libraries(psa_adac_cc312 +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0016-Platform-CS1000-Add-crypto-configs-for-ADAC.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0016-Platform-CS1000-Add-crypto-configs-for-ADAC.patch new file mode 100644 index 00000000..a56a6f8a --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0016-Platform-CS1000-Add-crypto-configs-for-ADAC.patch @@ -0,0 +1,39 @@ +From ea0f0236f1dbe9ff7640c90311a3116e6db33aa2 Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Wed, 31 Jul 2024 13:38:27 +0200 +Subject: [PATCH 3/3] Platform: CS1000: Add crypto configs for ADAC + +The psa_adac_psa_crypto target needs the MBEDTLS_CONFIG_FILE and +MBEDTLS_PSA_CRYPTO_CONFIG_FILE defines in order to build correctly. +The default crypto config files are used here. + +Signed-off-by: Bence Balogh +Upstream-Status: Pending [Not submitted to upstream yet] +--- + platform/ext/target/arm/corstone1000/CMakeLists.txt | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/platform/ext/target/arm/corstone1000/CMakeLists.txt b/platform/ext/target/arm/corstone1000/CMakeLists.txt +index 896961306d..d3652ff40c 100644 +--- a/platform/ext/target/arm/corstone1000/CMakeLists.txt ++++ b/platform/ext/target/arm/corstone1000/CMakeLists.txt +@@ -409,6 +409,16 @@ if (${PLATFORM_PSA_ADAC_SECURE_DEBUG}) + PRIVATE + platform_bl2 + ) ++ ++ target_compile_definitions(psa_adac_psa_crypto ++ PRIVATE ++ MBEDTLS_CONFIG_FILE="${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto/mbedcrypto_config/tfm_mbedcrypto_config_default.h" ++ MBEDTLS_PSA_CRYPTO_CONFIG_FILE="${CMAKE_SOURCE_DIR}/lib/ext/mbedcrypto/mbedcrypto_config/crypto_config_default.h" ++ ) ++ target_link_libraries(psa_adac_psa_crypto ++ PRIVATE ++ psa_crypto_library_config ++ ) + endif() + + find_package(Python3) +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0017-Platform-CS1000-Fix-platform-name-in-logs.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0017-Platform-CS1000-Fix-platform-name-in-logs.patch new file mode 100644 index 00000000..cc20eae2 --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/0017-Platform-CS1000-Fix-platform-name-in-logs.patch @@ -0,0 +1,27 @@ +From 8f0cd9710be508adab91d8b5ab5aa2d39e89c287 Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Wed, 31 Jul 2024 19:57:33 +0200 +Subject: [PATCH] Platform: CS1000: Fix platform name in logs + +Signed-off-by: Bence Balogh +Upstream-Status: Pending [Not submitted to upstream yet] +--- + platform/ext/target/arm/corstone1000/bl2/boot_hal_bl2.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/platform/ext/target/arm/corstone1000/bl2/boot_hal_bl2.c b/platform/ext/target/arm/corstone1000/bl2/boot_hal_bl2.c +index 8aacd877e4..f5baf08cb4 100644 +--- a/platform/ext/target/arm/corstone1000/bl2/boot_hal_bl2.c ++++ b/platform/ext/target/arm/corstone1000/bl2/boot_hal_bl2.c +@@ -192,7 +192,7 @@ int32_t boot_platform_post_init(void) + } + + result = tfm_to_psa_adac_corstone1000_secure_debug(secure_debug_rotpk, 32); +- BOOT_LOG_INF("%s: dipda_secure_debug is a %s.\r\n", __func__, ++ BOOT_LOG_INF("%s: Corstone-1000 Secure Debug is a %s.\r\n", __func__, + (result == 0) ? "success" : "failure"); + + } +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0001-PSA-revert-header-versions.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0001-PSA-revert-header-versions.patch new file mode 100644 index 00000000..5bc65c40 --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0001-PSA-revert-header-versions.patch @@ -0,0 +1,41 @@ +From 3a53a6ad7b91770a8514082e411e277c03764eb0 Mon Sep 17 00:00:00 2001 +From: Emekcan Aras +Date: Wed, 9 Aug 2023 17:16:03 +0100 +Subject: [PATCH] Revert ADAC cert and token version + +Align ADAC certificate versions with versions in secure-debug-manager +[1] repository. The versions of the certificate and token are checked +during the authentication process. The debugger connection is refused +if there is a mismatch between the sent certificate/token and expected +certificate/token versions. + +[1] https://github.com/ARM-software/secure-debug-manager/tree/master + +Signed-off-by: Emekcan Aras +Upstream-Status: Inappropriate [Add newer dummy token and cert] +--- + psa-adac/core/include/psa_adac.h | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/psa-adac/core/include/psa_adac.h b/psa-adac/core/include/psa_adac.h +index b190992..b026607 100644 +--- a/psa-adac/core/include/psa_adac.h ++++ b/psa-adac/core/include/psa_adac.h +@@ -30,10 +30,10 @@ extern "C" { + * + * Current version numbers for certificate and token format. + */ +-#define ADAC_CERT_MAJOR 1u +-#define ADAC_CERT_MINOR 0u +-#define ADAC_TOKEN_MAJOR 1u +-#define ADAC_TOKEN_MINOR 0u ++#define ADAC_CERT_MAJOR 0u ++#define ADAC_CERT_MINOR 1u ++#define ADAC_TOKEN_MAJOR 0u ++#define ADAC_TOKEN_MINOR 1u + + /** \brief Key options + * +-- +2.17.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0002-ADAC-Link-psa_interface-instead-of-tfm_sprt.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0002-ADAC-Link-psa_interface-instead-of-tfm_sprt.patch new file mode 100644 index 00000000..fcfe892e --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0002-ADAC-Link-psa_interface-instead-of-tfm_sprt.patch @@ -0,0 +1,35 @@ +From af71103845498eef4f859deba4b904a195f2817f Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Mon, 22 Jul 2024 17:33:23 +0200 +Subject: [PATCH] ADAC: Link psa_interface instead of tfm_sprt + +The tfm_sprt brings in other functionalities that are not needed for +the Secure Debug. + +The printf() override in tfm_sp_log_raw.c can cause problems because +it calls tfm_hal_output_sp_log() which triggers an SVC. The SVC calls +tfm_hal_output_spm_log which relies on an SPM, which might not be +initialized at that point. + +Signed-off-by: Bence Balogh +Upstream-Status: Pending [Not submitted to upstream yet] +--- + psa_crypto/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/psa_crypto/CMakeLists.txt b/psa_crypto/CMakeLists.txt +index 3e70624..58d95f7 100644 +--- a/psa_crypto/CMakeLists.txt ++++ b/psa_crypto/CMakeLists.txt +@@ -18,7 +18,7 @@ target_sources(psa_adac_psa_crypto + target_link_libraries(psa_adac_psa_crypto + PRIVATE + psa_adac_config +- tfm_sprt ++ psa_interface + ) + + target_link_libraries(trusted-firmware-m-psa-adac +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0003-Fix-psa_key_handle_t-initialization.patch b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0003-Fix-psa_key_handle_t-initialization.patch new file mode 100644 index 00000000..d620cc19 --- /dev/null +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/files/corstone1000/psa-adac/0003-Fix-psa_key_handle_t-initialization.patch @@ -0,0 +1,32 @@ +From 972bf711ad884607409c225f9338bf25206e29e8 Mon Sep 17 00:00:00 2001 +From: Bence Balogh +Date: Wed, 31 Jul 2024 15:56:51 +0200 +Subject: [PATCH] Fix psa_key_handle_t initialization + +If the MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER macro is defined in the +mbedcrypto configuration header file then the psa_key_handle_t is a +struct. In this case, it is defined in the used configuration header +so the struct cannot be initialized with -1. + +Signed-off-by: Bence Balogh +Upstream-Status: Pending [Not submitted to upstream yet] +--- + psa_crypto/adac_crypto_psa_mac.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/psa_crypto/adac_crypto_psa_mac.c b/psa_crypto/adac_crypto_psa_mac.c +index 046fef7..93ab8f9 100644 +--- a/psa_crypto/adac_crypto_psa_mac.c ++++ b/psa_crypto/adac_crypto_psa_mac.c +@@ -198,7 +198,7 @@ psa_status_t psa_adac_verify_mac(uint8_t key_type, + size_t mac_size) + { + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; +- psa_key_handle_t handle = -1; ++ psa_key_handle_t handle = {0}; + psa_status_t ret = PSA_ERROR_NOT_SUPPORTED; + psa_key_type_t type = 0; + size_t bits = 0; +-- +2.25.1 + diff --git a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc index 970399cb..4ba6659d 100644 --- a/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc +++ b/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-corstone1000.inc @@ -11,6 +11,8 @@ TFM_PLATFORM_IS_FVP ?= "FALSE" EXTRA_OECMAKE += "-DPLATFORM_IS_FVP=${TFM_PLATFORM_IS_FVP}" EXTRA_OECMAKE += "-DCC312_LEGACY_DRIVER_API_ENABLED=OFF" EXTRA_OECMAKE:append:corstone1000-fvp = " -DENABLE_MULTICORE=${@bb.utils.contains('MACHINE_FEATURES', 'corstone1000_fvp_smp', 'TRUE', 'FALSE', d)}" +EXTRA_OECMAKE:append:corstone1000-mps3 = " -DPLATFORM_PSA_ADAC_SECURE_DEBUG=${@bb.utils.contains('MACHINE_FEATURES', 'secure-debug', 'ON', 'OFF', d)}" +EXTRA_OECMAKE:append:corstone1000-mps3 = " -DPLATFORM_PSA_ADAC_SOURCE_PATH=${S}/../tfm-psa-adac -DPLATFORM_PSA_ADAC_BUILD_PATH=${B}/tfm-psa-adac-build" SRC_URI += " \ file://0001-arm-trusted-firmware-m-disable-address-warnings-into.patch \ @@ -31,6 +33,17 @@ SRC_URI:append:corstone1000 = " \ file://0011-Platform-Corstone1000-switch-to-metadata-v2.patch \ file://0012-platform-corstone1000-Increase-flash-PS-area-size.patch \ file://0013-Platform-CS1000-Fix-Bank-offsets.patch \ + file://0014-Platform-CS1000-Increase-BL2-partition-size.patch \ + file://0015-CC312-ADAC-Add-PSA_WANT_ALG_SHA_256-definition.patch \ + file://0016-Platform-CS1000-Add-crypto-configs-for-ADAC.patch \ + file://0017-Platform-CS1000-Fix-platform-name-in-logs.patch \ + " + +FILESEXTRAPATHS:prepend:corstone1000-mps3 := "${THISDIR}/files/corstone1000/psa-adac:" +SRC_URI:append:corstone1000-mps3 = " \ + file://0001-PSA-revert-header-versions.patch;patchdir=../tfm-psa-adac \ + file://0002-ADAC-Link-psa_interface-instead-of-tfm_sprt.patch;patchdir=../tfm-psa-adac \ + file://0003-Fix-psa_key_handle_t-initialization.patch;patchdir=../tfm-psa-adac \ " # TF-M ships patches for external dependencies that needs to be applied diff --git a/meta-arm-bsp/wic/corstone1000-flash-firmware.wks.in b/meta-arm-bsp/wic/corstone1000-flash-firmware.wks.in index e0ceca14..6ab4f048 100644 --- a/meta-arm-bsp/wic/corstone1000-flash-firmware.wks.in +++ b/meta-arm-bsp/wic/corstone1000-flash-firmware.wks.in @@ -15,9 +15,11 @@ part --source empty --size 4k --align 4 --offset 24k --part-name="Bkup-FWU-Metad part --source empty --size 4k --align 4 --offset 28k --part-name="private_metadata_replica_2" --uuid 3CC3B456-DEC8-4CE3-BC5C-965483CE4828 --part-type ECB55DC3-8AB7-4A84-AB56-EB0A9974DB42 part --source empty --size 4k --align 4 --offset 32k --part-name="private_metadata_replica_2" --uuid DCE9C503-8DFD-4DCB-8889-647E49641552 --part-type ECB55DC3-8AB7-4A84-AB56-EB0A9974DB42 -part --source rawcopy --size 100k --sourceparams="file=bl2_signed.bin" --offset 36k --align 4 --part-name="bl2_primary" --uuid 9A3A8FBF-55EF-439C-80C9-A3F728033929 --part-type 64BD8ADB-02C0-4819-8688-03AB4CAB0ED9 +# The size has to be aligned to TF-M's SE_BL2_PARTITION_SIZE (tfm/platform/ext/target/arm/corstone1000/partition/flash_layout.h) +part --source rawcopy --size 144k --sourceparams="file=bl2_signed.bin" --offset 36k --align 4 --part-name="bl2_primary" --uuid 9A3A8FBF-55EF-439C-80C9-A3F728033929 --part-type 64BD8ADB-02C0-4819-8688-03AB4CAB0ED9 -part --source rawcopy --size 368k --sourceparams="file=tfm_s_signed.bin" --align 4 --part-name="tfm_primary" --uuid 07F9616C-1233-439C-ACBA-72D75421BF70 --part-type D763C27F-07F6-4FF0-B2F3-060CB465CD4E +# The size has to be aligned to TF-M's TFM_PARTITION_SIZE (tfm/platform/ext/target/arm/corstone1000/partition/flash_layout.h) +part --source rawcopy --size 320k --sourceparams="file=tfm_s_signed.bin" --align 4 --part-name="tfm_primary" --uuid 07F9616C-1233-439C-ACBA-72D75421BF70 --part-type D763C27F-07F6-4FF0-B2F3-060CB465CD4E # Rawcopy of the FIP binary part --source rawcopy --size 2 --sourceparams="file=signed_fip-corstone1000.bin" --align 4 --part-name="FIP_A" --uuid B9C7AC9D-40FF-4675-956B-EEF4DE9DF1C5 --part-type B5EB19BD-CF56-45E8-ABA7-7ADB228FFEA7 @@ -27,8 +29,8 @@ part --source rawcopy --size 12 --sourceparams="file=Image.gz-initramfs-${MACHIN # The offset has to be aligned to TF-M's SE_BL2_BANK_1_OFFSET define (tfm/platform/ext/target/arm/corstone1000/partition/flash_layout.h) -part --source empty --size 100k --offset 16392k --align 4 --part-name="bl2_secondary" --uuid 3F0C49A4-48B7-4D1E-AF59-3E4A3CE1BA9F --part-type 64BD8ADB-02C0-4819-8688-03AB4CAB0ED9 -part --source empty --size 368k --align 4 --part-name="tfm_secondary" --uuid 009A6A12-64A6-4F0F-9882-57CD79A34A3D --part-type D763C27F-07F6-4FF0-B2F3-060CB465CD4E +part --source empty --size 144k --offset 16392k --align 4 --part-name="bl2_secondary" --uuid 3F0C49A4-48B7-4D1E-AF59-3E4A3CE1BA9F --part-type 64BD8ADB-02C0-4819-8688-03AB4CAB0ED9 +part --source empty --size 320k --align 4 --part-name="tfm_secondary" --uuid 009A6A12-64A6-4F0F-9882-57CD79A34A3D --part-type D763C27F-07F6-4FF0-B2F3-060CB465CD4E part --source empty --size 2 --align 4 --part-name="FIP_B" --uuid 9424E370-7BC9-43BB-8C23-71EE645E1273 --part-type B5EB19BD-CF56-45E8-ABA7-7ADB228FFEA7 part --source empty --size 12 --align 4 --part-name="kernel_secondary" --uuid A2698A91-F9B1-4629-9188-94E4520808F8 --part-type 8197561D-6124-46FC-921E-141CC5745B05 diff --git a/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-2.1.0-src.inc b/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-2.1.0-src.inc index f804bf04..fb4ddcb6 100644 --- a/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-2.1.0-src.inc +++ b/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m-2.1.0-src.inc @@ -5,7 +5,8 @@ LICENSE = "BSD-2-Clause & BSD-3-Clause & Apache-2.0" LIC_FILES_CHKSUM = "file://license.rst;md5=07f368487da347f3c7bd0fc3085f3afa \ file://../tf-m-tests/license.rst;md5=4481bae2221b0cfca76a69fb3411f390 \ file://../mbedtls/LICENSE;md5=379d5819937a6c2f1ef1630d341e026d \ - file://../mcuboot/LICENSE;md5=b6ee33f1d12a5e6ee3de1e82fb51eeb8" + file://../mcuboot/LICENSE;md5=b6ee33f1d12a5e6ee3de1e82fb51eeb8 \ + file://../tfm-psa-adac/license.rst;md5=07f368487da347f3c7bd0fc3085f3afa" SRC_URI_TRUSTED_FIRMWARE_M ?= "git://git.trustedfirmware.org/TF-M/trusted-firmware-m.git;protocol=https" SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS ?= "git://git.trustedfirmware.org/TF-M/tf-m-extras.git;protocol=https" @@ -14,6 +15,7 @@ SRC_URI_TRUSTED_FIRMWARE_M_CMSIS ?= "git://github.com/ARM-software/CMSIS_6.git;p SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS ?= "gitsm://github.com/ARMmbed/mbedtls.git;protocol=https" SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT ?= "git://github.com/mcu-tools/mcuboot.git;protocol=https" SRC_URI_TRUSTED_FIRMWARE_M_QCBOR ?= "git://github.com/laurencelundblade/QCBOR.git;protocol=https" +SRC_URI_TRUSTED_FIRMWARE_M_PSA_ADAC ?= "git://git.trustedfirmware.org/shared/psa-adac.git;protocol=https" SRC_URI = "${SRC_URI_TRUSTED_FIRMWARE_M};branch=${SRCBRANCH_tfm};name=tfm;destsuffix=git/tfm \ ${SRC_URI_TRUSTED_FIRMWARE_M_EXTRAS};branch=${SRCBRANCH_tfm-extras};name=tfm-extras;destsuffix=git/tfm-extras \ ${SRC_URI_TRUSTED_FIRMWARE_M_TESTS};branch=${SRCBRANCH_tfm-tests};name=tfm-tests;destsuffix=git/tf-m-tests \ @@ -21,6 +23,7 @@ SRC_URI = "${SRC_URI_TRUSTED_FIRMWARE_M};branch=${SRCBRANCH_tfm};name=tfm;dests ${SRC_URI_TRUSTED_FIRMWARE_M_MBEDTLS};branch=${SRCBRANCH_mbedtls};name=mbedtls;destsuffix=git/mbedtls \ ${SRC_URI_TRUSTED_FIRMWARE_M_MCUBOOT};branch=${SRCBRANCH_mcuboot};name=mcuboot;destsuffix=git/mcuboot \ ${SRC_URI_TRUSTED_FIRMWARE_M_QCBOR};branch=${SRCBRANCH_qcbor};name=qcbor;destsuffix=git/qcbor \ + ${SRC_URI_TRUSTED_FIRMWARE_M_PSA_ADAC};branch=${SRCBRANCH_tfm-psa-adac};name=tfm-psa-adac;destsuffix=git/tfm-psa-adac \ " # The required dependencies are documented in tf-m/config/config_base.cmake @@ -45,6 +48,9 @@ SRCREV_mcuboot = "9c99326b9756dbcc35b524636d99ed5f3e6cb29b" # QCBOR v1.2 SRCBRANCH_qcbor ?= "master" SRCREV_qcbor = "b0e7033268e88c9f27146fa9a1415ef4c19ebaff" +# PSA-ADAC (intermediate SHA, default value for PLATFORM_PSA_ADAC_VERSION in TF-M) +SRCBRANCH_tfm-psa-adac = "master" +SRCREV_tfm-psa-adac = "5f5490cebe66ae997f316f83c3fbf1f97deef625" SRCREV_FORMAT = "tfm"