xref: /rk3399_ARM-atf/plat/arm/board/fvp/fvp_stack_protector.c (revision 9a207532f8216bf83fed0891fed9ed0bc72ca450)
151faada7SDouglas Raillard /*
251faada7SDouglas Raillard  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
351faada7SDouglas Raillard  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
551faada7SDouglas Raillard  */
651faada7SDouglas Raillard 
751faada7SDouglas Raillard #include <stdint.h>
851faada7SDouglas Raillard 
9*09d40e0eSAntonio Nino Diaz #include <arch_helpers.h>
10*09d40e0eSAntonio Nino Diaz #include <plat/common/platform.h>
11*09d40e0eSAntonio Nino Diaz 
1251faada7SDouglas Raillard #define RANDOM_CANARY_VALUE ((u_register_t) 3288484550995823360ULL)
1351faada7SDouglas Raillard 
plat_get_stack_protector_canary(void)1451faada7SDouglas Raillard u_register_t plat_get_stack_protector_canary(void)
1551faada7SDouglas Raillard {
1651faada7SDouglas Raillard 	/*
1751faada7SDouglas Raillard 	 * Ideally, a random number should be returned instead of the
1851faada7SDouglas Raillard 	 * combination of a timer's value and a compile-time constant. As the
1951faada7SDouglas Raillard 	 * FVP does not have any random number generator, this is better than
2051faada7SDouglas Raillard 	 * nothing but not necessarily really secure.
2151faada7SDouglas Raillard 	 */
2251faada7SDouglas Raillard 	return RANDOM_CANARY_VALUE ^ read_cntpct_el0();
2351faada7SDouglas Raillard }
2451faada7SDouglas Raillard 
25