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