summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorHaibo Xi <haibbo@gmail.com>2012-12-06 23:42:17 +0000
committerPablo Neira Ayuso <pablo@netfilter.org>2012-12-16 23:41:25 +0100
commit97cf00e93cc24898493e7a058105e3215257ee04 (patch)
tree2e5dc412ebebf1cc54ad434017db90cb5aa6a2cf /net
parentd7a769ff0e8f908ae8113fe523e7806b6d0b5fc7 (diff)
downloadlinux-97cf00e93cc24898493e7a058105e3215257ee04.tar.gz
linux-97cf00e93cc24898493e7a058105e3215257ee04.tar.bz2
linux-97cf00e93cc24898493e7a058105e3215257ee04.zip
netfilter: nf_ct_reasm: fix conntrack reassembly expire code
Commit b836c99fd6c9 (ipv6: unify conntrack reassembly expire code with standard one) use the standard IPv6 reassembly code(ip6_expire_frag_queue) to handle conntrack reassembly expire. In ip6_expire_frag_queue, it invoke dev_get_by_index_rcu to get which device received this expired packet.so we must save ifindex when NF_conntrack get this packet. With this patch applied, I can see ICMP Time Exceeded sent from the receiver when the sender sent out 1/2 fragmented IPv6 packet. Signed-off-by: Haibo Xi <haibbo@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/netfilter/nf_conntrack_reasm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
index 22c8ea951185..3dacecc99065 100644
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
@@ -311,7 +311,10 @@ found:
else
fq->q.fragments = skb;
- skb->dev = NULL;
+ if (skb->dev) {
+ fq->iif = skb->dev->ifindex;
+ skb->dev = NULL;
+ }
fq->q.stamp = skb->tstamp;
fq->q.meat += skb->len;
if (payload_len > fq->q.max_size)