diff options
Diffstat (limited to 'net/openvswitch')
-rw-r--r-- | net/openvswitch/flow.c | 8 | ||||
-rw-r--r-- | net/openvswitch/flow_netlink.c | 2 |
2 files changed, 6 insertions, 4 deletions
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c index 57e07768c9d1..f54cf17ef7a8 100644 --- a/net/openvswitch/flow.c +++ b/net/openvswitch/flow.c | |||
@@ -276,10 +276,12 @@ static int parse_ipv6hdr(struct sk_buff *skb, struct sw_flow_key *key) | |||
276 | 276 | ||
277 | nexthdr = ipv6_find_hdr(skb, &payload_ofs, -1, &frag_off, &flags); | 277 | nexthdr = ipv6_find_hdr(skb, &payload_ofs, -1, &frag_off, &flags); |
278 | if (flags & IP6_FH_F_FRAG) { | 278 | if (flags & IP6_FH_F_FRAG) { |
279 | if (frag_off) | 279 | if (frag_off) { |
280 | key->ip.frag = OVS_FRAG_TYPE_LATER; | 280 | key->ip.frag = OVS_FRAG_TYPE_LATER; |
281 | else | 281 | key->ip.proto = nexthdr; |
282 | key->ip.frag = OVS_FRAG_TYPE_FIRST; | 282 | return 0; |
283 | } | ||
284 | key->ip.frag = OVS_FRAG_TYPE_FIRST; | ||
283 | } else { | 285 | } else { |
284 | key->ip.frag = OVS_FRAG_TYPE_NONE; | 286 | key->ip.frag = OVS_FRAG_TYPE_NONE; |
285 | } | 287 | } |
diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c index 435a4bdf8f89..691da853bef5 100644 --- a/net/openvswitch/flow_netlink.c +++ b/net/openvswitch/flow_netlink.c | |||
@@ -500,7 +500,7 @@ static int __parse_flow_nlattrs(const struct nlattr *attr, | |||
500 | return -EINVAL; | 500 | return -EINVAL; |
501 | } | 501 | } |
502 | 502 | ||
503 | if (!nz || !is_all_zero(nla_data(nla), expected_len)) { | 503 | if (!nz || !is_all_zero(nla_data(nla), nla_len(nla))) { |
504 | attrs |= 1 << type; | 504 | attrs |= 1 << type; |
505 | a[type] = nla; | 505 | a[type] = nla; |
506 | } | 506 | } |