vlan: Stop using NLA_PUT*().
authorDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 00:50:45 +0000 (20:50 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 08:33:44 +0000 (04:33 -0400)
These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/8021q/vlan_netlink.c

index 50711368ad6a964726de2b284f84ca7d77468759..708c80ea1874fe7d827e086bdf18c57afe39db03 100644 (file)
@@ -166,11 +166,13 @@ static int vlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
        struct nlattr *nest;
        unsigned int i;
 
-       NLA_PUT_U16(skb, IFLA_VLAN_ID, vlan_dev_priv(dev)->vlan_id);
+       if (nla_put_u16(skb, IFLA_VLAN_ID, vlan_dev_priv(dev)->vlan_id))
+               goto nla_put_failure;
        if (vlan->flags) {
                f.flags = vlan->flags;
                f.mask  = ~0;
-               NLA_PUT(skb, IFLA_VLAN_FLAGS, sizeof(f), &f);
+               if (nla_put(skb, IFLA_VLAN_FLAGS, sizeof(f), &f))
+                       goto nla_put_failure;
        }
        if (vlan->nr_ingress_mappings) {
                nest = nla_nest_start(skb, IFLA_VLAN_INGRESS_QOS);
@@ -183,8 +185,9 @@ static int vlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
 
                        m.from = i;
                        m.to   = vlan->ingress_priority_map[i];
-                       NLA_PUT(skb, IFLA_VLAN_QOS_MAPPING,
-                               sizeof(m), &m);
+                       if (nla_put(skb, IFLA_VLAN_QOS_MAPPING,
+                                   sizeof(m), &m))
+                               goto nla_put_failure;
                }
                nla_nest_end(skb, nest);
        }
@@ -202,8 +205,9 @@ static int vlan_fill_info(struct sk_buff *skb, const struct net_device *dev)
 
                                m.from = pm->priority;
                                m.to   = (pm->vlan_qos >> 13) & 0x7;
-                               NLA_PUT(skb, IFLA_VLAN_QOS_MAPPING,
-                                       sizeof(m), &m);
+                               if (nla_put(skb, IFLA_VLAN_QOS_MAPPING,
+                                           sizeof(m), &m))
+                                       goto nla_put_failure;
                        }
                }
                nla_nest_end(skb, nest);