* Re: [PATCH] ip_fragment:kernel may panic when replay big packet with RST flag [not found] <AANLkTikoSxVd3kTggsCGpjXz-5CFuVNxjnpuZNgWd3eV@mail.gmail.com> @ 2011-03-26 13:36 ` Changli Gao 2011-03-28 11:30 ` Patrick McHardy 0 siblings, 1 reply; 2+ messages in thread From: Changli Gao @ 2011-03-26 13:36 UTC (permalink / raw) To: Feng Gao Cc: netdev, Eric Dumazet, Patrick McHardy, Netfilter Developer Mailing List On Wed, Mar 23, 2011 at 6:49 PM, Feng Gao <kernel.goter@gmail.com> wrote: > Hello everyone: > > PC(A)-linux(B)-PC(C) > computer(linux B) with two net interface,eth0 and eth1. > PC(A) send syn to PC(C) though linux B. > then PC(C) replay a big packet with RST flag(use tcpsic or other tools). > > This RST packet(1480) come in from eth0(mtu 1500) and go out from > eth1(mtu 700), so this RST packet should fragment. > > BUT in tcp_packet func: if the connection has no reply packet,and > receive the RST packet.ip_conntrack should destroy. > if (!test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) { > /* If only reply is a RST, we can consider ourselves not to > have an established connection: this is a fairly common > problem case, so we can delete the conntrack > immediately. --RR */ > if (th->rst) { > nf_ct_kill_acct(ct, ctinfo, skb); > return NF_ACCEPT; > } > } > > BUT the skb->nfct is not set NULL in func nf_ct_kill_acct. > so when this RST packet goto ip_fragment,ip_fragment call nf_copy, in > __nf_copy func > the fragment skb->nfct point to the destory mem. > dst->nfct = src->nfct; > nf_conntrack_get(src->nfct); > > SO finally.kfree_skb call destroy_conntrack again. this may result in > LINUX B kernel panic. > > Have you ever tested that? I am afraid no panic will happen. nf_ct_kill_acct() just drops the reference owned by the corresponding timeout timer to the ct if the timer is installed, so the skb still has the reference to the ct after nf_ct_kill_acct() returns. Thanks. BTW: all the patches related to netfilter should be sent to the netfilter developer mailing list. -- Regards, Changli Gao(xiaosuo@gmail.com) -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] ip_fragment:kernel may panic when replay big packet with RST flag 2011-03-26 13:36 ` [PATCH] ip_fragment:kernel may panic when replay big packet with RST flag Changli Gao @ 2011-03-28 11:30 ` Patrick McHardy 0 siblings, 0 replies; 2+ messages in thread From: Patrick McHardy @ 2011-03-28 11:30 UTC (permalink / raw) To: Changli Gao Cc: Feng Gao, netdev, Eric Dumazet, Netfilter Developer Mailing List On 26.03.2011 14:36, Changli Gao wrote: > On Wed, Mar 23, 2011 at 6:49 PM, Feng Gao <kernel.goter@gmail.com> wrote: >> Hello everyone: >> >> PC(A)-linux(B)-PC(C) >> computer(linux B) with two net interface,eth0 and eth1. >> PC(A) send syn to PC(C) though linux B. >> then PC(C) replay a big packet with RST flag(use tcpsic or other tools). >> >> This RST packet(1480) come in from eth0(mtu 1500) and go out from >> eth1(mtu 700), so this RST packet should fragment. >> >> BUT in tcp_packet func: if the connection has no reply packet,and >> receive the RST packet.ip_conntrack should destroy. >> if (!test_bit(IPS_SEEN_REPLY_BIT, &ct->status)) { >> /* If only reply is a RST, we can consider ourselves not to >> have an established connection: this is a fairly common >> problem case, so we can delete the conntrack >> immediately. --RR */ >> if (th->rst) { >> nf_ct_kill_acct(ct, ctinfo, skb); >> return NF_ACCEPT; >> } >> } >> >> BUT the skb->nfct is not set NULL in func nf_ct_kill_acct. >> so when this RST packet goto ip_fragment,ip_fragment call nf_copy, in >> __nf_copy func >> the fragment skb->nfct point to the destory mem. >> dst->nfct = src->nfct; >> nf_conntrack_get(src->nfct); >> >> SO finally.kfree_skb call destroy_conntrack again. this may result in >> LINUX B kernel panic. >> > > Have you ever tested that? I am afraid no panic will happen. > nf_ct_kill_acct() just drops the reference owned by the corresponding > timeout timer to the ct if the timer is installed, so the skb still > has the reference to the ct after nf_ct_kill_acct() returns. Thanks. That's correct, the skb's reference is refcounted seperately and only dropped at the final kfree_skb(). ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-03-28 11:30 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <AANLkTikoSxVd3kTggsCGpjXz-5CFuVNxjnpuZNgWd3eV@mail.gmail.com> 2011-03-26 13:36 ` [PATCH] ip_fragment:kernel may panic when replay big packet with RST flag Changli Gao 2011-03-28 11:30 ` Patrick McHardy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).