summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Maciej Nowak <tmn505@gmail.com>2026-05-19 22:19:25 +0200
committerSrinivas Kandagatla <srini@kernel.org>2026-06-29 21:04:47 +0100
commita3122a19f00b75a8b98b96efb4e25e3e0bfb7365 (patch)
treee968cef2a8e3dbf909600296058d766263062a54
parentd5bd22d9d203260c0adc8cde137e63be7e3b0927 (diff)
downloadlinux-next-a3122a19f00b75a8b98b96efb4e25e3e0bfb7365.tar.gz
linux-next-a3122a19f00b75a8b98b96efb4e25e3e0bfb7365.zip
nvmem: layouts: u-boot-env: check earlier for ethaddr length
Unfortunately the ethaddr value in U-Boot environment might be enclosed in single/double quotes or be something completely different. This can make it different than MAC_ADDR_STR_LEN, which results in EINVAL returned by ethaddr post process. Move the check for length earlier, to skip post processing, so nvmem could still present ethaddr value as a string if the value doesn't match MAC_ADDR_STR_LEN. Signed-off-by: Tomasz Maciej Nowak <tmn505@gmail.com> Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
-rw-r--r--drivers/nvmem/layouts/u-boot-env.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/nvmem/layouts/u-boot-env.c b/drivers/nvmem/layouts/u-boot-env.c
index f27f387bb52a..33ec2350386f 100644
--- a/drivers/nvmem/layouts/u-boot-env.c
+++ b/drivers/nvmem/layouts/u-boot-env.c
@@ -38,9 +38,6 @@ static int u_boot_env_read_post_process_ethaddr(void *context, const char *id, i
{
u8 mac[ETH_ALEN];
- if (bytes != MAC_ADDR_STR_LEN)
- return -EINVAL;
-
if (!mac_pton(buf, mac))
return -EINVAL;
@@ -75,7 +72,7 @@ static int u_boot_env_parse_cells(struct device *dev, struct nvmem_device *nvmem
info.offset = data_offset + value - data;
info.bytes = strlen(value);
info.np = of_get_child_by_name(dev->of_node, info.name);
- if (!strcmp(var, "ethaddr")) {
+ if (!strcmp(var, "ethaddr") && info.bytes == MAC_ADDR_STR_LEN) {
info.raw_len = strlen(value);
info.bytes = ETH_ALEN;
info.read_post_process = u_boot_env_read_post_process_ethaddr;