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 | } |
