From patchwork Fri Nov 19 09:33:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 944 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 B1AAAC433F5 for ; Fri, 19 Nov 2021 09:33:40 +0000 (UTC) Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) by mx.groups.io with SMTP id smtpd.web12.6719.1637314418482205693 for ; Fri, 19 Nov 2021 01:33:38 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=MB2T5XDx; spf=pass (domain: linaro.org, ip: 209.85.167.50, mailfrom: maxim.uvarov@linaro.org) Received: by mail-lf1-f50.google.com with SMTP id z34so40688767lfu.8 for ; Fri, 19 Nov 2021 01:33:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=+9JblNovDVho9/5jKT2RkM42LZAmWHxAOGMbdPhfntE=; b=MB2T5XDxYBcMBLAIJO/Fpr0R4uQrQv6+HDZ1/CQdBejuJ4uOZlI623NiNZaTUzcGA9 OqN8ZUazyHcXsi7K21w2O3l9vnF0S8lABR2oFila70LfaxxRigtU2kDBkc6FJ1tNwr/I O26YJ0GDTWby12P/fy9sQYytxokB16GgMD1V9pVGWyFkCAru/AJqGwO7tDupmNh0BD3r sUiuZSlI8Owc/glawTcvOxcF1jOYu51sLNWW6WiUTEV5+mudoGOUK79ohhZReBLpY9Pu +scViI+6UFTEzpVPMLD5fyBsXoI2Uqa0Z6S/9Rq1uyj0dtu9R79DiLEydIX4vwj3/MSG 37Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=+9JblNovDVho9/5jKT2RkM42LZAmWHxAOGMbdPhfntE=; b=XedOT5NKQRZlrwVc7N2QBsxWR0gJOeINOYkjDAiDCZX3jIw3APDokUqpWdM+ExUCf2 1uszVkIuBFlYjpu3yhBDol2kiVt0j5WAymRSjMO/3j5OnCqfer7VxJNsyzMdEz4SlUcy Sqh+PsMbXBnYS5FES5dCHn/LuMki3+moVDPYX5IBkkxUCP2IgcwO26QcjtW8z/gEfUq9 Rc/8orvCrm+jtQKvs/CKGb0zpP34IO4MS8wKK8wn9cs5O/y8wXRDEtuaKdspS33SUL94 VJRMh6j2gLbGLREgdO9JG2InNO+/xbI1a07OiLE+PM5bZf5AovvY0d0Sy3ZV63n5QVuS 2TyA== X-Gm-Message-State: AOAM533JvHYhfv7VMea59HL7ALu0J4jaChr3q2BxYPsAkWRQAuJ2HU9v sIocozpoUqWalX3TTJYJI+8c7K7ig2JeBQ== X-Google-Smtp-Source: ABdhPJxc2koksT9bLwXmTcg+FG2p2/VU23cquuCxLNhfiVwHiDXRYlpnON0xWKQA/4nHvgvH/p1TfA== X-Received: by 2002:a2e:a365:: with SMTP id i5mr23534859ljn.335.1637314416203; Fri, 19 Nov 2021 01:33:36 -0800 (PST) Received: from localhost.localdomain ([91.193.176.69]) by smtp.gmail.com with ESMTPSA id x17sm242296ljp.95.2021.11.19.01.33.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Nov 2021 01:33:35 -0800 (PST) From: Maxim Uvarov To: meta-arm@lists.yoctoproject.org Cc: jon.mason@arm.com, ross.burton@arm.com, Maxim Uvarov Subject: [PATCHv6 2/3] add optee-ftpm Date: Fri, 19 Nov 2021 12:33:30 +0300 Message-Id: <20211119093331.4536-2-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211119093331.4536-1-maxim.uvarov@linaro.org> References: <20211119093331.4536-1-maxim.uvarov@linaro.org> 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 ; Fri, 19 Nov 2021 09:33:40 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/meta-arm/message/2425 Add software TPM emulated in the OPTEE-OS. Signed-off-by: Maxim Uvarov --- v6: - wolfssl submodule needs to be updated to fix falthrough. Sent PR for that and mention about that in correction patch. - parallel make is also fixed in the latest master. Removed bb fix and updated git sha. - removed not needed B=$S - removed redurant dependancies .../optee-ftpm/0000-fix-ssl-fallthrough.patch | 23 ++++++ .../0001-add-enum-to-ta-flags.patch | 30 ++++++++ .../optee-ftpm/optee-ftpm_git.bb | 74 +++++++++++++++++++ .../optee-ftpm/optee-os_%.bbappend | 14 ++++ 4 files changed, 141 insertions(+) create mode 100644 meta-arm/recipes-security/optee-ftpm/optee-ftpm/0000-fix-ssl-fallthrough.patch create mode 100644 meta-arm/recipes-security/optee-ftpm/optee-ftpm/0001-add-enum-to-ta-flags.patch create mode 100644 meta-arm/recipes-security/optee-ftpm/optee-ftpm_git.bb create mode 100644 meta-arm/recipes-security/optee-ftpm/optee-os_%.bbappend diff --git a/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0000-fix-ssl-fallthrough.patch b/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0000-fix-ssl-fallthrough.patch new file mode 100644 index 0000000..1e2a4b6 --- /dev/null +++ b/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0000-fix-ssl-fallthrough.patch @@ -0,0 +1,23 @@ +fix gcc compilation + +just fix compilation under gcc. +Upstream-Status: Submitted [https://github.com/microsoft/MSRSec/pull/35] +Compilation issue already fixed in wolfcrypt and submodule +needs to be updated. I sent PR for for update with the link +above. + +Signed-off-by: Maxim Uvarov + +diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h +index 7b3a953aebda..e156ae5c7909 100755 +--- a/external/wolfssl/wolfssl/wolfcrypt/types.h ++++ b/external/wolfssl/wolfssl/wolfcrypt/types.h +@@ -181,7 +181,7 @@ + /* GCC 7 has new switch() fall-through detection */ + #if defined(__GNUC__) + #if ((__GNUC__ > 7) || ((__GNUC__ == 7) && (__GNUC_MINOR__ >= 1))) +- #define FALL_THROUGH __attribute__ ((fallthrough)); ++ #define FALL_THROUGH __attribute__ ((__fallthrough__)); + #endif + #endif + #ifndef FALL_THROUGH diff --git a/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0001-add-enum-to-ta-flags.patch b/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0001-add-enum-to-ta-flags.patch new file mode 100644 index 0000000..bbc1107 --- /dev/null +++ b/meta-arm/recipes-security/optee-ftpm/optee-ftpm/0001-add-enum-to-ta-flags.patch @@ -0,0 +1,30 @@ +From 2d00f16058529eb9f4d4d2bcaeed91fd53b43989 Mon Sep 17 00:00:00 2001 +From: Maxim Uvarov +Date: Fri, 17 Apr 2020 12:05:53 +0100 +Subject: [PATCH 2/2] add enum to ta flags + +If we compile this TA into OPTEE-OS we need to define a flag +that this TA can be discovered on the optee bus. +Upstream-Status: Submitted [https://github.com/microsoft/MSRSec/pull/34] + +Signed-off-by: Maxim Uvarov +--- + TAs/optee_ta/fTPM/user_ta_header_defines.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/TAs/optee_ta/fTPM/user_ta_header_defines.h b/TAs/optee_ta/fTPM/user_ta_header_defines.h +index 6ff62d1..685b54a 100644 +--- a/TAs/optee_ta/fTPM/user_ta_header_defines.h ++++ b/TAs/optee_ta/fTPM/user_ta_header_defines.h +@@ -44,7 +44,7 @@ + + #define TA_UUID TA_FTPM_UUID + +-#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE | TA_FLAG_INSTANCE_KEEP_ALIVE ) ++#define TA_FLAGS (TA_FLAG_SINGLE_INSTANCE | TA_FLAG_INSTANCE_KEEP_ALIVE | TA_FLAG_DEVICE_ENUM_SUPP) + #define TA_STACK_SIZE (64 * 1024) + #define TA_DATA_SIZE (64 * 1024) + +-- +2.17.1 + diff --git a/meta-arm/recipes-security/optee-ftpm/optee-ftpm_git.bb b/meta-arm/recipes-security/optee-ftpm/optee-ftpm_git.bb new file mode 100644 index 0000000..ce5059c --- /dev/null +++ b/meta-arm/recipes-security/optee-ftpm/optee-ftpm_git.bb @@ -0,0 +1,74 @@ +SUMMARY = "OPTEE fTPM Microsoft TA" +DESCRIPTION = "TCG reference implementation of the TPM 2.0 Specification." +HOMEPAGE = "https://github.com/microsoft/ms-tpm-20-ref/" + +COMPATIBLE_MACHINE ?= "invalid" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:qemuarm64-secureboot = "qemuarm64" + +#FIXME - doesn't currently work with clang +TOOLCHAIN = "gcc" + +inherit deploy python3native + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${S}/LICENSE;md5=27e94c0280987ab296b0b8dd02ab9fe5" + +DEPENDS = "python3-pycryptodome-native python3-pycryptodomex-native python3-pyelftools-native" +DEPENDS += " optee-os-tadevkit" + +FTPM_UUID="bc50d971-d4c9-42c4-82cb-343fb7f37896" + +# SRC_URI = "git://github.com/Microsoft/ms-tpm-20-ref;branch=master" +# Since this is not built as a pseudo TA, we can only use it as a kernel module and not built in. +# The TEE supplicant is also needed to provide access to secure storage. +# Secure storage access required by OP-TEE fTPM TA +# is provided via OP-TEE supplicant that's not available during boot. +# Fix this once we replace this with the MS implementation +SRC_URI = "gitsm://github.com/microsoft/MSRSec;protocol=https;branch=master \ + file://0000-fix-ssl-fallthrough.patch \ + file://0001-add-enum-to-ta-flags.patch" + +SRCREV = "81abeb9fa968340438b4b0c08aa6685833f0bfa1" + +S = "${WORKDIR}/git" + +OPTEE_CLIENT_EXPORT = "${STAGING_DIR_HOST}${prefix}" +TEEC_EXPORT = "${STAGING_DIR_HOST}${prefix}" +TA_DEV_KIT_DIR = "${STAGING_INCDIR}/optee/export-user_ta" + +EXTRA_OEMAKE += '\ + CFG_FTPM_USE_WOLF=y \ + TA_DEV_KIT_DIR=${TA_DEV_KIT_DIR} \ + TA_CROSS_COMPILE=${TARGET_PREFIX} \ + CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_HOST} -I${WORKDIR}/optee-os" \ +' + +EXTRA_OEMAKE:append:aarch64:qemuall = "\ + CFG_ARM64_ta_arm64=y \ +" + +do_compile() { + sed -i 's/-mcpu=$(TA_CPU)//' TAs/optee_ta/fTPM/sub.mk + # there's also a secure variable storage TA called authvars + cd ${S}/TAs/optee_ta + oe_runmake ftpm +} + +do_install () { + mkdir -p ${D}/lib/optee_armtz + install -D -p -m 0644 ${S}/TAs/optee_ta/out/fTPM/${FTPM_UUID}.ta ${D}/lib/optee_armtz/ +} + +do_deploy () { + install -d ${DEPLOYDIR}/optee + install -D -p -m 0644 ${S}/TAs/optee_ta/out/fTPM/${FTPM_UUID}.stripped.elf ${DEPLOYDIR}/optee/ +} + +addtask deploy before do_build after do_install + +FILES:${PN} += "${nonarch_base_libdir}/optee_armtz/${FTPM_UUID}.ta" + +# Imports machine specific configs from staging to build +PACKAGE_ARCH = "${MACHINE_ARCH}" +INSANE_SKIP:${PN} += "ldflags" diff --git a/meta-arm/recipes-security/optee-ftpm/optee-os_%.bbappend b/meta-arm/recipes-security/optee-ftpm/optee-os_%.bbappend new file mode 100644 index 0000000..0cfa949 --- /dev/null +++ b/meta-arm/recipes-security/optee-ftpm/optee-os_%.bbappend @@ -0,0 +1,14 @@ +FTPM_UUID="bc50d971-d4c9-42c4-82cb-343fb7f37896" + +DEPENDS:append = "\ + ${@bb.utils.contains('MACHINE_FEATURES', \ + 'optee-ftpm', \ + 'optee-ftpm', \ + '' , \ + d)}" + +EXTRA_OEMAKE:append = "${@bb.utils.contains('MACHINE_FEATURES', \ + 'optee-ftpm', \ + 'CFG_EARLY_TA=y EARLY_TA_PATHS="${DEPLOY_DIR_IMAGE}/optee/${FTPM_UUID}.stripped.elf"', \ + '', \ + d)} "