cvs commit: src/sys/netinet ip_fw2.c
Robert Watson
rwatson at FreeBSD.org
Sat Sep 27 19:14:50 UTC 2008
On Sun, 28 Sep 2008, Ganbold wrote:
> Robert Watson wrote:
>> rwatson 2008-09-27 10:14:02 UTC
>>
>> FreeBSD src repository
>>
>> Modified files:
>> sys/netinet ip_fw2.c Log:
>> SVN rev 183398 on 2008-09-27 10:14:02Z by rwatson
>> Rather than shadowing global variable 'lookup' in check_uidgid(),
>> rename
>> it to ugid_lookupp. This should make debugging issues with ipfw uid
>> rules easier.
>>
> Still panics:
>
> (kgdb) bt
> #0 doadump () at pcpu.h:221
> #1 0xc07b56fe in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:418
> #2 0xc07b59c3 in panic (fmt=Variable "fmt" is not available.
> ) at /usr/src/sys/kern/kern_shutdown.c:572
> #3 0xc07b3e86 in _rw_rlock (rw=0xc0e1d9ec, file=0xc284deed
> "/usr/src/sys/modules/ipfw/../../netinet/ip_fw2.c", line=2020)
> at /usr/src/sys/kern/kern_rwlock.c:283
> #4 0xc284c92a in ipfw_chk (args=0xc22c589c) at
> /usr/src/sys/modules/ipfw/../../netinet/ip_fw2.c:2020
> #5 0xc284d4c8 in ipfw_check_out (arg=0x0, m0=0xc22c59c0, ifp=0xc25b2c00,
> dir=2, inp=0xc2731c60)
Something seems odd here, we may be looking at an ipfw bug. The goal of
passing down the inpcb is that ipfw doesn't have to look it up (and hence
avoids acquiring locks in ipfw on the outbound path) -- the stack arguments
clearly show it held in ipfw, but locks are acquired anyway. This particular
change was purely cosmetic, but I'll review the ipfw code more closely and see
about a fix...
Robert N M Watson
Computer Laboratory
University of Cambridge
> at /usr/src/sys/modules/ipfw/../../netinet/ip_fw_pfil.c:253
> #6 0xc0860458 in pfil_run_hooks (ph=0xc0e1ccc0, mp=0xc22c5a30,
> ifp=0xc25b2c00, dir=2, inp=0xc2731c60) at /usr/src/sys/net/pfil.c:79
> #7 0xc08a87b2 in ip_output (m=0xc266ac00, opt=0x0, ro=0xc22c5a38, flags=0,
> imo=0x0, inp=0xc2731c60)
> at /usr/src/sys/netinet/ip_output.c:452
> #8 0xc090f5ee in tcp_twrespond (tw=0xc2ae1d68, flags=Variable "flags" is not
> available.
> ) at /usr/src/sys/netinet/tcp_timewait.c:602
> #9 0xc090fa46 in tcp_twcheck (inp=0xc2731c60, to=0xc22c5b50, th=0xc2668958,
> m=0xc2668900, tlen=0)
> at /usr/src/sys/netinet/tcp_timewait.c:407
> #10 0xc090482a in tcp_input (m=0xc2668900, off0=20) at
> /usr/src/sys/netinet/tcp_input.c:554
> #11 0xc08a6dc0 in ip_input (m=0xc2668900) at
> /usr/src/sys/netinet/ip_input.c:670
> #12 0xc085fc53 in netisr_dispatch (num=2, m=0xc2668900) at
> /usr/src/sys/net/netisr.c:178
> #13 0xc0859ba1 in ether_demux (ifp=0xc25b2c00, m=0xc2668900) at
> /usr/src/sys/net/if_ethersubr.c:842
> #14 0xc085a00f in ether_input (ifp=0xc25b2c00, m=0xc2668900) at
> /usr/src/sys/net/if_ethersubr.c:700
> #15 0xc057fefc in edintr (arg=0xc2534800) at /usr/src/sys/dev/ed/if_ed.c:1292
> #16 0xc0796ef5 in intr_event_execute_handlers (p=0xc24ba7d4, ie=0xc24d8e00)
> at /usr/src/sys/kern/kern_intr.c:1134
> #17 0xc0797b6f in ithread_loop (arg=0xc2570800) at
> /usr/src/sys/kern/kern_intr.c:1147
> #18 0xc0794cb8 in fork_exit (callout=0xc0797ad0 <ithread_loop>,
> arg=0xc2570800, frame=0xc22c5d38) at /usr/src/sys/kern/kern_fork.c:810
> #19 0xc0ab2110 in fork_trampoline () at
> /usr/src/sys/i386/i386/exception.s:270
> (kgdb) fr 4
> #4 0xc284c92a in ipfw_chk (args=0xc22c589c) at
> /usr/src/sys/modules/ipfw/../../netinet/ip_fw2.c:2020
> 2020 INP_INFO_RLOCK(pi);
> (kgdb) p inp
> No symbol "inp" in current context.
> (kgdb) p lookup
> $1 = {int (struct nameidata *)} 0xc0831e60 <lookup>
> (kgdb) p pi
> No symbol "pi" in current context.
> (kgdb) fr 5
> #5 0xc284d4c8 in ipfw_check_out (arg=0x0, m0=0xc22c59c0, ifp=0xc25b2c00,
> dir=2, inp=0xc2731c60)
> at /usr/src/sys/modules/ipfw/../../netinet/ip_fw_pfil.c:253
> 253 ipfw = ipfw_chk(&args);
> (kgdb) p inp
> $2 = (struct inpcb *) 0xc2731c60
> (kgdb) p lookup
> $3 = {int (struct nameidata *)} 0xc0831e60 <lookup>
> (kgdb) list
> 248 }
> 249 250 args.m = *m0;
> 251 args.oif = ifp;
> 252 args.inp = inp;
> 253 ipfw = ipfw_chk(&args);
> 254 *m0 = args.m;
> 255 tee = 0;
> 256 257 KASSERT(*m0 != NULL || ipfw == IP_FW_DENY, ("%s: m0 is
> NULL",
> (kgdb) fr 4
> #4 0xc284c92a in ipfw_chk (args=0xc22c589c) at
> /usr/src/sys/modules/ipfw/../../netinet/ip_fw2.c:2020
> 2020 h = 0;
> (kgdb) list
> 2015 dcard = INPLOOKUP_WILDCARD;
> 2016 pi = &V_udbinfo;
> 2017 } else
> 2018 return 0;
> 2019 match = 0;
> 2020 if (*ugid_lookupp == 0) {
> 2021 INP_INFO_RLOCK(pi);
> 2022 pcb = (oif) ?
> 2023 in_pcblookup_hash(pi,
> 2024 dst_ip, htons(dst_port),
> (kgdb) p ugid_lookupp
> No symbol "ugid_lookupp" in current context.
> (kgdb) p *ugid_lookupp
> No symbol "ugid_lookupp" in current context.
> (kgdb) fr 5
> #5 0xc284d4c8 in ipfw_check_out (arg=0x0, m0=0xc22c59c0, ifp=0xc25b2c00,
> dir=2, inp=0xc2731c60)
> at /usr/src/sys/modules/ipfw/../../netinet/ip_fw_pfil.c:253
> 253 ipfw = ipfw_chk(&args);
> (kgdb) p *ugid_lookupp
> No symbol "ugid_lookupp" in current context.
> (kgdb)
>
>
>
>> MFC after: 3 days
>> Revision Changes Path
>> 1.194 +8 -8 src/sys/netinet/ip_fw2.c
>> _______________________________________________
>> cvs-all at freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/cvs-all
>> To unsubscribe, send any mail to "cvs-all-unsubscribe at freebsd.org"
>>
>>
>>
>>
>
>
> --
> Where there's a will, there's an Inheritance Tax.
>
More information about the cvs-src
mailing list