From patchwork Fri Apr 12 10:34:02 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suzuki K Poulose X-Patchwork-Id: 13627596 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A0603C4345F for ; Fri, 12 Apr 2024 10:38:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=uofsr+2cYskA4+ehyC4PscGmKD8CnPJPMIu2mY9d1ZI=; b=NgViONoJfbQ7gM huMKuUDO3m3ni1+F3Dw9P3Vu+x8SL82EC/4Fs6E6Xg3uTJXC5cKGB80hpdwklVINyAY7QPuLsXiaB zkFS38UsrRnj5MeN8YGPvJhzLc9oZNkQwywbkdALENo22XjmsfI2uHygC1M0vO/HO+yW0907S04OQ sL8qpgZ4epjGzqgm7anJcFa9SAG6kLXzcYioZX6jakyPbTPb46o1ihxUxWkO5UEREnCrFTuhlXEk3 uBko07YWNTOtaGb1VPVBJ6XJVrUPZLBSbY5Qi2g5U/Mp5CKwQeo57Q2RlgVcekXULqHOe5bzP/aeS Ha/M0x2BF1LCcm51dzZA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvEIk-0000000Giwe-3vGG; Fri, 12 Apr 2024 10:38:34 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rvEFV-0000000Ggy2-3xty for linux-arm-kernel@lists.infradead.org; Fri, 12 Apr 2024 10:35:21 +0000 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 B2DC4113E; Fri, 12 Apr 2024 03:35:42 -0700 (PDT) Received: from ewhatever.cambridge.arm.com (ewhatever.cambridge.arm.com [10.1.197.1]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id A82663F64C; Fri, 12 Apr 2024 03:35:11 -0700 (PDT) From: Suzuki K Poulose To: kvmarm@lists.linux.dev Cc: kvm@vger.kernel.org, linux-coco@lists.linux.dev, linux-arm-kernel@lists.infradead.org, maz@kernel.org, alexandru.elisei@arm.com, joey.gouly@arm.com, steven.price@arm.com, james.morse@arm.com, oliver.upton@linux.dev, yuzenghui@huawei.com, andrew.jones@linux.dev, eric.auger@redhat.com, Suzuki K Poulose Subject: [kvm-unit-tests PATCH 27/33] arm: realm: add RSI interface for attestation measurements Date: Fri, 12 Apr 2024 11:34:02 +0100 Message-Id: <20240412103408.2706058-28-suzuki.poulose@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240412103408.2706058-1-suzuki.poulose@arm.com> References: <20240412103408.2706058-1-suzuki.poulose@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240412_033514_380107_7E65A7E0 X-CRM114-Status: UNSURE ( 9.95 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Add wrappers for the Attestation and measurement related RSI calls. These will be later used in the test cases Signed-off-by: Suzuki K Poulose --- lib/arm64/asm/rsi.h | 10 +++++++++ lib/arm64/rsi.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/lib/arm64/asm/rsi.h b/lib/arm64/asm/rsi.h index 0b726684..2566c000 100644 --- a/lib/arm64/asm/rsi.h +++ b/lib/arm64/asm/rsi.h @@ -29,6 +29,16 @@ int rsi_invoke(unsigned int function_id, unsigned long arg0, int __rsi_get_version(unsigned long ver, struct smccc_result *res); int rsi_get_version(unsigned long ver); +int rsi_attest_token_init(unsigned long *challenge, unsigned long *max_size); +int rsi_attest_token_continue(phys_addr_t addr, + unsigned long offset, + unsigned long size, + unsigned long *len); +void rsi_extend_measurement(unsigned int index, unsigned long size, + unsigned long *measurement, + struct smccc_result *res); +void rsi_read_measurement(unsigned int index, struct smccc_result *res); + static inline bool is_realm(void) { return rsi_present; diff --git a/lib/arm64/rsi.c b/lib/arm64/rsi.c index e58d9660..8fe672fc 100644 --- a/lib/arm64/rsi.c +++ b/lib/arm64/rsi.c @@ -134,3 +134,55 @@ void arm_set_memory_shared(unsigned long start, unsigned long size) { arm_set_memory_state(start, size, RIPAS_EMPTY, RSI_CHANGE_DESTROYED); } + +int rsi_attest_token_init(unsigned long *challenge, unsigned long *max_size) +{ + struct smccc_result res; + + rsi_invoke(SMC_RSI_ATTEST_TOKEN_INIT, + challenge[0], challenge[1], challenge[2], + challenge[3], challenge[4], challenge[5], + challenge[6], challenge[7], 0, 0, 0, &res); + + if (max_size) + *max_size = res.r1; + return res.r0; +} + +int rsi_attest_token_continue(phys_addr_t addr, + unsigned long offset, + unsigned long size, + unsigned long *len) +{ + struct smccc_result res = { 0 }; + + rsi_invoke(SMC_RSI_ATTEST_TOKEN_CONTINUE, addr, offset, size, + 0, 0, 0, 0, 0, 0, 0, 0, &res); + switch (res.r0) { + case RSI_SUCCESS: + case RSI_INCOMPLETE: + if (len) + *len = res.r1; + /* Fall through */ + default: + break; + } + return res.r0; +} + +void rsi_extend_measurement(unsigned int index, unsigned long size, + unsigned long *measurement, struct smccc_result *res) +{ + rsi_invoke(SMC_RSI_MEASUREMENT_EXTEND, index, size, + measurement[0], measurement[1], + measurement[2], measurement[3], + measurement[4], measurement[5], + measurement[6], measurement[7], + 0, res); +} + +void rsi_read_measurement(unsigned int index, struct smccc_result *res) +{ + rsi_invoke(SMC_RSI_MEASUREMENT_READ, index, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, res); +}