- fix Ethernet and random MAC's on WeTek Hub/Play2

- fix buffer overflow in serial, mac & usid read
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEPVPGJshWBf4d9CyLd9zb2sjISdEFAmYBR1oACgkQd9zb2sjI
 SdFmAQ//ahsfne7jPZjuPg9+6s4HrhHbYtwxwldtvithepmuOArOiMl3C48TrFDF
 MdvfBGb2dBXhWCIn3Sx3h1dHF3w0ItBluRvTmrLHJYRG6f17o5LFXV0zindfBPyi
 J/Pyg3QaCyyf2/r1vwrqkzH0qXgqE4XuhwM6VzLn9INGpEaAhlKAGxOF1Zi4YwKM
 CAvSSHFHb4NL7qRf/SVjnrKc4DhSIiNcHeUIGjMFNM8pnq9JtHdAiJ+Egc4VlTpj
 oDJSS9Ka1PGyLvYVcCOxBoO20h2J2WJptEnONSmq47fWq90k1LfrEZLzMSLanIgM
 XqM4X5qu9Fq6WWkb51oC14caLVAqZ2Snip4k3f/6W8k1fA6+fWWntTL8epYWvwnP
 X6PnGWi2oKniFCu1mJIxUTeq2Stm5OIPNNCP6cnK7EW9FpzfzX++39KP0OWACD66
 OQCbk8eIMhp1ce4kZ+bP520uNkZVrjLzt7+UeOiWhvTbtNmRQKX0FxY92shIf+0u
 GCrKpqJkOU8W8sBQuNvQUuooqg3FXESY9IpL5fHCAsYy+IRrM8PXLR9c2No2O573
 4SoVW90c5k2Dle7RzINegXd8uLUeetU5DnR+s8D04BHpyzlY7ttA2sO2Sq5nUnLF
 V2yF6rzxCNltAEBF5kBAuy89PCPWDjKFjoICqntfKc2G/x3gqcM=
 =kJ8c
 -----END PGP SIGNATURE-----

Merge tag 'u-boot-amlogic-fixes-20240325' of https://source.denx.de/u-boot/custodians/u-boot-amlogic

- fix Ethernet and random MAC's on WeTek Hub/Play2
- fix buffer overflow in serial, mac & usid read
This commit is contained in:
Tom Rini 2024-03-25 08:18:53 -04:00
commit 34f0452e0e
11 changed files with 45 additions and 15 deletions

View File

@ -0,0 +1,13 @@
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (c) 2019 BayLibre, SAS.
* Author: Neil Armstrong <narmstrong@baylibre.com>
*/
#include "meson-gx-u-boot.dtsi"
&ethmac {
snps,reset-gpio = <&gpio GPIOZ_14 0>;
snps,reset-delays-us = <0 10000 1000000>;
snps,reset-active-low;
};

View File

@ -20,7 +20,7 @@
int misc_init_r(void)
{
u8 mac_addr[MAC_ADDR_LEN];
u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
ssize_t len;
@ -41,6 +41,7 @@ int misc_init_r(void)
tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL);
}
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);

View File

@ -17,7 +17,7 @@
int misc_init_r(void)
{
u8 mac_addr[ARP_HLEN];
u8 mac_addr[ARP_HLEN + 1];
char serial[SM_SERIAL_SIZE];
u32 sid;
@ -34,6 +34,7 @@ int misc_init_r(void)
mac_addr[3] = (sid >> 16) & 0xff;
mac_addr[4] = (sid >> 8) & 0xff;
mac_addr[5] = (sid >> 0) & 0xff;
mac_addr[ARP_HLEN] = '\0';
eth_env_set_enetaddr("ethaddr", mac_addr);
}

View File

@ -27,9 +27,9 @@
int misc_init_r(void)
{
u8 mac_addr[EFUSE_MAC_SIZE];
char serial[EFUSE_SN_SIZE];
char usid[EFUSE_USID_SIZE];
u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE + 1];
char usid[EFUSE_USID_SIZE + 1];
ssize_t len;
unsigned int adcval;
int ret;
@ -37,6 +37,7 @@ int misc_init_r(void)
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);
else
@ -46,6 +47,7 @@ int misc_init_r(void)
if (!env_get("serial")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE)
env_set("serial", serial);
}
@ -53,6 +55,7 @@ int misc_init_r(void)
if (!env_get("usid")) {
len = meson_sm_read_efuse(EFUSE_USID_OFFSET, usid,
EFUSE_USID_SIZE);
usid[len] = '\0';
if (len == EFUSE_USID_SIZE)
env_set("usid", usid);
}

View File

@ -107,7 +107,7 @@ static int odroid_detect_variant(void)
int misc_init_r(void)
{
u8 mac_addr[MAC_ADDR_LEN];
u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
ssize_t len;
@ -128,6 +128,7 @@ int misc_init_r(void)
tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL);
}
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);

View File

@ -21,20 +21,24 @@
int misc_init_r(void)
{
u8 mac_addr[EFUSE_MAC_SIZE];
char serial[EFUSE_SN_SIZE];
u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE + 1];
ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);
else
meson_generate_serial_ethaddr();
}
if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE)
env_set("serial#", serial);
}

View File

@ -21,13 +21,14 @@
int misc_init_r(void)
{
u8 mac_addr[EFUSE_MAC_SIZE];
char serial[EFUSE_SN_SIZE];
u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE + 1];
ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);
}
@ -35,6 +36,7 @@ int misc_init_r(void)
if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE)
env_set("serial#", serial);
}

View File

@ -22,13 +22,14 @@
int misc_init_r(void)
{
u8 mac_addr[EFUSE_MAC_SIZE];
char serial[EFUSE_SN_SIZE];
u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE + 1];
ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);
else
@ -38,6 +39,7 @@ int misc_init_r(void)
if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE)
env_set("serial#", serial);
}

View File

@ -22,13 +22,14 @@
int misc_init_r(void)
{
u8 mac_addr[EFUSE_MAC_SIZE];
char serial[EFUSE_SN_SIZE];
u8 mac_addr[EFUSE_MAC_SIZE + 1];
char serial[EFUSE_SN_SIZE + 1];
ssize_t len;
if (!eth_env_get_enetaddr("ethaddr", mac_addr)) {
len = meson_sm_read_efuse(EFUSE_MAC_OFFSET,
mac_addr, EFUSE_MAC_SIZE);
mac_addr[len] = '\0';
if (len == EFUSE_MAC_SIZE && is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);
else
@ -38,6 +39,7 @@ int misc_init_r(void)
if (!env_get("serial#")) {
len = meson_sm_read_efuse(EFUSE_SN_OFFSET, serial,
EFUSE_SN_SIZE);
serial[len] = '\0';
if (len == EFUSE_SN_SIZE)
env_set("serial#", serial);
}

View File

@ -151,7 +151,7 @@ int meson_ft_board_setup(void *blob, struct bd_info *bd)
int misc_init_r(void)
{
u8 mac_addr[MAC_ADDR_LEN];
u8 mac_addr[MAC_ADDR_LEN + 1];
char efuse_mac_addr[EFUSE_MAC_SIZE], tmp[3];
char serial_string[EFUSE_MAC_SIZE + 1];
ssize_t len;
@ -169,6 +169,7 @@ int misc_init_r(void)
tmp[2] = '\0';
mac_addr[i] = hextoul(tmp, NULL);
}
mac_addr[MAC_ADDR_LEN] = '\0';
if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr("ethaddr", mac_addr);