Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Jul 2002 02:14:07 +0400 (MSD)
From:      Dmitry Morozovsky <marck@rinet.ru>
To:        FreeBSD-gnats-submit@FreeBSD.org
Cc:        luigi@FreeBSD.org, noc@rinet.ru
Subject:   kern/40508: RELENG_4 after 09.07.2002 luigi's commit to ipfw and companion kernel crashes
Message-ID:  <200207122214.g6CME7X95209@woozle.rinet.ru>

next in thread | raw e-mail | index | archive | help

>Number:         40508
>Category:       kern
>Synopsis:       RELENG_4 after 09.07.2002 luigi's commit to ipfw and companion kernel crashes
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Jul 12 15:40:01 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Dmitry Morozovsky
>Release:        FreeBSD 4-STABLE i386
>Organization:
Cronyx Plus LLC (RiNet ISP)
>Environment:
System: FreeBSD donkey.rinet.ru 4.6-STABLE FreeBSD 4.6-STABLE #1: Fri Jul 12 23:29:37 MSD 2002     root@:/var/obj/lh/src/sys/gwfn  i386


>Description:
	After luigi's commit at 09.07.2002 to src/sys/net{,inet} (RELENG_4)
kernel now crashes if dummynet shaping is configured, at least by
virtually any multicast packet.


kernel traceback follows:

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x40
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xc019304c
stack pointer           = 0x10:0xc9fdfe50
frame pointer           = 0x10:0xc9fdfef0
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 423 (tcsh)
interrupt mask          = net 
trap number             = 12
panic: page fault

syncing disks... 9 2 1 1 
done
Uptime: 2h29m59s

dumping to dev #ad/0x20001, offset 917504
dump ata0: resetting devices .. ata0: mask=03 ostat0=50 ostat2=00
ad0: ATAPI 00 00
ata0-slave: ATAPI 00 00
ata0: mask=03 stat0=50 stat1=00
ad0: ATA 01 a5
ata0: devices=01
ad0: success setting PIO4 on generic chip
done
64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 
---
#0  dumpsys () at /lh/src/sys/kern/kern_shutdown.c:487
487             if (dumping++) {
(kgdb) bt
#0  dumpsys () at /lh/src/sys/kern/kern_shutdown.c:487
#1  0xc0143e71 in boot (howto=256) at /lh/src/sys/kern/kern_shutdown.c:316
#2  0xc0144298 in poweroff_wait (junk=0xc021538c, howto=-1071558993) at /lh/src/sys/kern/kern_shutdown.c:595
#3  0xc01ebff2 in trap_fatal (frame=0xc9fdfe10, eva=64) at /lh/src/sys/i386/i386/trap.c:974
#4  0xc01ebcd1 in trap_pfault (frame=0xc9fdfe10, usermode=0, eva=64) at /lh/src/sys/i386/i386/trap.c:867
#5  0xc01eb8c3 in trap (frame={tf_fs = 16, tf_es = 16, tf_ds = 16, tf_edi = 0, tf_esi = -1067717632, tf_ebp = -906101008, 
      tf_isp = -906101188, tf_ebx = 0, tf_edx = -1067717408, tf_ecx = -1014144340, tf_eax = 0, tf_trapno = 12, tf_err = 0, 
      tf_eip = -1072091060, tf_cs = 8, tf_eflags = 66070, tf_esp = -1014144384, tf_ss = 0}) at /lh/src/sys/i386/i386/trap.c:466
#6  0xc019304c in ip_output (m0=0xc05bec00, opt=0x0, ro=0xc38d62ac, flags=34, imo=0x0) at /lh/src/sys/netinet/ip_output.c:189
#7  0xc0189b16 in transmit_event (pipe=0xc37a4f00) at /lh/src/sys/netinet/ip_dummynet.c:425
#8  0xc0189dc3 in ready_event (q=0xc372ea80) at /lh/src/sys/netinet/ip_dummynet.c:577
#9  0xc018a234 in dummynet (unused=0x0) at /lh/src/sys/netinet/ip_dummynet.c:730
#10 0xc0149c72 in softclock () at /lh/src/sys/kern/kern_timeout.c:131
#11 0xc01e17b3 in doreti_swi ()
#12 0x8072359 in ?? ()
#13 0x805bf4d in ?? ()
#14 0x805bb81 in ?? ()
#15 0x8059156 in ?? ()
#16 0x804a645 in ?? ()
#17 0x8049a6a in ?? ()
#18 0x8048137 in ?? ()

#6  0xc019304c in ip_output (m0=0xc05bec00, opt=0x0, ro=0xc38d62ac, flags=34, imo=0x0) at /lh/src/sys/netinet/ip_output.c:189
189                     ia = ifatoia(ro->ro_rt->rt_ifa);
(kgdb) l
184             (void)ipsec_setsocket(m, NULL);
185     #endif
186             if (args.rule != NULL) {        /* dummynet already saw us */
187                     ip = mtod(m, struct ip *);
188                     hlen = IP_VHL_HL(ip->ip_vhl) << 2 ;
189                     ia = ifatoia(ro->ro_rt->rt_ifa);
190                     goto sendit;
191             }
192
193             if (opt) {

(kgdb) up
#7  0xc0189b16 in transmit_event (pipe=0xc37a4f00) at /lh/src/sys/netinet/ip_dummynet.c:425
425                 (void)ip_output((struct mbuf *)pkt, NULL, NULL, 0, NULL);
(kgdb) l
420              * The block IS FREED HERE because it contains parameters passed
421              * to the called routine.
422              */
423             switch (pkt->dn_dir) {
424             case DN_TO_IP_OUT:
425                 (void)ip_output((struct mbuf *)pkt, NULL, NULL, 0, NULL);
426                 rt_unref (pkt->ro.ro_rt) ;
427                 break ;
428
429             case DN_TO_IP_IN :
(kgdb) p *pkt
$1 = {hdr = {mh_next = 0xc05bec00, mh_nextpkt = 0x0, mh_data = 0x0, mh_len = 0, mh_type = 13, mh_flags = 15}, rule = 0xc3878d00, 
  dn_dir = 1, output_time = 8994965, ifp = 0xc35c2c00, dn_dst = 0xc38d62b0, ro = {ro_rt = 0x0, ro_dst = {sa_len = 16 '\020', 
      sa_family = 2 '\002', sa_data = "\000\000à\000\000\004\000\000\000\000\000\000\000"}}, flags = 34}
(kgdb) up
#8  0xc0189dc3 in ready_event (q=0xc372ea80) at /lh/src/sys/netinet/ip_dummynet.c:577
577             transmit_event(p);
(kgdb) l
572         /*
573          * If the delay line was empty call transmit_event(p) now.
574          * Otherwise, the scheduler will take care of it.
575          */
576         if (p_was_empty)
577             transmit_event(p);
578     }
579
580     /*
581      * Called when we can transmit packets on WF2Q queues. Take pkts out of
(kgdb) p *p
$2 = {next = 0x0, pipe_nr = 1, bandwidth = 64000, delay = 0, head = 0x0, tail = 0xc38d6280, scheduler_heap = {size = 0, elements = 0, 
    offset = 0, p = 0x0}, not_eligible_heap = {size = 0, elements = 0, offset = 0, p = 0x0}, idle_heap = {size = 0, elements = 0, 
    offset = 84, p = 0x0}, V = 0, sum = 0, numbytes = 0, sched_time = 0, if_name = '\000' <repeats 15 times>, ifp = 0x0, ready = 0, 
  fs = {next = 0x0, fs_nr = 0, flags_fs = 9, pipe = 0xc37a4f00, parent_nr = 0, weight = 0, qsize = 8192, plr = 0, flow_mask = {
      dst_ip = 0, src_ip = 4294967295, dst_port = 0, src_port = 0, proto = 0 '\000', flags = 0 '\000'}, rq_size = 64, rq_elements = 5, 
    rq = 0xc362d600, last_expired = 0, backlogged = 0, w_q = 0, max_th = 0, min_th = 0, max_p = 0, c_1 = 0, c_2 = 0, c_3 = 0, c_4 = 0, 
    w_q_lookup = 0x0, lookup_depth = 0, lookup_step = 0, lookup_weight = 0, avg_pkt_size = 0, max_pkt_size = 0}}



>How-To-Repeat:

build and run kernel with IPFIREWALL & DUMMYNET & MROUTING

add pipe rule:

ipfw pipe 1 config bw  64Kbit/s queue   8Kbytes mask src-ip 0xffffffff
ipfw add 10 pipe 1 ip from any to any via ed0

run mrouted


>Fix:

Don't know yet. Hopefully Luigi knows ;-P
>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200207122214.g6CME7X95209>