summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch')
-rw-r--r--target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch86
1 files changed, 86 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch b/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch
new file mode 100644
index 0000000000..a4bc08adca
--- /dev/null
+++ b/target/linux/brcm47xx/patches-3.10/095-MIPS-BCM47XX-Fix-some-very-confused-types-and-data-c.patch
@@ -0,0 +1,86 @@
+From 855094d7e46eb14c597ca09631cf95a92909982d Mon Sep 17 00:00:00 2001
+From: Ilia Mirkin <imirkin@alum.mit.edu>
+Date: Fri, 6 Dec 2013 18:56:53 -0500
+Subject: [PATCH] MIPS: BCM47XX: Fix some very confused types and data
+ corruption
+
+Fix nvram_read_alpha2 copying too many bytes over the ssb_sprom
+structure. Also fix the arguments of the read_macaddr, although the code
+was technically not wrong before due to an extra dereference.
+
+Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
+Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
+Acked-by: John Crispin <blogic@openwrt.org>
+Patchwork: http://patchwork.linux-mips.org/patch/6211/
+---
+ arch/mips/bcm47xx/sprom.c | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+--- a/arch/mips/bcm47xx/sprom.c
++++ b/arch/mips/bcm47xx/sprom.c
+@@ -135,7 +135,7 @@ static void nvram_read_leddc(const char
+ }
+
+ static void nvram_read_macaddr(const char *prefix, const char *name,
+- u8 (*val)[6], bool fallback)
++ u8 val[6], bool fallback)
+ {
+ char buf[100];
+ int err;
+@@ -144,11 +144,11 @@ static void nvram_read_macaddr(const cha
+ if (err < 0)
+ return;
+
+- bcm47xx_nvram_parse_macaddr(buf, *val);
++ bcm47xx_nvram_parse_macaddr(buf, val);
+ }
+
+ static void nvram_read_alpha2(const char *prefix, const char *name,
+- char (*val)[2], bool fallback)
++ char val[2], bool fallback)
+ {
+ char buf[10];
+ int err;
+@@ -162,7 +162,7 @@ static void nvram_read_alpha2(const char
+ pr_warn("alpha2 is too long %s\n", buf);
+ return;
+ }
+- memcpy(val, buf, sizeof(val));
++ memcpy(val, buf, 2);
+ }
+
+ static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
+@@ -180,7 +180,7 @@ static void bcm47xx_fill_sprom_r1234589(
+ fallback);
+ nvram_read_s8(prefix, NULL, "ag1", &sprom->antenna_gain.a1, 0,
+ fallback);
+- nvram_read_alpha2(prefix, "ccode", &sprom->alpha2, fallback);
++ nvram_read_alpha2(prefix, "ccode", sprom->alpha2, fallback);
+ }
+
+ static void bcm47xx_fill_sprom_r12389(struct ssb_sprom *sprom,
+@@ -633,20 +633,20 @@ static void bcm47xx_fill_sprom_path_r45(
+ static void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom,
+ const char *prefix, bool fallback)
+ {
+- nvram_read_macaddr(prefix, "et0macaddr", &sprom->et0mac, fallback);
++ nvram_read_macaddr(prefix, "et0macaddr", sprom->et0mac, fallback);
+ nvram_read_u8(prefix, NULL, "et0mdcport", &sprom->et0mdcport, 0,
+ fallback);
+ nvram_read_u8(prefix, NULL, "et0phyaddr", &sprom->et0phyaddr, 0,
+ fallback);
+
+- nvram_read_macaddr(prefix, "et1macaddr", &sprom->et1mac, fallback);
++ nvram_read_macaddr(prefix, "et1macaddr", sprom->et1mac, fallback);
+ nvram_read_u8(prefix, NULL, "et1mdcport", &sprom->et1mdcport, 0,
+ fallback);
+ nvram_read_u8(prefix, NULL, "et1phyaddr", &sprom->et1phyaddr, 0,
+ fallback);
+
+- nvram_read_macaddr(prefix, "macaddr", &sprom->il0mac, fallback);
+- nvram_read_macaddr(prefix, "il0macaddr", &sprom->il0mac, fallback);
++ nvram_read_macaddr(prefix, "macaddr", sprom->il0mac, fallback);
++ nvram_read_macaddr(prefix, "il0macaddr", sprom->il0mac, fallback);
+ }
+
+ static void bcm47xx_fill_board_data(struct ssb_sprom *sprom, const char *prefix,