diff options
Diffstat (limited to 'net/ipv6/reassembly.c')
-rw-r--r-- | net/ipv6/reassembly.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index e6e44cef8db2..790d9f4b8b0b 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c | |||
@@ -342,9 +342,17 @@ found: | |||
342 | } | 342 | } |
343 | 343 | ||
344 | if (fq->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && | 344 | if (fq->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && |
345 | fq->q.meat == fq->q.len) | 345 | fq->q.meat == fq->q.len) { |
346 | return ip6_frag_reasm(fq, prev, dev); | 346 | int res; |
347 | unsigned long orefdst = skb->_skb_refdst; | ||
348 | |||
349 | skb->_skb_refdst = 0UL; | ||
350 | res = ip6_frag_reasm(fq, prev, dev); | ||
351 | skb->_skb_refdst = orefdst; | ||
352 | return res; | ||
353 | } | ||
347 | 354 | ||
355 | skb_dst_drop(skb); | ||
348 | inet_frag_lru_move(&fq->q); | 356 | inet_frag_lru_move(&fq->q); |
349 | return -1; | 357 | return -1; |
350 | 358 | ||