Commit bb4c698633c0 for kernel

commit bb4c698633c0e19717586a6524a33196cff01a32
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Tue Feb 24 14:57:08 2026 +0200

    team: avoid NETDEV_CHANGEMTU event when unregistering slave

    syzbot is reporting

      unregister_netdevice: waiting for netdevsim0 to become free. Usage count = 3
      ref_tracker: netdev@ffff88807dcf8618 has 1/2 users at
           __netdev_tracker_alloc include/linux/netdevice.h:4400 [inline]
           netdev_hold include/linux/netdevice.h:4429 [inline]
           inetdev_init+0x201/0x4e0 net/ipv4/devinet.c:286
           inetdev_event+0x251/0x1610 net/ipv4/devinet.c:1600
           notifier_call_chain+0x19d/0x3a0 kernel/notifier.c:85
           call_netdevice_notifiers_mtu net/core/dev.c:2318 [inline]
           netif_set_mtu_ext+0x5aa/0x800 net/core/dev.c:9886
           netif_set_mtu+0xd7/0x1b0 net/core/dev.c:9907
           dev_set_mtu+0x126/0x260 net/core/dev_api.c:248
           team_port_del+0xb07/0xcb0 drivers/net/team/team_core.c:1333
           team_del_slave drivers/net/team/team_core.c:1936 [inline]
           team_device_event+0x207/0x5b0 drivers/net/team/team_core.c:2929
           notifier_call_chain+0x19d/0x3a0 kernel/notifier.c:85
           call_netdevice_notifiers_extack net/core/dev.c:2281 [inline]
           call_netdevice_notifiers net/core/dev.c:2295 [inline]
           __dev_change_net_namespace+0xcb7/0x2050 net/core/dev.c:12592
           do_setlink+0x2ce/0x4590 net/core/rtnetlink.c:3060
           rtnl_changelink net/core/rtnetlink.c:3776 [inline]
           __rtnl_newlink net/core/rtnetlink.c:3935 [inline]
           rtnl_newlink+0x15a9/0x1be0 net/core/rtnetlink.c:4072
           rtnetlink_rcv_msg+0x7d5/0xbe0 net/core/rtnetlink.c:6958
           netlink_rcv_skb+0x232/0x4b0 net/netlink/af_netlink.c:2550
           netlink_unicast_kernel net/netlink/af_netlink.c:1318 [inline]
           netlink_unicast+0x80f/0x9b0 net/netlink/af_netlink.c:1344
           netlink_sendmsg+0x813/0xb40 net/netlink/af_netlink.c:1894

    problem. Ido Schimmel found steps to reproduce

      ip link add name team1 type team
      ip link add name dummy1 mtu 1499 master team1 type dummy
      ip netns add ns1
      ip link set dev dummy1 netns ns1
      ip -n ns1 link del dev dummy1

    and also found that the same issue was fixed in the bond driver in
    commit f51048c3e07b ("bonding: avoid NETDEV_CHANGEMTU event when
    unregistering slave").

    Let's do similar thing for the team driver, with commit ad7c7b2172c3 ("net:
    hold netdev instance lock during sysfs operations") and commit 303a8487a657
    ("net: s/__dev_set_mtu/__netif_set_mtu/") also applied.

    Reported-by: syzbot+881d65229ca4f9ae8c84@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Suggested-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device")
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Link: https://patch.msgid.link/20260224125709.317574-2-idosch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

diff --git a/drivers/net/team/team_core.c b/drivers/net/team/team_core.c
index c08a5c1bd6e4..a0fe998cc055 100644
--- a/drivers/net/team/team_core.c
+++ b/drivers/net/team/team_core.c
@@ -1292,7 +1292,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,

 static void __team_port_change_port_removed(struct team_port *port);

-static int team_port_del(struct team *team, struct net_device *port_dev)
+static int team_port_del(struct team *team, struct net_device *port_dev, bool unregister)
 {
 	struct net_device *dev = team->dev;
 	struct team_port *port;
@@ -1330,7 +1330,13 @@ static int team_port_del(struct team *team, struct net_device *port_dev)
 	__team_port_change_port_removed(port);

 	team_port_set_orig_dev_addr(port);
-	dev_set_mtu(port_dev, port->orig.mtu);
+	if (unregister) {
+		netdev_lock_ops(port_dev);
+		__netif_set_mtu(port_dev, port->orig.mtu);
+		netdev_unlock_ops(port_dev);
+	} else {
+		dev_set_mtu(port_dev, port->orig.mtu);
+	}
 	kfree_rcu(port, rcu);
 	netdev_info(dev, "Port device %s removed\n", portname);
 	netdev_compute_master_upper_features(team->dev, true);
@@ -1634,7 +1640,7 @@ static void team_uninit(struct net_device *dev)
 	ASSERT_RTNL();

 	list_for_each_entry_safe(port, tmp, &team->port_list, list)
-		team_port_del(team, port->dev);
+		team_port_del(team, port->dev, false);

 	__team_change_mode(team, NULL); /* cleanup */
 	__team_options_unregister(team, team_options, ARRAY_SIZE(team_options));
@@ -1933,7 +1939,16 @@ static int team_del_slave(struct net_device *dev, struct net_device *port_dev)

 	ASSERT_RTNL();

-	return team_port_del(team, port_dev);
+	return team_port_del(team, port_dev, false);
+}
+
+static int team_del_slave_on_unregister(struct net_device *dev, struct net_device *port_dev)
+{
+	struct team *team = netdev_priv(dev);
+
+	ASSERT_RTNL();
+
+	return team_port_del(team, port_dev, true);
 }

 static netdev_features_t team_fix_features(struct net_device *dev,
@@ -2926,7 +2941,7 @@ static int team_device_event(struct notifier_block *unused,
 					       !!netif_oper_up(port->dev));
 		break;
 	case NETDEV_UNREGISTER:
-		team_del_slave(port->team->dev, dev);
+		team_del_slave_on_unregister(port->team->dev, dev);
 		break;
 	case NETDEV_FEAT_CHANGE:
 		if (!port->team->notifier_ctx) {
@@ -2999,3 +3014,4 @@ MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR("Jiri Pirko <jpirko@redhat.com>");
 MODULE_DESCRIPTION("Ethernet team device driver");
 MODULE_ALIAS_RTNL_LINK(DRV_NAME);
+MODULE_IMPORT_NS("NETDEV_INTERNAL");