aboutsummaryrefslogtreecommitdiff
path: root/board/amlogic/q200/q200.c
diff options
context:
space:
mode:
authorNeil Armstrong <neil.armstrong@linaro.org>2024-03-20 09:46:11 +0100
committerNeil Armstrong <neil.armstrong@linaro.org>2024-03-25 09:16:19 +0100
commitd54f87f09a36ac20154955297b7c999b368b0443 (patch)
tree5a943e4734d28d61aba8bd1e97be8c3eeaba59a2 /board/amlogic/q200/q200.c
parent65d5c367b00cb392bda560c3da1834979adcf137 (diff)
board: amlogic: fix buffler overflow in seria, mac & usid read
While meson_sm_read_efuse() doesn't overflow, the string is not zero terminated and env_set*() will buffer overflow and add random characters to environment. Acked-by: Viacheslav Bocharov <adeep@lexina.in> Link: https://lore.kernel.org/r/20240320-u-boot-fix-p200-serial-v2-1-972be646a301@linaro.org Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Diffstat (limited to 'board/amlogic/q200/q200.c')
-rw-r--r--board/amlogic/q200/q200.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/board/amlogic/q200/q200.c b/board/amlogic/q200/q200.c
index 3aa6d8f200..47f1566a9d 100644
--- a/board/amlogic/q200/q200.c
+++ b/board/amlogic/q200/q200.c
@@ -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);
}