mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
nvmem: imx-ocotp: fix MAC address byte length
The commit "13bcd440f2nvmem: core: verify cell's raw_len" caused an extension of the "mac-address" cell from 6 to 8 bytes due to word_size of 4 bytes. This led to a required byte swap of the full buffer length, which caused truncation of the mac-address when read. Previously, the mac-address was incorrectly truncated from 70:B3:D5:14:E9:0E to 00:00:70:B3:D5:14. Fix the issue by swapping only the first 6 bytes to correctly pass the mac-address to the upper layers. Fixes:13bcd440f2("nvmem: core: verify cell's raw_len") Cc: stable@vger.kernel.org Signed-off-by: Steffen Bätz <steffen@innosonix.de> Tested-by: Alexander Stein <alexander.stein@ew.tq-group.com> Signed-off-by: Srinivas Kandagatla <srini@kernel.org> Link: https://lore.kernel.org/r/20250712181729.6495-3-srini@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
ae68ad3d7a
commit
2aa4ad626e
2 changed files with 8 additions and 2 deletions
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/if_ether.h> /* ETH_ALEN */
|
||||
|
||||
enum fuse_type {
|
||||
FUSE_FSB = BIT(0),
|
||||
|
|
@ -118,9 +119,11 @@ static int imx_ocotp_cell_pp(void *context, const char *id, int index,
|
|||
int i;
|
||||
|
||||
/* Deal with some post processing of nvmem cell data */
|
||||
if (id && !strcmp(id, "mac-address"))
|
||||
if (id && !strcmp(id, "mac-address")) {
|
||||
bytes = min(bytes, ETH_ALEN);
|
||||
for (i = 0; i < bytes / 2; i++)
|
||||
swap(buf[i], buf[bytes - i - 1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/if_ether.h> /* ETH_ALEN */
|
||||
|
||||
#define IMX_OCOTP_OFFSET_B0W0 0x400 /* Offset from base address of the
|
||||
* OTP Bank0 Word0
|
||||
|
|
@ -227,9 +228,11 @@ static int imx_ocotp_cell_pp(void *context, const char *id, int index,
|
|||
int i;
|
||||
|
||||
/* Deal with some post processing of nvmem cell data */
|
||||
if (id && !strcmp(id, "mac-address"))
|
||||
if (id && !strcmp(id, "mac-address")) {
|
||||
bytes = min(bytes, ETH_ALEN);
|
||||
for (i = 0; i < bytes / 2; i++)
|
||||
swap(buf[i], buf[bytes - i - 1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue