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 Raillardu_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