151faada7SDouglas Raillard/* 2*4c700c15SGovindraj Raja * Copyright (c) 2017, Arm Limited and Contributors. All rights reserved. 351faada7SDouglas Raillard * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 551faada7SDouglas Raillard */ 651faada7SDouglas Raillard 751faada7SDouglas Raillard#include <arch.h> 851faada7SDouglas Raillard#include <asm_macros.S> 951faada7SDouglas Raillard#include <assert_macros.S> 1051faada7SDouglas Raillard 1151faada7SDouglas Raillard .globl update_stack_protector_canary 1251faada7SDouglas Raillard 1351faada7SDouglas Raillard/* ----------------------------------------------------------------------- 1451faada7SDouglas Raillard * void update_stack_protector_canary(void) 1551faada7SDouglas Raillard * 1651faada7SDouglas Raillard * Change the value of the canary used for stack smashing attacks protection. 1751faada7SDouglas Raillard * Note: This must be called when it is safe to call C code, but this cannot be 1851faada7SDouglas Raillard * called by C code. Doing this will make the check fail when the calling 1951faada7SDouglas Raillard * function returns. 2051faada7SDouglas Raillard * ----------------------------------------------------------------------- 2151faada7SDouglas Raillard */ 2251faada7SDouglas Raillard 2351faada7SDouglas Raillardfunc update_stack_protector_canary 2451faada7SDouglas Raillard /* Use x19 as it is callee-saved */ 2551faada7SDouglas Raillard mov x19, x30 2651faada7SDouglas Raillard bl plat_get_stack_protector_canary 2751faada7SDouglas Raillard 2851faada7SDouglas Raillard /* Update the canary with the returned value */ 2951faada7SDouglas Raillard adrp x1, __stack_chk_guard 3051faada7SDouglas Raillard str x0, [x1, #:lo12:__stack_chk_guard] 3151faada7SDouglas Raillard ret x19 3251faada7SDouglas Raillardendfunc update_stack_protector_canary 3351faada7SDouglas Raillard 3451faada7SDouglas Raillard 35