]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: hsr: prevent creation of HSR device with slaves from another netns
authorFernando Fernandez Mancera <fmancera@suse.de>
Mon, 20 Oct 2025 13:55:33 +0000 (15:55 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 23 Oct 2025 02:22:22 +0000 (19:22 -0700)
HSR/PRP driver does not handle correctly having slaves/interlink devices
in a different net namespace. Currently, it is possible to create a HSR
link in a different net namespace than the slaves/interlink with the
following command:

 ip link add hsr0 netns hsr-ns type hsr slave1 eth1 slave2 eth2

As there is no use-case on supporting this scenario, enforce that HSR
device link matches netns defined by IFLA_LINK_NETNSID.

The iproute2 command mentioned above will throw the following error:

 Error: hsr: HSR slaves/interlink must be on the same net namespace than HSR link.

Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
Link: https://patch.msgid.link/20251020135533.9373-1-fmancera@suse.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/hsr/hsr_netlink.c

index b120470246cc5660cd43bf85f18edfa5ac7ca349..c96b63adf96ffbc11ec3de3cb52a3f3cd02b3701 100644 (file)
@@ -34,12 +34,18 @@ static int hsr_newlink(struct net_device *dev,
                       struct netlink_ext_ack *extack)
 {
        struct net *link_net = rtnl_newlink_link_net(params);
+       struct net_device *link[2], *interlink = NULL;
        struct nlattr **data = params->data;
        enum hsr_version proto_version;
        unsigned char multicast_spec;
        u8 proto = HSR_PROTOCOL_HSR;
 
-       struct net_device *link[2], *interlink = NULL;
+       if (!net_eq(link_net, dev_net(dev))) {
+               NL_SET_ERR_MSG_MOD(extack,
+                                  "HSR slaves/interlink must be on the same net namespace than HSR link");
+               return -EINVAL;
+       }
+
        if (!data) {
                NL_SET_ERR_MSG_MOD(extack, "No slave devices specified");
                return -EINVAL;