Skip to content

Commit abcd3d6

Browse files
mfischerdavem330
authored andcommitted
net: nixge: Fix error path for obtaining mac address
Fix issue where nixge_get_nvmem_address() returns a non-NULL return value on a failed nvmem_cell_get() that causes an invalid access when error value encoded in pointer is dereferenced. Furthermore ensure that buffer allocated by nvmem_cell_read() actually gets kfreed() if the function succeeds. Fixes commit 492caff ("net: ethernet: nixge: Add support for National Instruments XGE netdev") Reported-by: Alex Williams <[email protected]> Signed-off-by: Moritz Fischer <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 1751eb4 commit abcd3d6

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

drivers/net/ethernet/ni/nixge.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,7 +1170,7 @@ static void *nixge_get_nvmem_address(struct device *dev)
11701170

11711171
cell = nvmem_cell_get(dev, "address");
11721172
if (IS_ERR(cell))
1173-
return cell;
1173+
return NULL;
11741174

11751175
mac = nvmem_cell_read(cell, &cell_size);
11761176
nvmem_cell_put(cell);
@@ -1202,10 +1202,12 @@ static int nixge_probe(struct platform_device *pdev)
12021202
ndev->max_mtu = NIXGE_JUMBO_MTU;
12031203

12041204
mac_addr = nixge_get_nvmem_address(&pdev->dev);
1205-
if (mac_addr && is_valid_ether_addr(mac_addr))
1205+
if (mac_addr && is_valid_ether_addr(mac_addr)) {
12061206
ether_addr_copy(ndev->dev_addr, mac_addr);
1207-
else
1207+
kfree(mac_addr);
1208+
} else {
12081209
eth_hw_addr_random(ndev);
1210+
}
12091211

12101212
priv = netdev_priv(ndev);
12111213
priv->ndev = ndev;

0 commit comments

Comments
 (0)