1e6d2aea1Sdp-arm /* 2e6d2aea1Sdp-arm * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3e6d2aea1Sdp-arm * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 5e6d2aea1Sdp-arm */ 6e6d2aea1Sdp-arm 7e6d2aea1Sdp-arm #include <arch_helpers.h> 809d40e0eSAntonio Nino Diaz #include <common/debug.h> 909d40e0eSAntonio Nino Diaz #include <lib/utils.h> 10*cb5f0faaSAndre Przywara #include <plat/common/plat_trng.h> 11234bc7f8SAntonio Nino Diaz #include <platform_def.h> 1209d40e0eSAntonio Nino Diaz plat_get_stack_protector_canary(void)13e6d2aea1Sdp-armu_register_t plat_get_stack_protector_canary(void) 14e6d2aea1Sdp-arm { 15543f0d8bSAndre Przywara uint64_t entropy; 16e6d2aea1Sdp-arm 17*cb5f0faaSAndre Przywara if (!plat_get_entropy(&entropy)) { 18e6d2aea1Sdp-arm ERROR("Not enough entropy to initialize canary value\n"); 19e6d2aea1Sdp-arm panic(); 20e6d2aea1Sdp-arm } 21e6d2aea1Sdp-arm 22543f0d8bSAndre Przywara if (sizeof(entropy) == sizeof(u_register_t)) { 23543f0d8bSAndre Przywara return entropy; 24543f0d8bSAndre Przywara } 25543f0d8bSAndre Przywara 26543f0d8bSAndre Przywara return (entropy & 0xffffffffULL) ^ (entropy >> 32); 27e6d2aea1Sdp-arm } 28