stack_protect_prologue in cfgexpand.c and stack_protect_epilogue in function.c in GNU GCC 4.1 through 8 (under certain circumstances) generate instruction sequences when targeting ARM targets that spill the stack protector guard address, which allows bypassing the protection of -fstack-protector, -fstack-protector-all, -fstack-protector-strong, and -fstack-protector-explicit against stack overflow by controlling what the stack canary is compared against. Upstream Issue: https://gcc.gnu.org/viewcvs/gcc/trunk/gcc/config/arm/arm-protos.h?revision=266379&view=markup