Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vlan: Stop using NLA_PUT*().

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>

+10 -6
+10 -6
net/8021q/vlan_netlink.c
··· 166 166 struct nlattr *nest; 167 167 unsigned int i; 168 168 169 - NLA_PUT_U16(skb, IFLA_VLAN_ID, vlan_dev_priv(dev)->vlan_id); 169 + if (nla_put_u16(skb, IFLA_VLAN_ID, vlan_dev_priv(dev)->vlan_id)) 170 + goto nla_put_failure; 170 171 if (vlan->flags) { 171 172 f.flags = vlan->flags; 172 173 f.mask = ~0; 173 - NLA_PUT(skb, IFLA_VLAN_FLAGS, sizeof(f), &f); 174 + if (nla_put(skb, IFLA_VLAN_FLAGS, sizeof(f), &f)) 175 + goto nla_put_failure; 174 176 } 175 177 if (vlan->nr_ingress_mappings) { 176 178 nest = nla_nest_start(skb, IFLA_VLAN_INGRESS_QOS); ··· 185 183 186 184 m.from = i; 187 185 m.to = vlan->ingress_priority_map[i]; 188 - NLA_PUT(skb, IFLA_VLAN_QOS_MAPPING, 189 - sizeof(m), &m); 186 + if (nla_put(skb, IFLA_VLAN_QOS_MAPPING, 187 + sizeof(m), &m)) 188 + goto nla_put_failure; 190 189 } 191 190 nla_nest_end(skb, nest); 192 191 } ··· 205 202 206 203 m.from = pm->priority; 207 204 m.to = (pm->vlan_qos >> 13) & 0x7; 208 - NLA_PUT(skb, IFLA_VLAN_QOS_MAPPING, 209 - sizeof(m), &m); 205 + if (nla_put(skb, IFLA_VLAN_QOS_MAPPING, 206 + sizeof(m), &m)) 207 + goto nla_put_failure; 210 208 } 211 209 } 212 210 nla_nest_end(skb, nest);