Re: [PATCH net] eth: gve: add missing netdev locks on reset and shutdown paths
From: Harshitha Ramamurthy <hramamurthy@google.com>
Date: 2025-03-28 21:55:34
On Fri, Mar 28, 2025 at 9:47 AM Jakub Kicinski [off-list ref] wrote:
All the misc entry points end up calling into either gve_open()
or gve_close(), they take rtnl_lock today but since the recent
instance locking changes should also take the instance lock.
Found by code inspection and untested.
Fixes: cae03e5bdd9e ("net: hold netdev instance lock during queue operations")
Signed-off-by: Jakub Kicinski <kuba@kernel.org>Reviewed-by: Harshitha Ramamurthy <hramamurthy@google.com>
quoted hunk ↗ jump to hunk
--- CC: jeroendb@google.com CC: hramamurthy@google.com CC: pkaligineedi@google.com CC: willemb@google.com CC: shailend@google.com CC: joshwash@google.com CC: sdf@fomichev.me --- drivers/net/ethernet/google/gve/gve_main.c | 4 ++++ 1 file changed, 4 insertions(+)diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index cb2f9978f45e..f9a73c956861 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c@@ -2077,7 +2077,9 @@ static void gve_handle_reset(struct gve_priv *priv) if (gve_get_do_reset(priv)) { rtnl_lock(); + netdev_lock(priv->dev); gve_reset(priv, false); + netdev_unlock(priv->dev); rtnl_unlock(); } }@@ -2714,6 +2716,7 @@ static void gve_shutdown(struct pci_dev *pdev) bool was_up = netif_running(priv->dev); rtnl_lock(); + netdev_lock(netdev); if (was_up && gve_close(priv->dev)) { /* If the dev was up, attempt to close, if close fails, reset */ gve_reset_and_teardown(priv, was_up);@@ -2721,6 +2724,7 @@ static void gve_shutdown(struct pci_dev *pdev) /* If the dev wasn't up or close worked, finish tearing down */ gve_teardown_priv_resources(priv); } + netdev_unlock(netdev); rtnl_unlock(); } --2.49.0