diff options
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.patch | 86 |
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, |