[PATCH] ppc64: firmware workaround
authorAnton Blanchard <anton@samba.org>
Sun, 1 May 2005 15:58:46 +0000 (08:58 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 1 May 2005 15:58:46 +0000 (08:58 -0700)
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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/ppc64/kernel/prom_init.c

index b0b784f9a4ea32a574528e5f09105b60cf8c1bf4..35ec42de962e2f42d331e72f3a09cac678e6486a 100644 (file)
@@ -1555,6 +1555,12 @@ static void __init scan_dt_build_strings(phandle node, unsigned long *mem_start,
        }
 }
 
+/*
+ * 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(phandle node, unsigned long *mem_start,
        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);