blob: 7e20b2e3d43bcc6f8e373d8bbfb2b17cf5a3fd21 [file] [log] [blame]
Tamas Band2b2f092019-01-23 22:29:14 +00001/*
David Vinczee13a48b2020-01-08 17:42:30 +01002 * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
Tamas Band2b2f092019-01-23 22:29:14 +00003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#include "tfm_api.h"
9#include "tfm_secure_api.h"
10#include "attestation.h"
Jamie Foxcc31d402019-01-28 17:13:52 +000011#include "psa/initial_attestation.h"
Tamas Band2b2f092019-01-23 22:29:14 +000012#include "bl2/include/tfm_boot_status.h"
13
Kevin Peng2ed30222019-04-30 09:26:11 +080014#ifdef TFM_PSA_API
15extern int32_t g_attest_caller_id;
16#endif
17
Tamas Band2b2f092019-01-23 22:29:14 +000018enum psa_attest_err_t
19attest_check_memory_access(void *addr,
20 uint32_t size,
21 enum attest_memory_access_t access)
22{
Tamas Band2b2f092019-01-23 22:29:14 +000023 enum psa_attest_err_t attest_res = PSA_ATTEST_ERR_SUCCESS;
Kevin Peng2ed30222019-04-30 09:26:11 +080024#ifndef TFM_PSA_API
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010025 int32_t tfm_res;
Tamas Band2b2f092019-01-23 22:29:14 +000026
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010027 tfm_res = tfm_core_memory_permission_check(addr, size, (int32_t)access);
Tamas Band2b2f092019-01-23 22:29:14 +000028 if (tfm_res) {
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010029 attest_res = PSA_ATTEST_ERR_INVALID_INPUT;
30 }
Kevin Peng2ed30222019-04-30 09:26:11 +080031#endif
Tamas Band2b2f092019-01-23 22:29:14 +000032
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010033 return attest_res;
Tamas Band2b2f092019-01-23 22:29:14 +000034}
35
36enum psa_attest_err_t
37attest_get_caller_client_id(int32_t *caller_id)
38{
Tamas Band2b2f092019-01-23 22:29:14 +000039 enum psa_attest_err_t attest_res = PSA_ATTEST_ERR_SUCCESS;
Kevin Peng2ed30222019-04-30 09:26:11 +080040#ifndef TFM_PSA_API
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010041 int32_t tfm_res;
Tamas Band2b2f092019-01-23 22:29:14 +000042
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010043 tfm_res = tfm_core_get_caller_client_id(caller_id);
Tamas Band2b2f092019-01-23 22:29:14 +000044 if (tfm_res) {
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010045 attest_res = PSA_ATTEST_ERR_CLAIM_UNAVAILABLE;
46 }
Kevin Peng2ed30222019-04-30 09:26:11 +080047#else
48 *caller_id = g_attest_caller_id;
49#endif
Tamas Band2b2f092019-01-23 22:29:14 +000050
51 return attest_res;
52}
53
54enum psa_attest_err_t
Tamas Bana24ce042019-02-20 11:50:22 +000055attest_get_boot_data(uint8_t major_type,
56 struct tfm_boot_data *boot_data,
57 uint32_t len)
Tamas Band2b2f092019-01-23 22:29:14 +000058{
Tamas Band2b2f092019-01-23 22:29:14 +000059 enum psa_attest_err_t attest_res = PSA_ATTEST_ERR_SUCCESS;
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010060 int32_t tfm_res;
Tamas Banca682b22019-01-29 22:03:43 +000061
Tamas Bana24ce042019-02-20 11:50:22 +000062 tfm_res = tfm_core_get_boot_data(major_type, boot_data, len);
Hugues de Valonba1fa9a2019-06-18 16:12:54 +010063 if (tfm_res != (int32_t)TFM_SUCCESS) {
Tamas Band2b2f092019-01-23 22:29:14 +000064 attest_res = PSA_ATTEST_ERR_INIT_FAILED;
65 }
Tamas Band2b2f092019-01-23 22:29:14 +000066
67 return attest_res;
68}