From: Greg Kroah-Hartman Date: Thu, 25 Jun 2026 12:38:40 +0000 (+0100) Subject: 7.0-stable patches X-Git-Tag: v6.18.37~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57ad136b51ef513cada0b6fd2a3677da07a15d24;p=thirdparty%2Fkernel%2Fstable-queue.git 7.0-stable patches added patches: net-export-netif_open-for-self_test-usage.patch net-net_failover-fix-the-deadlock-in-slave-register.patch --- 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 index 0000000000..411fe4a95d --- /dev/null +++ b/queue-7.0/net-export-netif_open-for-self_test-usage.patch @@ -0,0 +1,38 @@ +From 3fdd33697c2be9184668c89ba4f24a5ecbc8ec51 Mon Sep 17 00:00:00 2001 +From: "Mike Marciniszyn (Meta)" +Date: Sat, 7 Mar 2026 05:58:43 -0500 +Subject: net: export netif_open for self_test usage + +From: Mike Marciniszyn (Meta) + +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) +Link: https://patch.msgid.link/20260307105847.1438-2-mike.marciniszyn@gmail.com +Signed-off-by: Paolo Abeni +Signed-off-by: Greg Kroah-Hartman +--- + 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 index 0000000000..482d4e3f94 --- /dev/null +++ b/queue-7.0/net-net_failover-fix-the-deadlock-in-slave-register.patch @@ -0,0 +1,108 @@ +From b84c5632c7b31f8910167075a8128cfb9e50fcfe Mon Sep 17 00:00:00 2001 +From: Faicker Mo +Date: Mon, 11 May 2026 22:05:51 +0800 +Subject: net: net_failover: Fix the deadlock in slave register + +From: Faicker Mo + +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: + + __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 +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + 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 + #include + #include ++#include + #include + + 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(); + } diff --git a/queue-7.0/series b/queue-7.0/series index 16572c3f61..8faca6ab13 100644 --- a/queue-7.0/series +++ b/queue-7.0/series @@ -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