Date: Tue, 5 Apr 2005 05:31:16 +0400 (MSD) From: Oleg Bulyzhin <oleg@rinet.ru> To: FreeBSD-gnats-submit@freebsd.org Cc: oleg@rinet.ru Subject: dummynet & ipfw tee: kernel may hang (endless loop) Message-ID: <200504050131.j351VGw0025916@atex.rinet.ru>
next in thread | raw e-mail | index | archive | help
>Submitter-Id: current-users
>Originator: Oleg Bulyzhin <oleg@rinet.ru>
>Organization: Cronyx Plus LLC
>Confidential: no
>Synopsis: dummynet & ipfw tee: kernel may hang (endless loop)
>Severity: serious
>Priority: high
>Category: kern
>Class: sw-bug
>Release: FreeBSD 5.4-RC1 i386
>Environment:
System: FreeBSD atex.rinet.ru 5.4-RC1 FreeBSD 5.4-RC1 #7: Tue Apr 5 02:58:28 MSD 2005 root@atex.rinet.ru:/lh/obj/lh/src/sys/atex i386
any branch with working ipfw tee command
>Description:
Problem does not appear if you have net.inet.ip.fw.one_pass = 1
If you have net.inet.ip.fw.one_pass=0 packets will be reinjected
by dummynet back into ipfw. Any reinjected packet will have
args->rule != NULL (ip_fw2.c:1885) and next ipfw rule will be choosed
using args->rule. Such behaviour is wrong for packets reinjected
into ipfw by tee command.
If you try to tee "dummyneted" (i.e. reinjected by dummynet) packet,
kernel will hang in endless loop trying to tee same packet again and
again. This happens cause next ipfw rule choosen upon args->rule
instead of divert_cookie(mtag) (ip_fw2.c:1907)
>How-To-Repeat:
sysctl net.inet.ip.fw.one_pass=1
kldload dummynet
ipfw pipe 1 config
ipfw add 1 pipe 1 ip from any to any
ipfw add 2 tee 1 ip from any to any
ping localhost &
sysctl net.inet.ip.fw.one_pass=0
Right after last command kernel will hang.
>Fix:
Would be fine to have it fixed in 5.4-RELEASE
--- sys/netinet/ip_fw2.c~ Sun Apr 3 02:12:12 2005
+++ sys/netinet/ip_fw2.c Sun Apr 3 04:04:25 2005
@@ -1899,6 +1899,7 @@
f = args->rule->next_rule;
if (f == NULL)
f = lookup_next_rule(args->rule);
+ args->rule = NULL;
} else {
/*
* Find the starting rule. It can be either the first
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200504050131.j351VGw0025916>
