https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
Bug ID: 63293 Summary: [AArch64] can read from deallocated stack Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: jiong.wang at arm dot com With GCC: (GNU) 5.0.0 20140917 give the following testcase typedef double t; void bar (t*); t g () { t data[8192]; data[4293] = data[4266] = 0; bar(data); return data[4293] + data[4266]; } Compiling with "-O2 -mno-lra -fomit-frame-pointer" we get: .cpu generic+fp+simd .file "test.c" .text .align 2 .global f .type f, %function f: add x1, x0, 4093 add x0, x0, 4096 ldr d1, [x1] ldr d0, [x0, 170] fadd d0, d1, d0 ret .size f, .-f .align 2 .global g .type g, %function g: sub sp, sp, #65536 fmov d0, xzr str x30, [sp, -16]! add x1, sp, 32768 add x0, sp, 16 str d0, [x1, 1376] str d0, [x1, 1592] bl bar add x0, sp, 32768 ldr x30, [sp], 16 ldr d0, [x0, 1376] add sp, sp, 65536 ldr d1, [x0, 1592] fadd d0, d1, d0 ret Note that at the end we have x0=sp+32768; sp+=65536; ldr [x0+1592] Which means the last load is from deallocated stack space. This is a silent wrong-code bug of the worst kind; programs could fail sporadically with this if an interrupt happens at the wrong instant in time and data was written onto the current stack.