ARM hangs on boot with CONFIG_FORTIFY_SOURCE and ATAGs
cover ARM hangs on boot with CONFIG_FORTIFY_SOURCE and ATAGs
From: Berto Furth <[email protected]>
ARM may hang on boot with ATAGS and CONFIG_FORTIFY_SOURCE.
An ARM 32 device may hang on boot after the
Uncompressing Linux... done, booting the kernel.
message if the bootloader passes a command line via ATAG to the kernel and CONFIG_FORTIFY_SOURCE is enabled.
Workaround : Disable CONFIG_FORTIFY_SOURCE in kernel build options.
Details : I am trying to build v5.14.0-rc5 for an old 32 bit arm NAS system (Cavium CNS3420 based Seagate Central).
The embedded u-boot bootloader on this system is very old and uses ATAGs to pass parameters to the kernel.
I am confident that the hang problem is occurring because of the fortified string functions which check the declared size of string objects before working with them.
My tests show that when booting using kernel v4.19.195 (which does not have fortified string functions) or with kernel v5.14.0-rc5 with CONFIG_FORTIFY_SOURCE disabled, that the system does not hang on boot.
Berto Furth (1):
Make cmdline ATAG work with fortified string fn
arch/arm/include/uapi/asm/setup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
base-commit: d6d09a6942050f21b065a134169002b4d6b701ef
Signature · 7 lines
2.32.0 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
PATCH 1/1 Set cmdline array size to COMMAND_LINE_SIZE
From: Berto Furth <[email protected]>
Use maximum size in declaration of ATAG cmdline string.
The declaration of the cmdline string in the ATAG type tag_cmdline uses an array size of 1. This means that the fortified versions of string functions (like strlcpy) will panic when they see that the actual contents of the cmdline string are bigger than 1 byte.
Fix is to simply indicate that the string can actually be up to COMMAND_LINE_SIZE bytes by setting the array size as such.
--- arch/arm/include/uapi/asm/setup.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/include/uapi/asm/setup.h +1 -1
@@ -124,7 +124,7 @@ struct tag_videolfb {#define ATAG_CMDLINE 0x54410009struct tag_cmdline { -char cmdline[1 ];/* this is the minimum size */ +char cmdline[COMMAND_LINE_SIZE ]; };/* acorn RiscPC specific information */
Signature · 7 lines
2.32.0 _______________________________________________ linux-arm-kernel mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-arm-kernel