netfilter: {ip,ip6,arp}_tables: fix incorrect loop detection
authorPatrick McHardy <kaber@trash.net>
Wed, 25 Mar 2009 18:26:35 +0000 (19:26 +0100)
committerPatrick McHardy <kaber@trash.net>
Wed, 25 Mar 2009 18:26:35 +0000 (19:26 +0100)
commit1f9352ae2253a97b07b34dcf16ffa3b4ca12c558
treee6d487c5d0dd82da34b53cc64bfd7c2d5e9f98f1
parentaf9d32ad6718b9a80fa89f557cc1fbb63a93ec15
netfilter: {ip,ip6,arp}_tables: fix incorrect loop detection

Commit e1b4b9f ([NETFILTER]: {ip,ip6,arp}_tables: fix exponential worst-case
search for loops) introduced a regression in the loop detection algorithm,
causing sporadic incorrectly detected loops.

When a chain has already been visited during the check, it is treated as
having a standard target containing a RETURN verdict directly at the
beginning in order to not check it again. The real target of the first
rule is then incorrectly treated as STANDARD target and checked not to
contain invalid verdicts.

Fix by making sure the rule does actually contain a standard target.

Based on patch by Francis Dupont <Francis_Dupont@isc.org>
Signed-off-by: Patrick McHardy <kaber@trash.net>
net/ipv4/netfilter/arp_tables.c
net/ipv4/netfilter/ip_tables.c
net/ipv6/netfilter/ip6_tables.c