From: Anton Blanchard Recent gcc 4.0 testing uncovered a firmware issue. Some properties are larger than 31 bytes and due to gcc 4.0s better stack allocation this overflow ran over non volatile register storage. Signed-off-by: Anton Blanchard Signed-off-by: Andrew Morton --- arch/ppc64/kernel/prom_init.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) diff -puN arch/ppc64/kernel/prom_init.c~ppc64-firmware-workaround arch/ppc64/kernel/prom_init.c --- 25/arch/ppc64/kernel/prom_init.c~ppc64-firmware-workaround 2005-04-29 18:12:18.932364072 -0700 +++ 25-akpm/arch/ppc64/kernel/prom_init.c 2005-04-29 18:12:18.937363312 -0700 @@ -1555,6 +1555,12 @@ static void __init scan_dt_build_strings } } +/* + * The Open Firmware 1275 specification states properties must be 31 bytes or + * less, however not all firmwares obey this. Make it 64 bytes to be safe. + */ +#define MAX_PROPERTY_NAME 64 + static void __init scan_dt_build_struct(phandle node, unsigned long *mem_start, unsigned long *mem_end) { @@ -1564,7 +1570,7 @@ static void __init scan_dt_build_struct( unsigned long soff; unsigned char *valp; unsigned long offset = reloc_offset(); - char pname[32]; + char pname[MAX_PROPERTY_NAME]; char *path; path = RELOC(prom_scratch); _