igb: close/suspend race in netif_device_detach
Subsystems (2)
PATCH v2 1/1 igb: close/suspend race in netif_device_detach
Similar to ixgbe, when an interface is part of a namespace it is possible that igb_close() may be called while __igb_shutdown() is running which ends up in a double free WARN and/or a BUG in free_msi_irqs().
Extend the rtnl_lock() to protect the call to netif_device_detach() and igb_clear_interrupt_scheme() in __igb_shutdown() and check for netif_device_present() to avoid calling igb_clear_interrupt_scheme() a second time in igb_close().
Also extend the rtnl lock in igb_resume() to netif_device_attach().
--- drivers/net/ethernet/intel/igb/igb_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
drivers/net/ethernet/intel/igb/igb_main.c +12 -9
@@ -3275,7 +3275,9 @@ static int __igb_close(struct net_device *netdev, bool suspending)int igb_close (struct net_device *netdev) { -return __igb_close (netdev, false); +if (netif_device_present (netdev)) +return __igb_close (netdev, false); +return 0 ; }/**
@@ -7537,6 +7539,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,int retval =0 ;#endif +rtnl_lock ();netif_device_detach (netdev);if (netif_running (netdev))
@@ -7545,6 +7548,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,igb_ptp_suspend (adapter);igb_clear_interrupt_scheme (adapter); +rtnl_unlock ();#ifdef CONFIG_PM retval =pci_save_state (pdev);
@@ -7663,16 +7667,15 @@ static int igb_resume(struct device *dev)wr32 (E1000_WUS , ~0 ); -if (netdev->flags &IFF_UP ) { -rtnl_lock (); +rtnl_lock (); +if (!err &&netif_running (netdev)) err =__igb_open (netdev, true); -rtnl_unlock (); -if (err) -return err; - } -netif_device_attach (netdev); -return 0 ; +if (!err) +netif_device_attach (netdev); +rtnl_unlock (); + +return err; }static int igb_runtime_idle (struct device *dev)
Signature · 1 line
2.7.4
Duyck
PATCH v2 1/1 igb: close/suspend race in netif_device_detach
Quoted 5 lines · Todd Fujinaka
Similar to ixgbe, when an interface is part of a namespace it is possible that
igb_close()may be called while__igb_shutdown()is running which ends up in a double free WARN and/or a BUG infree_msi_irqs().
Quoted 8 lines
Extend the
rtnl_lock()to protect the call tonetif_device_detach()andigb_clear_interrupt_scheme()in__igb_shutdown()and check fornetif_device_present()to avoid callingigb_clear_interrupt_scheme()a second time inigb_close().Also extend the rtnl lock in
igb_resume()tonetif_device_attach().Signed-off-by Todd Fujinaka <[email protected]>
Looks good.
Quoted 59 lines
--- drivers/net/ethernet/intel/igb/igb_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)drivers/net/ethernet/intel/igb/igb_main.c +12
-9@@ -3275,7 +3275,9 @@ static int __igb_close(struct net_device *netdev, bool suspending)int igb_close (struct net_device *netdev) { -return __igb_close (netdev, false); +if (netif_device_present (netdev)) +return __igb_close (netdev, false); +return 0 ; }/** @@ -7537,6 +7539,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,int retval =0 ;#endif +rtnl_lock ();netif_device_detach (netdev);if (netif_running (netdev))@@ -7545,6 +7548,7 @@ static int __igb_shutdown(struct pci_dev *pdev, bool *enable_wake,igb_ptp_suspend (adapter);igb_clear_interrupt_scheme (adapter); +rtnl_unlock ();#ifdef CONFIG_PM retval =pci_save_state (pdev);@@ -7663,16 +7667,15 @@ static int igb_resume(struct device *dev)wr32 (E1000_WUS , ~0 ); -if (netdev->flags &IFF_UP ) { -rtnl_lock (); +rtnl_lock (); +if (!err &&netif_running (netdev)) err =__igb_open (netdev, true); -rtnl_unlock (); -if (err) -return err; - } -netif_device_attach (netdev); -return 0 ; +if (!err) +netif_device_attach (netdev); +rtnl_unlock (); + +return err; }static int igb_runtime_idle (struct device *dev)
Brown
PATCH v2 1/1 igb: close/suspend race in netif_device_detach
In reply to Todd FujinakaQuoted 17 lines
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Todd Fujinaka
Sent: Tuesday, November 15, 2016 8:54 AM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachSimilar to ixgbe, when an interface is part of a namespace it is possible that
igb_close()may be called while__igb_shutdown()is running which ends up in a double free WARN and/or a BUG infree_msi_irqs().Extend the
rtnl_lock()to protect the call tonetif_device_detach()andigb_clear_interrupt_scheme()in__igb_shutdown()and check fornetif_device_present()to avoid callingigb_clear_interrupt_scheme()a second time inigb_close().
Quoted 6 lines
Also extend the rtnl lock in
igb_resume()tonetif_device_attach().Signed-off-by Todd Fujinaka <[email protected]>--- drivers/net/ethernet/intel/igb/igb_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
Tested-by Aaron Brown <[email protected]>
Brown
PATCH v2 1/1 igb: close/suspend race in netif_device_detach
Quoted 25 lines
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Brown, Aaron F
Sent: Wednesday, November 30, 2016 12:26 PM
To: Fujinaka, Todd <[email protected]>; intel-wired-
lan at lists.osuosl.org
Subject: Re: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachQuoted 17 lines
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Todd Fujinaka
Sent: Tuesday, November 15, 2016 8:54 AM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachSimilar to ixgbe, when an interface is part of a namespace it is possible that
igb_close()may be called while__igb_shutdown()is running which ends up in a double free WARN and/or a BUG infree_msi_irqs().Extend the
rtnl_lock()to protect the call tonetif_device_detach()andigb_clear_interrupt_scheme()in__igb_shutdown()and check fornetif_device_present()to avoid callingigb_clear_interrupt_scheme()a second time inigb_close().
Quoted 8 lines
Quoted 6 lines
Also extend the rtnl lock in
igb_resume()tonetif_device_attach().Signed-off-by Todd Fujinaka <[email protected]>--- drivers/net/ethernet/intel/igb/igb_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)Tested-by Aaron Brown <[email protected]>
Patchwork did not pick this Tested-by, probably because I left out the colon. Try again...
Brown
PATCH v2 1/1 igb: close/suspend race in netif_device_detach
Quoted 41 lines
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Brown, Aaron F
Sent: Tuesday, December 6, 2016 2:14 PM
To: Fujinaka, Todd <[email protected]>; intel-wired-
lan at lists.osuosl.org
Subject: Re: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachQuoted 9 lines
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Brown, Aaron F
Sent: Wednesday, November 30, 2016 12:26 PM
To: Fujinaka, Todd <[email protected]>; intel-wired-
lan at lists.osuosl.org
Subject: Re: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachQuoted 1 line
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org]
On
Quoted 23 lines
Quoted 22 lines
Behalf Of Todd Fujinaka
Sent: Tuesday, November 15, 2016 8:54 AM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [PATCH] [PATCH v2] igb: close/suspend race innetif_device_detachSimilar to ixgbe, when an interface is part of a namespace it is possible that
igb_close()may be called while__igb_shutdown()is running which ends up in a double free WARN and/or a BUG infree_msi_irqs().Extend the
rtnl_lock()to protect the call tonetif_device_detach()andigb_clear_interrupt_scheme()in__igb_shutdown()and check fornetif_device_present()to avoid callingigb_clear_interrupt_scheme()a second time inigb_close().Also extend the rtnl lock in
igb_resume()tonetif_device_attach().Signed-off-by Todd Fujinaka <[email protected]>--- drivers/net/ethernet/intel/igb/igb_main.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-)
Quoted 5 lines
Quoted 1 line
Tested-by Aaron Brown <[email protected]>
Patchwork did not pick this Tested-by, probably because I left out the colon. Try again...
Tested-by: Aaron Brown <aaron.f.brown at intel.com<
D'OH!