xref: /aosp_15_r20/external/arm-trusted-firmware/drivers/auth/mbedtls/mbedtls_common.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #include <assert.h>
8*54fd6939SJiyong Park #include <stddef.h>
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park /* mbed TLS headers */
11*54fd6939SJiyong Park #include <mbedtls/memory_buffer_alloc.h>
12*54fd6939SJiyong Park #include <mbedtls/platform.h>
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #include <common/debug.h>
15*54fd6939SJiyong Park #include <drivers/auth/mbedtls/mbedtls_common.h>
16*54fd6939SJiyong Park #include <drivers/auth/mbedtls/mbedtls_config.h>
17*54fd6939SJiyong Park #include <plat/common/platform.h>
18*54fd6939SJiyong Park 
cleanup(void)19*54fd6939SJiyong Park static void cleanup(void)
20*54fd6939SJiyong Park {
21*54fd6939SJiyong Park 	ERROR("EXIT from BL2\n");
22*54fd6939SJiyong Park 	panic();
23*54fd6939SJiyong Park }
24*54fd6939SJiyong Park 
25*54fd6939SJiyong Park /*
26*54fd6939SJiyong Park  * mbed TLS initialization function
27*54fd6939SJiyong Park  */
mbedtls_init(void)28*54fd6939SJiyong Park void mbedtls_init(void)
29*54fd6939SJiyong Park {
30*54fd6939SJiyong Park 	static int ready;
31*54fd6939SJiyong Park 	void *heap_addr;
32*54fd6939SJiyong Park 	size_t heap_size = 0;
33*54fd6939SJiyong Park 	int err;
34*54fd6939SJiyong Park 
35*54fd6939SJiyong Park 	if (!ready) {
36*54fd6939SJiyong Park 		if (atexit(cleanup))
37*54fd6939SJiyong Park 			panic();
38*54fd6939SJiyong Park 
39*54fd6939SJiyong Park 		err = plat_get_mbedtls_heap(&heap_addr, &heap_size);
40*54fd6939SJiyong Park 
41*54fd6939SJiyong Park 		/* Ensure heap setup is proper */
42*54fd6939SJiyong Park 		if (err < 0) {
43*54fd6939SJiyong Park 			ERROR("Mbed TLS failed to get a heap\n");
44*54fd6939SJiyong Park 			panic();
45*54fd6939SJiyong Park 		}
46*54fd6939SJiyong Park 		assert(heap_size >= TF_MBEDTLS_HEAP_SIZE);
47*54fd6939SJiyong Park 
48*54fd6939SJiyong Park 		/* Initialize the mbed TLS heap */
49*54fd6939SJiyong Park 		mbedtls_memory_buffer_alloc_init(heap_addr, heap_size);
50*54fd6939SJiyong Park 
51*54fd6939SJiyong Park #ifdef MBEDTLS_PLATFORM_SNPRINTF_ALT
52*54fd6939SJiyong Park 		mbedtls_platform_set_snprintf(snprintf);
53*54fd6939SJiyong Park #endif
54*54fd6939SJiyong Park 		ready = 1;
55*54fd6939SJiyong Park 	}
56*54fd6939SJiyong Park }
57*54fd6939SJiyong Park 
58*54fd6939SJiyong Park /*
59*54fd6939SJiyong Park  * The following helper function simply returns the default allocated heap.
60*54fd6939SJiyong Park  * It can be used by platforms for their plat_get_mbedtls_heap() implementation.
61*54fd6939SJiyong Park  */
get_mbedtls_heap_helper(void ** heap_addr,size_t * heap_size)62*54fd6939SJiyong Park int get_mbedtls_heap_helper(void **heap_addr, size_t *heap_size)
63*54fd6939SJiyong Park {
64*54fd6939SJiyong Park 	static unsigned char heap[TF_MBEDTLS_HEAP_SIZE];
65*54fd6939SJiyong Park 
66*54fd6939SJiyong Park 	assert(heap_addr != NULL);
67*54fd6939SJiyong Park 	assert(heap_size != NULL);
68*54fd6939SJiyong Park 
69*54fd6939SJiyong Park 	*heap_addr = heap;
70*54fd6939SJiyong Park 	*heap_size = sizeof(heap);
71*54fd6939SJiyong Park 	return 0;
72*54fd6939SJiyong Park }
73