patch-2.4.27 linux-2.4.27/net/ipv4/netfilter/ip_conntrack_core.c
Next file: linux-2.4.27/net/ipv4/netfilter/ip_conntrack_standalone.c
Previous file: linux-2.4.27/net/ipv4/netfilter/arp_tables.c
Back to the patch index
Back to the overall index
- Lines: 65
- Date:
2004-08-07 16:26:06.987442641 -0700
- Orig file:
linux-2.4.26/net/ipv4/netfilter/ip_conntrack_core.c
- Orig date:
2004-02-18 05:36:32.000000000 -0800
diff -urN linux-2.4.26/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.27/net/ipv4/netfilter/ip_conntrack_core.c
@@ -175,13 +175,12 @@
destroy_expect(struct ip_conntrack_expect *exp)
{
DEBUGP("destroy_expect(%p) use=%d\n", exp, atomic_read(&exp->use));
- IP_NF_ASSERT(atomic_read(&exp->use));
+ IP_NF_ASSERT(atomic_read(&exp->use) == 0);
IP_NF_ASSERT(!timer_pending(&exp->timeout));
kfree(exp);
}
-
inline void ip_conntrack_expect_put(struct ip_conntrack_expect *exp)
{
IP_NF_ASSERT(exp);
@@ -326,8 +325,9 @@
ip_conntrack_destroyed(ct);
WRITE_LOCK(&ip_conntrack_lock);
- /* Delete us from our own list to prevent corruption later */
- list_del(&ct->sibling_list);
+ /* Make sure don't leave any orphaned expectations lying around */
+ if (ct->expecting)
+ remove_expectations(ct, 1);
/* Delete our master expectation */
if (ct->master) {
@@ -503,7 +503,7 @@
enum ip_conntrack_info *ctinfo,
unsigned int hooknum)
{
- const struct iphdr *iph;
+ const struct iphdr *iph = skb->nh.iph;
struct icmphdr *hdr;
struct ip_conntrack_tuple innertuple, origtuple;
struct iphdr *inner;
@@ -514,7 +514,6 @@
IP_NF_ASSERT(iph->protocol == IPPROTO_ICMP);
IP_NF_ASSERT(skb->nfct == NULL);
- iph = skb->nh.iph;
hdr = (struct icmphdr *)((u_int32_t *)iph + iph->ihl);
inner = (struct iphdr *)(hdr + 1);
datalen = skb->len - iph->ihl*4 - sizeof(*hdr);
@@ -730,7 +729,6 @@
DEBUGP("conntrack: expectation arrives ct=%p exp=%p\n",
conntrack, expected);
/* Welcome, Mr. Bond. We've been expecting you... */
- IP_NF_ASSERT(master_ct(conntrack));
__set_bit(IPS_EXPECTED_BIT, &conntrack->status);
conntrack->master = expected;
expected->sibling = conntrack;
@@ -1115,10 +1113,8 @@
DUMP_TUPLE(newreply);
conntrack->tuplehash[IP_CT_DIR_REPLY].tuple = *newreply;
- if (!conntrack->master)
- conntrack->helper = LIST_FIND(&helpers, helper_cmp,
- struct ip_conntrack_helper *,
- newreply);
+ if (!conntrack->master && list_empty(&conntrack->sibling_list))
+ conntrack->helper = ip_ct_find_helper(newreply);
WRITE_UNLOCK(&ip_conntrack_lock);
return 1;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)