
From: Anton Blanchard <anton@samba.org>

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 <anton@samba.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 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);
_
