ipq40xx: 5.4: fix of_get_mac_address obsolete usage OOPs
authorPetr Štetiar <ynezz@true.cz>
Mon, 16 Mar 2020 08:43:00 +0000 (09:43 +0100)
committerPetr Štetiar <ynezz@true.cz>
Mon, 16 Mar 2020 21:21:45 +0000 (22:21 +0100)
of_get_mac_address returns valid pointer or ERR_PTR since 5.2 via commit
d01f449c008a ("of_net: add NVMEM support to of_get_mac_address") so the
patch fixes following OOPs on nbg6617:

 Unable to handle kernel paging request at virtual address ffffffed
 CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.4.24 #0
 PC is at edma_axi_probe+0x444/0x1114
 LR is at bus_find_device+0x88/0x9c

Where the PC can be resolved to:

 >>> l *edma_axi_probe+0x444
 0xc067be5c is in edma_axi_probe (./include/linux/string.h:378).

 >>> l *edma_axi_probe+0x43f
 0xc067be57 is in edma_axi_probe (drivers/net/ethernet/qualcomm/essedma/edma_axi.c:936)

Which leads to the following code fragment:

 935  mac_addr = of_get_mac_address(pnp);
 936  if (mac_addr)
 937      memcpy(edma_netdev[idx_mac]->dev_addr, mac_addr, ETH_ALEN);

Where using mac_addr=0xffffffed (-ENODEV) as source address in memcpy()
is causing the OOPs.

Acked-by: John Crispin <john@phrozen.org>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
target/linux/ipq40xx/files-5.4/drivers/net/ethernet/qualcomm/essedma/edma_axi.c

index db5eac2f0300e8104241d947f8b594a94837b079..b619bbbab9d8f997c4b665897df7e79357afb9db 100644 (file)
@@ -933,7 +933,7 @@ static int edma_axi_probe(struct platform_device *pdev)
                }
 
                mac_addr = of_get_mac_address(pnp);
-               if (mac_addr)
+               if (!IS_ERR(mac_addr))
                        memcpy(edma_netdev[idx_mac]->dev_addr, mac_addr, ETH_ALEN);
 
                idx_mac++;