Skip to content

Commit 2b88974

Browse files
wangyufen316Kalle Valo
authored andcommitted
wifi: wilc1000: add missing unregister_netdev() in wilc_netdev_ifc_init()
Fault injection test reports this issue: kernel BUG at net/core/dev.c:10731! invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI Call Trace: <TASK> wilc_netdev_ifc_init+0x19f/0x220 [wilc1000 884bf126e9e98af6a708f266a8dffd53f99e4bf5] wilc_cfg80211_init+0x30c/0x380 [wilc1000 884bf126e9e98af6a708f266a8dffd53f99e4bf5] wilc_bus_probe+0xad/0x2b0 [wilc1000_spi 1520a7539b6589cc6cde2ae826a523a33f8bacff] spi_probe+0xe4/0x140 really_probe+0x17e/0x3f0 __driver_probe_device+0xe3/0x170 driver_probe_device+0x49/0x120 The root case here is alloc_ordered_workqueue() fails, but cfg80211_unregister_netdevice() or unregister_netdev() not be called in error handling path. To fix add unregister_netdev goto lable to add the unregister operation in error handling path. Fixes: 09ed8bf ("wilc1000: Rename workqueue from "WILC_wq" to "NETDEV-wq"") Signed-off-by: Wang Yufen <wangyufen@huawei.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/1669289902-23639-1-git-send-email-wangyufen@huawei.com
1 parent deb962e commit 2b88974

File tree

1 file changed

+6
-1
lines changed
  • drivers/net/wireless/microchip/wilc1000

1 file changed

+6
-1
lines changed

drivers/net/wireless/microchip/wilc1000/netdev.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -981,7 +981,7 @@ struct wilc_vif *wilc_netdev_ifc_init(struct wilc *wl, const char *name,
981981
ndev->name);
982982
if (!wl->hif_workqueue) {
983983
ret = -ENOMEM;
984-
goto error;
984+
goto unregister_netdev;
985985
}
986986

987987
ndev->needs_free_netdev = true;
@@ -996,6 +996,11 @@ struct wilc_vif *wilc_netdev_ifc_init(struct wilc *wl, const char *name,
996996

997997
return vif;
998998

999+
unregister_netdev:
1000+
if (rtnl_locked)
1001+
cfg80211_unregister_netdevice(ndev);
1002+
else
1003+
unregister_netdev(ndev);
9991004
error:
10001005
free_netdev(ndev);
10011006
return ERR_PTR(ret);

0 commit comments

Comments
 (0)