[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v4 3/4] xen: arm: enable stack protector feature
On 13/02/2025 14:20, Julien Grall wrote: Hi, On 14/01/2025 04:25, Volodymyr Babchuk wrote:Enable previously added CONFIG_STACK_PROTECTOR feature for ARM platform. We initialize stack protector very early, in head.S using boot_stack_chk_guard_setup. This ensures that all C code from the very beginning can use stack protector. Signed-off-by: Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx> --- In v4: - setup.c does not call boot_stack_chk_guard_setup() anymore, because the original implementation was removed andboot_stack_chk_guard_setup_early was renamed to boot_stack_chk_guard_setupIn v3: - Call boot_stack_chk_guard_setup_early from head.S to ensure that stack is protected from early boot stages - Call boot_stack_chk_guard_setup() later, when time subsystem is sufficiently initialized to provide values for the random number generator. In v2: - Reordered Kconfig entry --- xen/arch/arm/Kconfig | 1 + xen/arch/arm/arm64/head.S | 3 +++ 2 files changed, 4 insertions(+) diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig index a26d3e1182..8f1a3c7d74 100644 --- a/xen/arch/arm/Kconfig +++ b/xen/arch/arm/Kconfig @@ -16,6 +16,7 @@ config ARM select GENERIC_UART_INIT select HAS_ALTERNATIVE if HAS_VMAP select HAS_DEVICE_TREE + select HAS_STACK_PROTECTORThis is select stack protection for both 32-bit and 64-bit. Yet...select HAS_UBSAN config ARCH_DEFCONFIG diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S... you only modify arm64. Why?index 72c7b24498..5cbd62af86 100644 --- a/xen/arch/arm/arm64/head.S +++ b/xen/arch/arm/arm64/head.S @@ -250,6 +250,9 @@ real_start_efi: #endif PRINT("- Boot CPU booting -\r\n") +#ifdef CONFIG_STACK_PROTECTOR + bl boot_stack_chk_guard_setup +#endifI don't think you can call a C function this early:* The stack is not set (it is not clear why would the function not use it)* The MMU is not turned on Just to expand, this is a problem because Xen may not be loaded with VA == PA. So depending on how the GCC generated boot_stack_chk_guard_setup, the global variable may be accessed with an absolution address (this would be the VA). This means we could overwrite "random" memory. * We don't follow the AAPCSIf you want to call from assembly, then I think it just needs to be called before launch. Actually we only setup the stack in launch. So I guess some re-ordering is needed to setup the stack earlier. Cheers, -- Julien Grall
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |