xref: /rk3399_ARM-atf/lib/stack_protector/aarch64/asm_stack_protector.S (revision 72e8f2456af54b75a0a1d92aadfce0b4bcde6ba1)
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