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