]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
7.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jun 2026 12:38:40 +0000 (13:38 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jun 2026 12:38:40 +0000 (13:38 +0100)
added patches:
net-export-netif_open-for-self_test-usage.patch
net-net_failover-fix-the-deadlock-in-slave-register.patch

queue-7.0/net-export-netif_open-for-self_test-usage.patch [new file with mode: 0644]
queue-7.0/net-net_failover-fix-the-deadlock-in-slave-register.patch [new file with mode: 0644]
queue-7.0/series

diff --git a/queue-7.0/net-export-netif_open-for-self_test-usage.patch b/queue-7.0/net-export-netif_open-for-self_test-usage.patch
new file mode 100644 (file)
index 0000000..411fe4a
--- /dev/null
@@ -0,0 +1,38 @@
+From 3fdd33697c2be9184668c89ba4f24a5ecbc8ec51 Mon Sep 17 00:00:00 2001
+From: "Mike Marciniszyn (Meta)" <mike.marciniszyn@gmail.com>
+Date: Sat, 7 Mar 2026 05:58:43 -0500
+Subject: net: export netif_open for self_test usage
+
+From: Mike Marciniszyn (Meta) <mike.marciniszyn@gmail.com>
+
+commit 3fdd33697c2be9184668c89ba4f24a5ecbc8ec51 upstream.
+
+dev_open() already is exported, but drivers which use the netdev
+instance lock need to use netif_open() instead. netif_close() is
+also already exported [1] so this completes the pairing.
+
+This export is required for the following fbnic self tests to
+avoid calling ndo_stop() and ndo_open() in favor of the
+more appropriate netif_open() and netif_close() that notifies
+any listeners that the interface went down to test and is now
+coming back up.
+
+Link: https://patch.msgid.link/20250309215851.2003708-1-sdf@fomichev.me [1]
+Signed-off-by: Mike Marciniszyn (Meta) <mike.marciniszyn@gmail.com>
+Link: https://patch.msgid.link/20260307105847.1438-2-mike.marciniszyn@gmail.com
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/core/dev.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -1731,6 +1731,7 @@ int netif_open(struct net_device *dev, s
+       return ret;
+ }
++EXPORT_SYMBOL(netif_open);
+ static void __dev_close_many(struct list_head *head)
+ {
diff --git a/queue-7.0/net-net_failover-fix-the-deadlock-in-slave-register.patch b/queue-7.0/net-net_failover-fix-the-deadlock-in-slave-register.patch
new file mode 100644 (file)
index 0000000..482d4e3
--- /dev/null
@@ -0,0 +1,108 @@
+From b84c5632c7b31f8910167075a8128cfb9e50fcfe Mon Sep 17 00:00:00 2001
+From: Faicker Mo <faicker.mo@gmail.com>
+Date: Mon, 11 May 2026 22:05:51 +0800
+Subject: net: net_failover: Fix the deadlock in slave register
+
+From: Faicker Mo <faicker.mo@gmail.com>
+
+commit b84c5632c7b31f8910167075a8128cfb9e50fcfe upstream.
+
+There is netdev_lock_ops() before the NETDEV_REGISTER notifier
+in register_netdevice(), so use the non-locking functions
+in net_failover_slave_register().
+failover_slave_register() in failover_existing_slave_register() adds lock
+and unlock ops too.
+
+Call Trace:
+ <TASK>
+ __schedule+0x30d/0x7a0
+ schedule+0x27/0x90
+ schedule_preempt_disabled+0x15/0x30
+ __mutex_lock.constprop.0+0x538/0x9e0
+ __mutex_lock_slowpath+0x13/0x20
+ mutex_lock+0x3b/0x50
+ dev_set_mtu+0x40/0xe0
+ net_failover_slave_register+0x24/0x280
+ failover_slave_register+0x103/0x1b0
+ failover_event+0x15e/0x210
+ ? dropmon_net_event+0xac/0xe0
+ notifier_call_chain+0x5e/0xe0
+ raw_notifier_call_chain+0x16/0x30
+ call_netdevice_notifiers_info+0x52/0xa0
+ register_netdevice+0x5f4/0x7c0
+ register_netdev+0x1e/0x40
+ _mlx5e_probe+0xe2/0x370 [mlx5_core]
+ mlx5e_probe+0x59/0x70 [mlx5_core]
+ ? __pfx_mlx5e_probe+0x10/0x10 [mlx5_core]
+
+Fixes: 4c975fd70002 ("net: hold instance lock during NETDEV_REGISTER/UP")
+Signed-off-by: Faicker Mo <faicker.mo@gmail.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/net/net_failover.c |   12 ++++++------
+ net/core/failover.c        |    6 +++++-
+ 2 files changed, 11 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/net_failover.c
++++ b/drivers/net/net_failover.c
+@@ -502,7 +502,7 @@ static int net_failover_slave_register(s
+       /* Align MTU of slave with failover dev */
+       orig_mtu = slave_dev->mtu;
+-      err = dev_set_mtu(slave_dev, failover_dev->mtu);
++      err = netif_set_mtu(slave_dev, failover_dev->mtu);
+       if (err) {
+               netdev_err(failover_dev, "unable to change mtu of %s to %u register failed\n",
+                          slave_dev->name, failover_dev->mtu);
+@@ -512,11 +512,11 @@ static int net_failover_slave_register(s
+       dev_hold(slave_dev);
+       if (netif_running(failover_dev)) {
+-              err = dev_open(slave_dev, NULL);
++              err = netif_open(slave_dev, NULL);
+               if (err && (err != -EBUSY)) {
+                       netdev_err(failover_dev, "Opening slave %s failed err:%d\n",
+                                  slave_dev->name, err);
+-                      goto err_dev_open;
++                      goto err_netif_open;
+               }
+       }
+@@ -562,10 +562,10 @@ static int net_failover_slave_register(s
+ err_vlan_add:
+       dev_uc_unsync(slave_dev, failover_dev);
+       dev_mc_unsync(slave_dev, failover_dev);
+-      dev_close(slave_dev);
+-err_dev_open:
++      netif_close(slave_dev);
++err_netif_open:
+       dev_put(slave_dev);
+-      dev_set_mtu(slave_dev, orig_mtu);
++      netif_set_mtu(slave_dev, orig_mtu);
+ done:
+       return err;
+ }
+--- a/net/core/failover.c
++++ b/net/core/failover.c
+@@ -12,6 +12,7 @@
+ #include <uapi/linux/if_arp.h>
+ #include <linux/rtnetlink.h>
+ #include <linux/if_vlan.h>
++#include <net/netdev_lock.h>
+ #include <net/failover.h>
+ static LIST_HEAD(failover_list);
+@@ -221,8 +222,11 @@ failover_existing_slave_register(struct
+       for_each_netdev(net, dev) {
+               if (netif_is_failover(dev))
+                       continue;
+-              if (ether_addr_equal(failover_dev->perm_addr, dev->perm_addr))
++              if (ether_addr_equal(failover_dev->perm_addr, dev->perm_addr)) {
++                      netdev_lock_ops(dev);
+                       failover_slave_register(dev);
++                      netdev_unlock_ops(dev);
++              }
+       }
+       rtnl_unlock();
+ }
index 16572c3f61058cb5e9953c704f1d969eda72806b..8faca6ab1368e6b46ee6b16d47e0f48991e9c864 100644 (file)
@@ -28,3 +28,5 @@ rose-drop-call_request-in-loopback-timer-when-device-is-not-running.patch
 rose-cancel-neighbour-timers-in-rose_neigh_put-before-freeing.patch
 rose-clear-neighbour-pointer-in-rose_kill_by_device.patch
 rose-don-t-free-fd-owned-sockets-when-reaping-in-the-heartbeat.patch
+net-export-netif_open-for-self_test-usage.patch
+net-net_failover-fix-the-deadlock-in-slave-register.patch