diff options
| author | Tomasz Maciej Nowak <tmn505@gmail.com> | 2026-05-19 22:19:25 +0200 |
|---|---|---|
| committer | Srinivas Kandagatla <srini@kernel.org> | 2026-06-29 21:04:47 +0100 |
| commit | a3122a19f00b75a8b98b96efb4e25e3e0bfb7365 (patch) | |
| tree | e968cef2a8e3dbf909600296058d766263062a54 | |
| parent | d5bd22d9d203260c0adc8cde137e63be7e3b0927 (diff) | |
| download | linux-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.c | 5 |
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; |
