lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 31 Jul 2020 08:54:01 +0300 From: Igor Russkikh <irusskikh@...vell.com> To: <netdev@...r.kernel.org> CC: "David S . Miller" <davem@...emloft.net>, Jakub Kicinski <kuba@...nel.org>, Ariel Elior <aelior@...vell.com>, Michal Kalderon <mkalderon@...vell.com>, Denis Bolotin <dbolotin@...vell.com>, Jiri Pirko <jiri@...nulli.us>, Igor Russkikh <irusskikh@...vell.com>, Alexander Lobakin <alobakin@...vell.com>, Michal Kalderon <michal.kalderon@...vell.com> Subject: [PATCH v4 net-next 10/10] qede: make driver reliable on unload after failures In case recovery was not successful, netdev still should be present. But we should clear cdev if something bad happens on recovery. We also check cdev for null on dev close. That could be a case if recovery was not successful. Signed-off-by: Igor Russkikh <irusskikh@...vell.com> Signed-off-by: Alexander Lobakin <alobakin@...vell.com> Signed-off-by: Michal Kalderon <michal.kalderon@...vell.com> --- drivers/net/ethernet/qlogic/qede/qede_main.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c index 287e10effb49..01a7bff91d6c 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c @@ -1240,7 +1240,10 @@ static int __qede_probe(struct pci_dev *pdev, u32 dp_module, u8 dp_level, err4: qede_rdma_dev_remove(edev, (mode == QEDE_PROBE_RECOVERY)); err3: - free_netdev(edev->ndev); + if (mode != QEDE_PROBE_RECOVERY) + free_netdev(edev->ndev); + else + edev->cdev = NULL; err2: qed_ops->common->slowpath_stop(cdev); err1: @@ -2475,7 +2478,8 @@ static int qede_close(struct net_device *ndev) qede_unload(edev, QEDE_UNLOAD_NORMAL, false); - edev->ops->common->update_drv_state(edev->cdev, false); + if (edev->cdev) + edev->ops->common->update_drv_state(edev->cdev, false); return 0; } -- 2.17.1
Powered by blists - more mailing lists