If the BSS section is empty, then the function should return. If one does not check whether the BSS section is empty or not, then there is a risk of writing 0s outside of BSS section (which may contain critical data).
Fixes: dac84b66cc9a ("xen: arm64: initial build + config changes, start of day code") Signed-off-by: Ayan Kumar Halder <ayan.kumar.hal...@amd.com> --- Changes from :- v1..v2 - New patch introduced in v3. v3 - 1. Update the check in arm32 as well. 2. Drop the R-bs. xen/arch/arm/arm32/head.S | 3 +++ xen/arch/arm/arm64/head.S | 2 ++ 2 files changed, 5 insertions(+) diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S index a96d5d3503..4ff5c220bc 100644 --- a/xen/arch/arm/arm32/head.S +++ b/xen/arch/arm/arm32/head.S @@ -185,12 +185,15 @@ zero_bss: PRINT("- Zero BSS -\r\n") mov_w r0, __bss_start /* r0 := vaddr(__bss_start) */ mov_w r1, __bss_end /* r1 := vaddr(__bss_end) */ + cmp r1, r0 + beq skip_bss mov r2, #0 1: str r2, [r0], #4 cmp r0, r1 blo 1b +skip_bss: mov pc, lr ENDPROC(zero_bss) diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S index 14c3720d80..72c7b24498 100644 --- a/xen/arch/arm/arm64/head.S +++ b/xen/arch/arm/arm64/head.S @@ -346,6 +346,8 @@ FUNC_LOCAL(zero_bss) PRINT("- Zero BSS -\r\n") ldr x0, =__bss_start /* x0 := vaddr(__bss_start) */ ldr x1, =__bss_end /* x1 := vaddr(__bss_end) */ + cmp x1, x0 + beq skip_bss 1: str xzr, [x0], #8 cmp x0, x1 -- 2.25.1