openvswitch: 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>
This commit is contained in:
@ -1174,11 +1174,13 @@ int ovs_flow_to_nlattrs(const struct sw_flow_key *swkey, struct sk_buff *skb)
|
||||
struct ovs_key_ethernet *eth_key;
|
||||
struct nlattr *nla, *encap;
|
||||
|
||||
if (swkey->phy.priority)
|
||||
NLA_PUT_U32(skb, OVS_KEY_ATTR_PRIORITY, swkey->phy.priority);
|
||||
if (swkey->phy.priority &&
|
||||
nla_put_u32(skb, OVS_KEY_ATTR_PRIORITY, swkey->phy.priority))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (swkey->phy.in_port != USHRT_MAX)
|
||||
NLA_PUT_U32(skb, OVS_KEY_ATTR_IN_PORT, swkey->phy.in_port);
|
||||
if (swkey->phy.in_port != USHRT_MAX &&
|
||||
nla_put_u32(skb, OVS_KEY_ATTR_IN_PORT, swkey->phy.in_port))
|
||||
goto nla_put_failure;
|
||||
|
||||
nla = nla_reserve(skb, OVS_KEY_ATTR_ETHERNET, sizeof(*eth_key));
|
||||
if (!nla)
|
||||
@ -1188,8 +1190,9 @@ int ovs_flow_to_nlattrs(const struct sw_flow_key *swkey, struct sk_buff *skb)
|
||||
memcpy(eth_key->eth_dst, swkey->eth.dst, ETH_ALEN);
|
||||
|
||||
if (swkey->eth.tci || swkey->eth.type == htons(ETH_P_8021Q)) {
|
||||
NLA_PUT_BE16(skb, OVS_KEY_ATTR_ETHERTYPE, htons(ETH_P_8021Q));
|
||||
NLA_PUT_BE16(skb, OVS_KEY_ATTR_VLAN, swkey->eth.tci);
|
||||
if (nla_put_be16(skb, OVS_KEY_ATTR_ETHERTYPE, htons(ETH_P_8021Q)) ||
|
||||
nla_put_be16(skb, OVS_KEY_ATTR_VLAN, swkey->eth.tci))
|
||||
goto nla_put_failure;
|
||||
encap = nla_nest_start(skb, OVS_KEY_ATTR_ENCAP);
|
||||
if (!swkey->eth.tci)
|
||||
goto unencap;
|
||||
@ -1200,7 +1203,8 @@ int ovs_flow_to_nlattrs(const struct sw_flow_key *swkey, struct sk_buff *skb)
|
||||
if (swkey->eth.type == htons(ETH_P_802_2))
|
||||
goto unencap;
|
||||
|
||||
NLA_PUT_BE16(skb, OVS_KEY_ATTR_ETHERTYPE, swkey->eth.type);
|
||||
if (nla_put_be16(skb, OVS_KEY_ATTR_ETHERTYPE, swkey->eth.type))
|
||||
goto nla_put_failure;
|
||||
|
||||
if (swkey->eth.type == htons(ETH_P_IP)) {
|
||||
struct ovs_key_ipv4 *ipv4_key;
|
||||
|
Reference in New Issue
Block a user