diff -ur v2.4.32/linux/net/ipv4/netfilter/ip_nat_core.c linux/net/ipv4/netfilter/ip_nat_core.c --- v2.4.32/linux/net/ipv4/netfilter/ip_nat_core.c 2005-04-05 09:57:20.000000000 +0300 +++ linux/net/ipv4/netfilter/ip_nat_core.c 2005-12-10 15:38:12.044972384 +0200 @@ -626,7 +626,7 @@ } /* If there's a helper, assign it; based on new tuple. */ - if (!conntrack->master) + if (!conntrack->master && info->num_manips) info->helper = LIST_FIND(&helpers, helper_cmp, struct ip_nat_helper *, &reply); @@ -754,7 +754,7 @@ struct sk_buff **pskb) { unsigned int i; - struct ip_nat_helper *helper; + struct ip_nat_helper *helper = NULL; enum ip_conntrack_dir dir = CTINFO2DIR(ctinfo); int is_tcp = (*pskb)->nh.iph->protocol == IPPROTO_TCP; @@ -775,6 +775,7 @@ *pskb = nskb; } + helper = info->helper; if (info->manips[i].direction == dir && info->manips[i].hooknum == hooknum) { DEBUGP("Mangling %p: %s to %u.%u.%u.%u %u\n", @@ -791,7 +792,6 @@ &(*pskb)->nfcache); } } - helper = info->helper; READ_UNLOCK(&ip_nat_lock); if (helper) {