mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00
feat(rme): add dummy platform token to RMMD
Add a dummy platform token to RMMD and return it on request. The platform token is requested with an SMC with the following parameters: * Fid (0xC40001B3). * Platform token PA (the platform token is copied at this address by the monitor). The challenge object needs to be passed by the caller in this buffer. * Platform token len. * Challenge object len. When calling the SMC, the platform token buffer received by EL3 contains the challenge object. It is not used on the FVP and is only printed to the log. Signed-off-by: Mate Toth-Pal <mate.toth-pal@arm.com> Signed-off-by: Subhasish Ghosh <subhasish.ghosh@arm.com> Change-Id: I8b2f1d54426c04e76d7a3baa6b0fbc40b0116348
This commit is contained in:
parent
319fb08438
commit
0f9159b7eb
10 changed files with 505 additions and 6 deletions
|
@ -2017,6 +2017,32 @@ state. This function must return a pointer to the ``entry_point_info`` structure
|
|||
(that was copied during ``bl31_early_platform_setup()``) if the image exists. It
|
||||
should return NULL otherwise.
|
||||
|
||||
Function : plat_get_cca_attest_token() [mandatory when ENABLE_RME == 1]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
::
|
||||
|
||||
Argument : uintptr_t, size_t *, uintptr_t, size_t
|
||||
Return : int
|
||||
|
||||
This function returns the Platform attestation token.
|
||||
|
||||
The parameters of the function are:
|
||||
|
||||
arg0 - A pointer to the buffer where the Platform token should be copied by
|
||||
this function. The buffer must be big enough to hold the Platform
|
||||
token.
|
||||
|
||||
arg1 - Contains the size (in bytes) of the buffer passed in arg0. The
|
||||
function returns the platform token length in this parameter.
|
||||
|
||||
arg2 - A pointer to the buffer where the challenge object is stored.
|
||||
|
||||
arg3 - The length of the challenge object in bytes. Possible values are 32,
|
||||
48 and 64.
|
||||
|
||||
The function returns 0 on success, -EINVAL on failure.
|
||||
|
||||
Function : bl31_plat_enable_mmu [optional]
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -302,6 +302,11 @@ plat_local_state_t plat_get_target_pwr_state(unsigned int lvl,
|
|||
const plat_local_state_t *states,
|
||||
unsigned int ncpu);
|
||||
|
||||
/*******************************************************************************
|
||||
* Mandatory BL31 functions when ENABLE_RME=1
|
||||
******************************************************************************/
|
||||
int plat_get_cca_attest_token(uintptr_t buf, size_t *len,
|
||||
uintptr_t hash, size_t hash_size);
|
||||
/*******************************************************************************
|
||||
* Optional BL31 functions (may be overridden)
|
||||
******************************************************************************/
|
||||
|
|
|
@ -77,6 +77,26 @@
|
|||
#define RMMD_ERR_INVAL -5
|
||||
#define RMMD_ERR_UNK -6
|
||||
|
||||
/*
|
||||
* Retrieve Platform token from EL3.
|
||||
* The arguments to this SMC are :
|
||||
* arg0 - Function ID.
|
||||
* arg1 - Platform attestation token buffer Physical address. (The challenge
|
||||
* object is passed in this buffer.)
|
||||
* arg2 - Platform attestation token buffer size (in bytes).
|
||||
* arg3 - Challenge object size (in bytes). It has be one of the defined SHA hash
|
||||
* sizes.
|
||||
* The return arguments are :
|
||||
* ret0 - Status / error.
|
||||
* ret1 - Size of the platform token if successful.
|
||||
*/
|
||||
#define RMMD_ATTEST_GET_PLAT_TOKEN RMM_FID(SMC_64, ATTEST_GET_PLAT_TOKEN)
|
||||
|
||||
/* Acceptable SHA sizes for Challenge object */
|
||||
#define SHA256_DIGEST_SIZE 32U
|
||||
#define SHA384_DIGEST_SIZE 48U
|
||||
#define SHA512_DIGEST_SIZE 64U
|
||||
|
||||
#ifndef __ASSEMBLER__
|
||||
#include <stdint.h>
|
||||
|
||||
|
|
317
plat/arm/board/fvp/fvp_plat_attest_token.c
Normal file
317
plat/arm/board/fvp/fvp_plat_attest_token.c
Normal file
|
@ -0,0 +1,317 @@
|
|||
/*
|
||||
* Copyright (c) 2022, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Using hardcoded token values for AEM FVP */
|
||||
static uint8_t platform_token[] = {
|
||||
0xD2, 0x84, 0x40, 0xA0, 0x59, 0x08, 0xB1, 0xD9,
|
||||
0x61, 0xA8, 0xA9, 0x0A, 0x58, 0x40, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x3A, 0x00,
|
||||
0x01, 0x24, 0xFA, 0x58, 0x40, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
|
||||
0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x3A, 0x00, 0x01,
|
||||
0x25, 0x00, 0x58, 0x41, 0x01, 0x0B, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
|
||||
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x12, 0x78, 0x1C,
|
||||
0x68, 0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x61,
|
||||
0x72, 0x6D, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x43,
|
||||
0x43, 0x41, 0x2D, 0x53, 0x53, 0x44, 0x2F, 0x31,
|
||||
0x2E, 0x30, 0x2E, 0x30, 0x0B, 0x58, 0x19, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0x3A, 0x00, 0x01, 0x24, 0xF7, 0x78, 0x1C, 0x68,
|
||||
0x74, 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x61, 0x72,
|
||||
0x6D, 0x2E, 0x63, 0x6F, 0x6D, 0x2F, 0x43, 0x43,
|
||||
0x41, 0x2D, 0x53, 0x53, 0x44, 0x2F, 0x31, 0x2E,
|
||||
0x30, 0x2E, 0x30, 0x3A, 0x00, 0x01, 0x25, 0x01,
|
||||
0x78, 0x18, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3A,
|
||||
0x2F, 0x2F, 0x63, 0x63, 0x61, 0x5F, 0x76, 0x65,
|
||||
0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x2E, 0x6F,
|
||||
0x72, 0x67, 0x3A, 0x00, 0x01, 0x24, 0xF9, 0x19,
|
||||
0x30, 0x00, 0x3A, 0x00, 0x01, 0x24, 0xFD, 0x8D,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0xA4, 0x02, 0x58, 0x40, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
|
||||
0xCC, 0xCC, 0xCC, 0xCC, 0x05, 0x58, 0x40, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD,
|
||||
0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0x04,
|
||||
0x65, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x06, 0x08,
|
||||
0x58, 0x40, 0xD3, 0x8A, 0x41, 0xA6, 0xC1, 0x29,
|
||||
0x98, 0x18, 0xB5, 0x16, 0x9C, 0x21, 0x78, 0xB7,
|
||||
0x92, 0xF8, 0x26, 0x82, 0x76, 0x2F, 0x26, 0x45,
|
||||
0x21, 0x6D, 0x0C, 0x21, 0x06, 0xF4, 0xB5, 0xE3,
|
||||
0xA8, 0x07, 0xD1, 0xD6, 0x8C, 0x73, 0xA5, 0xC8,
|
||||
0x16, 0xD8, 0x30, 0x68, 0xC0, 0xA4, 0x77, 0xE2,
|
||||
0x1E, 0xD2, 0x17, 0x86, 0xC3, 0x68, 0x82, 0xDD,
|
||||
0x21, 0x1B, 0xA3, 0xE2, 0xC7, 0xF7, 0x06, 0x33,
|
||||
0xB0, 0x3A
|
||||
};
|
||||
|
||||
int plat_get_cca_attest_token(uintptr_t buf, size_t *len,
|
||||
uintptr_t hash, size_t hash_size)
|
||||
{
|
||||
(void)hash;
|
||||
(void)hash_size;
|
||||
|
||||
if (*len < sizeof(platform_token)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
(void)memcpy((void *)buf, platform_token, sizeof(platform_token));
|
||||
*len = sizeof(platform_token);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -103,7 +103,7 @@
|
|||
# if SPM_MM
|
||||
# define PLAT_ARM_MMAP_ENTRIES 10
|
||||
# if ENABLE_RME
|
||||
# define MAX_XLAT_TABLES 10
|
||||
# define MAX_XLAT_TABLES 11
|
||||
# else
|
||||
# define MAX_XLAT_TABLES 9
|
||||
# endif
|
||||
|
@ -113,13 +113,13 @@
|
|||
# define PLAT_ARM_MMAP_ENTRIES 9
|
||||
# if USE_DEBUGFS
|
||||
# if ENABLE_RME
|
||||
# define MAX_XLAT_TABLES 9
|
||||
# define MAX_XLAT_TABLES 10
|
||||
# else
|
||||
# define MAX_XLAT_TABLES 8
|
||||
# endif
|
||||
# else
|
||||
# if ENABLE_RME
|
||||
# define MAX_XLAT_TABLES 8
|
||||
# define MAX_XLAT_TABLES 9
|
||||
# else
|
||||
# define MAX_XLAT_TABLES 7
|
||||
# endif
|
||||
|
|
|
@ -193,6 +193,7 @@ endif
|
|||
|
||||
ifeq (${ENABLE_RME},1)
|
||||
BL2_SOURCES += plat/arm/board/fvp/aarch64/fvp_helpers.S
|
||||
BL31_SOURCES += plat/arm/board/fvp/fvp_plat_attest_token.c
|
||||
endif
|
||||
|
||||
ifeq (${BL2_AT_EL3},1)
|
||||
|
@ -344,6 +345,10 @@ else # AArch64
|
|||
endif
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_RME},1)
|
||||
BL31_CPPFLAGS += -DPLAT_XLAT_TABLES_DYNAMIC
|
||||
endif
|
||||
|
||||
ifeq (${ALLOW_RO_XLAT_TABLES}, 1)
|
||||
ifeq (${ARCH},aarch32)
|
||||
BL32_CPPFLAGS += -DPLAT_RO_XLAT_TABLES
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2021-2022, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
@ -12,7 +12,8 @@ include services/std_svc/rmmd/trp/trp.mk
|
|||
|
||||
RMMD_SOURCES += $(addprefix services/std_svc/rmmd/, \
|
||||
${ARCH}/rmmd_helpers.S \
|
||||
rmmd_main.c)
|
||||
rmmd_main.c \
|
||||
rmmd_attest.c)
|
||||
|
||||
# Let the top-level Makefile know that we intend to include RMM image
|
||||
NEED_RMM := yes
|
||||
|
|
118
services/std_svc/rmmd/rmmd_attest.c
Normal file
118
services/std_svc/rmmd/rmmd_attest.c
Normal file
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright (c) 2022, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/spinlock.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include "rmmd_private.h"
|
||||
#include <services/rmmd_svc.h>
|
||||
|
||||
static spinlock_t lock;
|
||||
|
||||
/* For printing Realm attestation token hash */
|
||||
#define DIGITS_PER_BYTE 2UL
|
||||
#define LENGTH_OF_TERMINATING_ZERO_IN_BYTES 1UL
|
||||
#define BYTES_PER_LINE_BASE 4UL
|
||||
|
||||
static void print_challenge(uint8_t *hash, size_t hash_size)
|
||||
{
|
||||
size_t leftover;
|
||||
/*
|
||||
* bytes_per_line is always a power of two, so it can be used to
|
||||
* construct mask with it when it is necessary to count remainder.
|
||||
*
|
||||
*/
|
||||
const size_t bytes_per_line = 1 << BYTES_PER_LINE_BASE;
|
||||
char hash_text[(1 << BYTES_PER_LINE_BASE) * DIGITS_PER_BYTE +
|
||||
LENGTH_OF_TERMINATING_ZERO_IN_BYTES];
|
||||
const char hex_chars[] = {'0', '1', '2', '3', '4', '5', '6', '7',
|
||||
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0U; i < hash_size; ++i) {
|
||||
hash_text[(i & (bytes_per_line - 1)) * DIGITS_PER_BYTE] =
|
||||
hex_chars[hash[i] >> 4];
|
||||
hash_text[(i & (bytes_per_line - 1)) * DIGITS_PER_BYTE + 1] =
|
||||
hex_chars[hash[i] & 0x0f];
|
||||
if (((i + 1) & (bytes_per_line - 1)) == 0U) {
|
||||
hash_text[bytes_per_line * DIGITS_PER_BYTE] = '\0';
|
||||
VERBOSE("hash part %u = %s\n",
|
||||
(i >> BYTES_PER_LINE_BASE) + 1, hash_text);
|
||||
}
|
||||
}
|
||||
|
||||
leftover = (size_t)i & (bytes_per_line - 1);
|
||||
|
||||
if (leftover != 0UL) {
|
||||
hash_text[leftover * DIGITS_PER_BYTE] = '\0';
|
||||
VERBOSE("hash part %u = %s\n", (i >> BYTES_PER_LINE_BASE) + 1,
|
||||
hash_text);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: Have different error codes for different errors so that the caller can
|
||||
* differentiate various error cases.
|
||||
*/
|
||||
int rmmd_attest_get_platform_token(uint64_t buf_pa, uint64_t *buf_len, uint64_t challenge_hash_len)
|
||||
{
|
||||
int err;
|
||||
uintptr_t va;
|
||||
uint8_t temp_buf[SHA512_DIGEST_SIZE];
|
||||
|
||||
/*
|
||||
* TODO: Currently we don't validate incoming buf_pa. This is a
|
||||
* prototype and we will need to allocate static buffer for EL3-RMM
|
||||
* communication.
|
||||
*/
|
||||
|
||||
/* We need a page of buffer to pass data */
|
||||
if (*buf_len != PAGE_SIZE) {
|
||||
ERROR("Invalid buffer length\n");
|
||||
return RMMD_ERR_INVAL;
|
||||
}
|
||||
|
||||
if ((challenge_hash_len != SHA256_DIGEST_SIZE) &&
|
||||
(challenge_hash_len != SHA384_DIGEST_SIZE) &&
|
||||
(challenge_hash_len != SHA512_DIGEST_SIZE)) {
|
||||
ERROR("Invalid hash size: %lu\n", challenge_hash_len);
|
||||
return RMMD_ERR_INVAL;
|
||||
}
|
||||
|
||||
spin_lock(&lock);
|
||||
|
||||
/* Map the buffer that was provided by the RMM. */
|
||||
err = mmap_add_dynamic_region_alloc_va(buf_pa, &va, PAGE_SIZE,
|
||||
MT_RW_DATA | MT_REALM);
|
||||
if (err != 0) {
|
||||
ERROR("mmap_add_dynamic_region_alloc_va failed: %d (%p).\n"
|
||||
, err, (void *)buf_pa);
|
||||
spin_unlock(&lock);
|
||||
return RMMD_ERR_NOMEM;
|
||||
}
|
||||
|
||||
(void)memcpy(temp_buf, (void *)va, challenge_hash_len);
|
||||
|
||||
print_challenge((uint8_t *)temp_buf, challenge_hash_len);
|
||||
|
||||
/* Get the platform token. */
|
||||
err = plat_get_cca_attest_token(va,
|
||||
buf_len, (uintptr_t)temp_buf, challenge_hash_len);
|
||||
|
||||
if (err != 0) {
|
||||
ERROR("Failed to get platform token: %d.\n", err);
|
||||
err = RMMD_ERR_UNK;
|
||||
}
|
||||
|
||||
/* Unmap RMM memory. */
|
||||
(void)mmap_remove_dynamic_region(va, PAGE_SIZE);
|
||||
spin_unlock(&lock);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
@ -372,6 +372,9 @@ uint64_t rmmd_rmm_el3_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2,
|
|||
case RMMD_GTSI_UNDELEGATE:
|
||||
ret = gpt_undelegate_pas(x1, PAGE_SIZE_4KB, SMC_FROM_REALM);
|
||||
SMC_RET1(handle, gpt_to_gts_error(ret, smc_fid, x1));
|
||||
case RMMD_ATTEST_GET_PLAT_TOKEN:
|
||||
ret = rmmd_attest_get_platform_token(x1, &x2, x3);
|
||||
SMC_RET2(handle, ret, x2);
|
||||
default:
|
||||
WARN("RMMD: Unsupported RMM-EL3 call 0x%08x\n", smc_fid);
|
||||
SMC_RET1(handle, SMC_UNK);
|
||||
|
|
|
@ -51,6 +51,10 @@ typedef struct rmmd_rmm_context {
|
|||
uint64_t rmmd_rmm_sync_entry(rmmd_rmm_context_t *ctx);
|
||||
__dead2 void rmmd_rmm_sync_exit(uint64_t rc);
|
||||
|
||||
/* Functions implementing attestation utilities for RMM */
|
||||
int rmmd_attest_get_platform_token(uint64_t buf_pa, uint64_t *buf_len,
|
||||
uint64_t challenge_hash_len);
|
||||
|
||||
/* Assembly helpers */
|
||||
uint64_t rmmd_rmm_enter(uint64_t *c_rt_ctx);
|
||||
void __dead2 rmmd_rmm_exit(uint64_t c_rt_ctx, uint64_t ret);
|
||||
|
|
Loading…
Add table
Reference in a new issue