1*4353bb20SYann Gautier /* 2*4353bb20SYann Gautier * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*4353bb20SYann Gautier * 4*4353bb20SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 5*4353bb20SYann Gautier */ 6*4353bb20SYann Gautier 7*4353bb20SYann Gautier #include <arch_helpers.h> 8*4353bb20SYann Gautier #include <platform.h> 9*4353bb20SYann Gautier #include <stdint.h> 10*4353bb20SYann Gautier 11*4353bb20SYann Gautier #define RANDOM_CANARY_VALUE 2144346116U 12*4353bb20SYann Gautier 13*4353bb20SYann Gautier u_register_t plat_get_stack_protector_canary(void) 14*4353bb20SYann Gautier { 15*4353bb20SYann Gautier /* 16*4353bb20SYann Gautier * Ideally, a random number should be returned instead of the 17*4353bb20SYann Gautier * combination of a timer's value and a compile-time constant. 18*4353bb20SYann Gautier */ 19*4353bb20SYann Gautier return RANDOM_CANARY_VALUE ^ (u_register_t)read_cntpct_el0(); 20*4353bb20SYann Gautier } 21*4353bb20SYann Gautier 22