Thread (1 message) 1 message, 1 author, 2016-01-07

Re: [PATCH RESEND] net:8021q:Fix error handling in the function vlan_changelink

From: Patrick McHardy <hidden>
Date: 2016-01-07 22:06:57
Also in: lkml

On 07.01, Nicholas Krause wrote:
quoted hunk
This fixes error handling in the function vlan_changelink to properly
check if its internal calls to the functions vlan_dev_change_flags
and vlan_dev_set_egress_priority have failed by returning a error
code which if this occurs return immediately to the caller of
vlan_changelink to signal to the caller that a failure has occurred
when calling this particular function.

Signed-off-by: Nicholas Krause <redacted>
---
 net/8021q/vlan_netlink.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
index c92b52f..10e79b8 100644
--- a/net/8021q/vlan_netlink.c
+++ b/net/8021q/vlan_netlink.c
@@ -93,10 +93,13 @@ static int vlan_changelink(struct net_device *dev,
 	struct ifla_vlan_qos_mapping *m;
 	struct nlattr *attr;
 	int rem;
+	int err = 0;
 
 	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)
+			goto err;
 	}
 	if (data[IFLA_VLAN_INGRESS_QOS]) {
 		nla_for_each_nested(attr, data[IFLA_VLAN_INGRESS_QOS], rem) {
@@ -107,10 +110,13 @@ static int vlan_changelink(struct net_device *dev,
 	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)
+				break;
The netlink interface is supposed to provide transactional semantics. If you
want to handle this case properly, you need to unroll previous configuration
changes.
 		}
 	}
-	return 0;
+err:
+	return err;
 }
 
 static int vlan_newlink(struct net *src_net, struct net_device *dev,
-- 
2.1.4
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help