| From foo@baz Sat 11 Jan 2020 09:52:53 AM CET |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Tue, 7 Jan 2020 01:42:25 -0800 |
| Subject: vlan: vlan_changelink() should propagate errors |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit eb8ef2a3c50092bb018077c047b8dba1ce0e78e3 ] |
| |
| Both vlan_dev_change_flags() and vlan_dev_set_egress_priority() |
| can return an error. vlan_changelink() should not ignore them. |
| |
| Fixes: 07b5b17e157b ("[VLAN]: Use rtnl_link API") |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/8021q/vlan_netlink.c | 10 +++++++--- |
| 1 file changed, 7 insertions(+), 3 deletions(-) |
| |
| --- a/net/8021q/vlan_netlink.c |
| +++ b/net/8021q/vlan_netlink.c |
| @@ -92,11 +92,13 @@ static int vlan_changelink(struct net_de |
| struct ifla_vlan_flags *flags; |
| struct ifla_vlan_qos_mapping *m; |
| struct nlattr *attr; |
| - int rem; |
| + int rem, err; |
| |
| if (data[IFLA_VLAN_FLAGS]) { |
| flags = nla_data(data[IFLA_VLAN_FLAGS]); |
| - vlan_dev_change_flags(dev, flags->flags, flags->mask); |
| + err = vlan_dev_change_flags(dev, flags->flags, flags->mask); |
| + if (err) |
| + return err; |
| } |
| if (data[IFLA_VLAN_INGRESS_QOS]) { |
| nla_for_each_nested(attr, data[IFLA_VLAN_INGRESS_QOS], rem) { |
| @@ -107,7 +109,9 @@ static int vlan_changelink(struct net_de |
| if (data[IFLA_VLAN_EGRESS_QOS]) { |
| nla_for_each_nested(attr, data[IFLA_VLAN_EGRESS_QOS], rem) { |
| m = nla_data(attr); |
| - vlan_dev_set_egress_priority(dev, m->from, m->to); |
| + err = vlan_dev_set_egress_priority(dev, m->from, m->to); |
| + if (err) |
| + return err; |
| } |
| } |
| return 0; |