diff options
author | Gerhard Engleder <gerhard@engleder-embedded.com> | 2021-11-22 21:32:25 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-11-23 12:11:00 +0000 |
commit | 75e47206512bf98ad3d5cd4ef18f3d92b9050a45 (patch) | |
tree | 3d515b8a91cee74ca49319e44f1687f42d523a9d /drivers | |
parent | 33e2ec523230c2ef38a87027b6d14f714f417520 (diff) | |
download | linux-stable-75e47206512bf98ad3d5cd4ef18f3d92b9050a45.tar.gz linux-stable-75e47206512bf98ad3d5cd4ef18f3d92b9050a45.tar.bz2 linux-stable-75e47206512bf98ad3d5cd4ef18f3d92b9050a45.zip |
tsnep: Fix set MAC address
Commit 4dfb9982644b ("tsn: Fix build.") fixed compilation with const
dev_addr. In tsnep_netdev_set_mac_address() the call of ether_addr_copy()
was replaced with dev_set_mac_address(), which calls
ndo_set_mac_address(). This results in an endless recursive loop because
ndo_set_mac_address is set to tsnep_netdev_set_mac_address.
Call eth_hw_addr_set() instead of dev_set_mac_address() in
ndo_set_mac_address()/tsnep_netdev_set_mac_address() to copy the address
as intended.
[ 26.563303] Insufficient stack space to handle exception!
[ 26.563312] ESR: 0x96000047 -- DABT (current EL)
[ 26.563317] FAR: 0xffff80000a507fc0
[ 26.563320] Task stack: [0xffff80000a508000..0xffff80000a50c000]
[ 26.563324] IRQ stack: [0xffff80000a0c0000..0xffff80000a0c4000]
[ 26.563327] Overflow stack: [0xffff00007fbaf2b0..0xffff00007fbb02b0]
[ 26.563333] CPU: 3 PID: 381 Comm: ifconfig Not tainted 5.16.0-rc1-zynqmp #60
[ 26.563340] Hardware name: TSN endpoint (DT)
[ 26.563343] pstate: a0000005 (NzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 26.563351] pc : inetdev_event+0x4/0x560
[ 26.563364] lr : raw_notifier_call_chain+0x54/0x78
[ 26.563372] sp : ffff80000a508040
[ 26.563374] x29: ffff80000a508040 x28: ffff00000132b800 x27: 0000000000000000
[ 26.563386] x26: 0000000000000000 x25: ffff800000ea5058 x24: 0904030201020001
[ 26.563396] x23: ffff800000ea5058 x22: ffff80000a5080e0 x21: 0000000000000009
[ 26.563405] x20: 00000000fffffffa x19: ffff80000a009510 x18: 0000000000000000
[ 26.563414] x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffd1341030
[ 26.563422] x14: ffffffffffffffff x13: 0000000000000020 x12: 0101010101010101
[ 26.563432] x11: 0000000000000020 x10: 0101010101010101 x9 : 7f7f7f7f7f7f7f7f
[ 26.563441] x8 : 7f7f7f7f7f7f7f7f x7 : fefefeff30677364 x6 : 0000000080808080
[ 26.563450] x5 : 0000000000000000 x4 : ffff800008dee170 x3 : ffff80000a50bd42
[ 26.563459] x2 : ffff80000a5080e0 x1 : 0000000000000009 x0 : ffff80000a0092d0
[ 26.563470] Kernel panic - not syncing: kernel stack overflow
[ 26.563474] CPU: 3 PID: 381 Comm: ifconfig Not tainted 5.16.0-rc1-zynqmp #60
[ 26.563481] Hardware name: TSN endpoint (DT)
[ 26.563484] Call trace:
[ 26.563486] dump_backtrace+0x0/0x1b0
[ 26.563497] show_stack+0x18/0x68
[ 26.563504] dump_stack_lvl+0x68/0x84
[ 26.563513] dump_stack+0x18/0x34
[ 26.563519] panic+0x164/0x324
[ 26.563524] nmi_panic+0x64/0x98
[ 26.563533] panic_bad_stack+0x108/0x128
[ 2k6.563539] handle_bad_stack+0x38/0x68
[ 26.563548] __bad_stack+0x88/0x8c
[ 26.563553] inetdev_event+0x4/0x560
[ 26.563560] call_netdevice_notifiers_info+0x58/0xa8
[ 26.563569] dev_set_mac_address+0x78/0x110
[ 26.563576] tsnep_netdev_set_mac_address+0x38/0x60 [tsnep]
[ 26.563591] dev_set_mac_address+0xc4/0x110
[ 26.563599] tsnep_netdev_set_mac_address+0x38/0x60 [tsnep]
...
[ 26.565444] dev_set_mac_address+0xc4/0x110
[ 26.565452] tsnep_netdev_set_mac_address+0x38/0x60 [tsnep]
[ 26.565462] dev_set_mac_address+0xc4/0x110
[ 26.565469] dev_set_mac_address_user+0x44/0x68
[ 26.565477] dev_ifsioc+0x30c/0x568
[ 26.565483] dev_ioctl+0x124/0x3f0
[ 26.565489] sock_do_ioctl+0xb4/0xf8
[ 26.565497] sock_ioctl+0x2f4/0x398
[ 26.565503] __arm64_sys_ioctl+0xa8/0xe8
[ 26.565511] invoke_syscall+0x44/0x108
[ 26.565520] el0_svc_common.constprop.3+0x94/0xf8
[ 26.565527] do_el0_svc+0x24/0x88
[ 26.565534] el0_svc+0x20/0x50
[ 26.565541] el0t_64_sync_handler+0x90/0xb8
[ 26.565548] el0t_64_sync+0x180/0x184
[ 26.565556] SMP: stopping secondary CPUs
[ 26.565622] Kernel Offset: disabled
[ 26.565624] CPU features: 0x0,00004002,00000846
[ 26.565628] Memory Limit: none
[ 27.843428] ---[ end Kernel panic - not syncing: kernel stack overflow ]---
Fixes: 4dfb9982644b ("tsn: Fix build.")
Signed-off-by: Gerhard Engleder <gerhard@engleder-embedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ethernet/engleder/tsnep_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c index 6a7feb24589a..8333313dd706 100644 --- a/drivers/net/ethernet/engleder/tsnep_main.c +++ b/drivers/net/ethernet/engleder/tsnep_main.c @@ -1004,7 +1004,7 @@ static int tsnep_netdev_set_mac_address(struct net_device *netdev, void *addr) retval = eth_prepare_mac_addr_change(netdev, sock_addr); if (retval) return retval; - dev_set_mac_address(netdev, sock_addr, NULL); + eth_hw_addr_set(netdev, sock_addr->sa_data); tsnep_mac_set_address(adapter, sock_addr->sa_data); return 0; |