Skip to content

Commit 980b9af

Browse files
iveceragregkh
authored andcommitted
bridge: netlink: call br_changelink() during br_dev_newlink()
[ Upstream commit b6677449dff674cf5b81429b11d5c7f358852ef9 ] Any bridge options specified during link creation (e.g. ip link add) are ignored as br_dev_newlink() does not process them. Use br_changelink() to do it. Fixes: 1332351 ("bridge: implement rtnl_link_ops->changelink") Signed-off-by: Ivan Vecera <cera@cera.cz> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 8f9e4ad commit 980b9af

1 file changed

Lines changed: 19 additions & 14 deletions

File tree

net/bridge/br_netlink.c

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -773,20 +773,6 @@ static int br_validate(struct nlattr *tb[], struct nlattr *data[])
773773
return 0;
774774
}
775775

776-
static int br_dev_newlink(struct net *src_net, struct net_device *dev,
777-
struct nlattr *tb[], struct nlattr *data[])
778-
{
779-
struct net_bridge *br = netdev_priv(dev);
780-
781-
if (tb[IFLA_ADDRESS]) {
782-
spin_lock_bh(&br->lock);
783-
br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
784-
spin_unlock_bh(&br->lock);
785-
}
786-
787-
return register_netdevice(dev);
788-
}
789-
790776
static int br_port_slave_changelink(struct net_device *brdev,
791777
struct net_device *dev,
792778
struct nlattr *tb[],
@@ -1068,6 +1054,25 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
10681054
return 0;
10691055
}
10701056

1057+
static int br_dev_newlink(struct net *src_net, struct net_device *dev,
1058+
struct nlattr *tb[], struct nlattr *data[])
1059+
{
1060+
struct net_bridge *br = netdev_priv(dev);
1061+
int err;
1062+
1063+
if (tb[IFLA_ADDRESS]) {
1064+
spin_lock_bh(&br->lock);
1065+
br_stp_change_bridge_id(br, nla_data(tb[IFLA_ADDRESS]));
1066+
spin_unlock_bh(&br->lock);
1067+
}
1068+
1069+
err = br_changelink(dev, tb, data);
1070+
if (err)
1071+
return err;
1072+
1073+
return register_netdevice(dev);
1074+
}
1075+
10711076
static size_t br_get_size(const struct net_device *brdev)
10721077
{
10731078
return nla_total_size(sizeof(u32)) + /* IFLA_BR_FORWARD_DELAY */

0 commit comments

Comments
 (0)