xref: /rk3399_ARM-atf/plat/qemu/common/qemu_stack_protector.c (revision 301d27d998892c054dec925264f81b11dcd64822)
1*301d27d9SRadoslaw Biernacki /*
2*301d27d9SRadoslaw Biernacki  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3*301d27d9SRadoslaw Biernacki  *
4*301d27d9SRadoslaw Biernacki  * SPDX-License-Identifier: BSD-3-Clause
5*301d27d9SRadoslaw Biernacki  */
6*301d27d9SRadoslaw Biernacki 
7*301d27d9SRadoslaw Biernacki #include <stdint.h>
8*301d27d9SRadoslaw Biernacki 
9*301d27d9SRadoslaw Biernacki #include <arch_helpers.h>
10*301d27d9SRadoslaw Biernacki #include <plat/common/platform.h>
11*301d27d9SRadoslaw Biernacki 
12*301d27d9SRadoslaw Biernacki #define RANDOM_CANARY_VALUE ((u_register_t) 3288484550995823360ULL)
13*301d27d9SRadoslaw Biernacki 
14*301d27d9SRadoslaw Biernacki u_register_t plat_get_stack_protector_canary(void)
15*301d27d9SRadoslaw Biernacki {
16*301d27d9SRadoslaw Biernacki 	/*
17*301d27d9SRadoslaw Biernacki 	 * Ideally, a random number should be returned instead of the
18*301d27d9SRadoslaw Biernacki 	 * combination of a timer's value and a compile-time constant.
19*301d27d9SRadoslaw Biernacki 	 * As the virt platform does not have any random number generator,
20*301d27d9SRadoslaw Biernacki 	 * this is better than nothing but not necessarily really secure.
21*301d27d9SRadoslaw Biernacki 	 */
22*301d27d9SRadoslaw Biernacki 	return RANDOM_CANARY_VALUE ^ read_cntpct_el0();
23*301d27d9SRadoslaw Biernacki }
24*301d27d9SRadoslaw Biernacki 
25