]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/openvswitch/flow.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch
[karo-tx-linux.git] / net / openvswitch / flow.c
index 1115dcf70362fbefcc5a0515980fbc53cb34931b..b7f38b161909f0ea9ad8cf373ae77ab957cf5311 100644 (file)
@@ -1176,11 +1176,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)
@@ -1190,8 +1192,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;
@@ -1202,7 +1205,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;