Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 710d86f8 authored by Ilia Mirkin's avatar Ilia Mirkin Committed by Ralf Baechle
Browse files

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: default avatarIlia Mirkin <imirkin@alum.mit.edu>
Acked-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: default avatarJohn Crispin <blogic@openwrt.org>
Patchwork: http://patchwork.linux-mips.org/patch/6211/
parent 0ded1bec
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -135,7 +135,7 @@ static void nvram_read_leddc(const char *prefix, const char *name,
}

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 char *prefix, const char *name,
	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 *prefix, const char *name,
		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(struct ssb_sprom *sprom,
		      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(struct ssb_sprom *sprom,
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,