This is a note to let you know that I've just added the patch titled net: check for altname conflicts when changing netdev's netns to the 6.1-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: net-check-for-altname-conflicts-when-changing-netdev-s-netns.patch and it can be found in the queue-6.1 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From 7663d522099ecc464512164e660bc771b2ff7b64 Mon Sep 17 00:00:00 2001 From: Jakub Kicinski <kuba@xxxxxxxxxx> Date: Tue, 17 Oct 2023 18:38:14 -0700 Subject: net: check for altname conflicts when changing netdev's netns From: Jakub Kicinski <kuba@xxxxxxxxxx> commit 7663d522099ecc464512164e660bc771b2ff7b64 upstream. It's currently possible to create an altname conflicting with an altname or real name of another device by creating it in another netns and moving it over: [ ~]$ ip link add dev eth0 type dummy [ ~]$ ip netns add test [ ~]$ ip -netns test link add dev ethX netns test type dummy [ ~]$ ip -netns test link property add dev ethX altname eth0 [ ~]$ ip -netns test link set dev ethX netns 1 [ ~]$ ip link ... 3: eth0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 02:40:88:62:ec:b8 brd ff:ff:ff:ff:ff:ff ... 5: ethX: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 26:b7:28:78:38:0f brd ff:ff:ff:ff:ff:ff altname eth0 Create a macro for walking the altnames, this hopefully makes it clearer that the list we walk contains only altnames. Which is otherwise not entirely intuitive. Fixes: 36fbf1e52bd3 ("net: rtnetlink: add linkprop commands to add and delete alternative ifnames") Reviewed-by: Jiri Pirko <jiri@xxxxxxxxxx> Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx> Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- net/core/dev.c | 9 ++++++++- net/core/dev.h | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1054,7 +1054,8 @@ static int __dev_alloc_name(struct net * for_each_netdev(net, d) { struct netdev_name_node *name_node; - list_for_each_entry(name_node, &d->name_node->list, list) { + + netdev_for_each_altname(d, name_node) { if (!sscanf(name_node->name, name, &i)) continue; if (i < 0 || i >= max_netdevices) @@ -10949,6 +10950,7 @@ EXPORT_SYMBOL(unregister_netdev); int __dev_change_net_namespace(struct net_device *dev, struct net *net, const char *pat, int new_ifindex) { + struct netdev_name_node *name_node; struct net *net_old = dev_net(dev); char new_name[IFNAMSIZ] = {}; int err, new_nsid; @@ -10981,6 +10983,11 @@ int __dev_change_net_namespace(struct ne if (err < 0) goto out; } + /* Check that none of the altnames conflicts. */ + err = -EEXIST; + netdev_for_each_altname(dev, name_node) + if (netdev_name_in_use(net, name_node->name)) + goto out; /* Check that new_ifindex isn't used yet. */ err = -EBUSY; --- a/net/core/dev.h +++ b/net/core/dev.h @@ -61,6 +61,9 @@ struct netdev_name_node { int netdev_get_name(struct net *net, char *name, int ifindex); int dev_change_name(struct net_device *dev, const char *newname); +#define netdev_for_each_altname(dev, namenode) \ + list_for_each_entry((namenode), &(dev)->name_node->list, list) + int netdev_name_node_alt_create(struct net_device *dev, const char *name); int netdev_name_node_alt_destroy(struct net_device *dev, const char *name); Patches currently in stable-queue which might be from kuba@xxxxxxxxxx are queue-6.1/net-fix-ifname-in-netlink-ntf-during-netns-move.patch queue-6.1/net-sched-sch_hfsc-upgrade-rt-to-sc-when-it-becomes-a-inner-curve.patch queue-6.1/ipv4-fib-annotate-races-around-nh-nh_saddr_genid-and-nh-nh_saddr.patch queue-6.1/ice-reset-first-in-crash-dump-kernels.patch queue-6.1/net-phy-bcm7xxx-add-missing-16nm-ephy-statistics.patch queue-6.1/tcp-check-mptcp-level-constraints-for-backlog-coalescing.patch queue-6.1/net-smc-return-the-right-falback-reason-when-prefix-checks-fail.patch queue-6.1/tcp-fix-excessive-tlp-and-rack-timeouts-from-hz-rounding.patch queue-6.1/net-usb-smsc95xx-fix-an-error-code-in-smsc95xx_reset.patch queue-6.1/octeon_ep-update-bql-sent-bytes-before-ringing-doorbell.patch queue-6.1/net-check-for-altname-conflicts-when-changing-netdev-s-netns.patch queue-6.1/tcp-fix-listen-warning-with-v4-mapped-v6-address.patch queue-6.1/mptcp-more-conservative-check-for-zero-probes.patch queue-6.1/ice-fix-over-shifted-variable.patch queue-6.1/net-avoid-uaf-on-deleted-altname.patch queue-6.1/net-dsa-bcm_sf2-fix-possible-memory-leak-in-bcm_sf2_mdio_register.patch queue-6.1/tcp-tsq-relax-tcp_small_queue_check-when-rtx-queue-contains-a-single-skb.patch queue-6.1/netlink-correct-offload_xstats-size.patch queue-6.1/tun-prevent-negative-ifindex.patch queue-6.1/i40e-prevent-crash-on-probe-if-hw-registers-have-invalid-values.patch queue-6.1/nfc-nci-fix-possible-null-pointer-dereference-in-send_acknowledge.patch