mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 01:54:22 +00:00

At the moment we only support for FEAT_RNG to be either unconditionally compiled in, or to be not supported at all. Add support for runtime detection (FEAT_RNG=2), by splitting is_armv8_5_rng_present() into an ID register reading function and a second function to report the support status. That function considers both build time settings and runtime information (if needed), and is used before we access the RNDRRS system register. Change the QEMU platform default to the now supported dynamic option (=2), so the right decision can be made by the code at runtime. Change-Id: I1a4a538d5ad395fead7324f297d0056bda4f84cb Signed-off-by: Andre Przywara <andre.przywara@arm.com>
30 lines
785 B
C
30 lines
785 B
C
/*
|
|
* Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <arch_helpers.h>
|
|
#include <arch_features.h>
|
|
#include <plat/common/platform.h>
|
|
|
|
#define RANDOM_CANARY_VALUE ((u_register_t) 3288484550995823360ULL)
|
|
|
|
u_register_t plat_get_stack_protector_canary(void)
|
|
{
|
|
/* Use the RNDR instruction if the CPU supports it */
|
|
if (is_feat_rng_supported()) {
|
|
return read_rndr();
|
|
}
|
|
|
|
/*
|
|
* Ideally, a random number should be returned above. If a random
|
|
* number generator is not supported, return instead a
|
|
* combination of a timer's value and a compile-time constant.
|
|
* This is better than nothing but not necessarily really secure.
|
|
*/
|
|
return RANDOM_CANARY_VALUE ^ read_cntpct_el0();
|
|
}
|
|
|