diff options
-rw-r--r-- | net/openvswitch/conntrack.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c index b5dcc0abde66..50095820edb7 100644 --- a/net/openvswitch/conntrack.c +++ b/net/openvswitch/conntrack.c | |||
@@ -326,8 +326,15 @@ static int handle_fragments(struct net *net, struct sw_flow_key *key, | |||
326 | return -EINVAL; | 326 | return -EINVAL; |
327 | } | 327 | } |
328 | 328 | ||
329 | /* Don't free 'skb' even though it is one of the original | ||
330 | * fragments, as we're going to morph it into the head. | ||
331 | */ | ||
332 | skb_get(skb); | ||
333 | nf_ct_frag6_consume_orig(reasm); | ||
334 | |||
329 | key->ip.proto = ipv6_hdr(reasm)->nexthdr; | 335 | key->ip.proto = ipv6_hdr(reasm)->nexthdr; |
330 | skb_morph(skb, reasm); | 336 | skb_morph(skb, reasm); |
337 | skb->next = reasm->next; | ||
331 | consume_skb(reasm); | 338 | consume_skb(reasm); |
332 | ovs_cb.mru = IP6CB(skb)->frag_max_size; | 339 | ovs_cb.mru = IP6CB(skb)->frag_max_size; |
333 | #endif | 340 | #endif |