Date: 16 Jul 2002 13:09:39 -0500 From: Craig Boston <craig@meoqu.gank.org> To: stable@freebsd.org Subject: Re: weird kernel panics Message-ID: <1026842984.1084.9.camel@owen1492.it.oot> In-Reply-To: <20020716153506.GA41125@gx.dnepr.net> References: <20020716153506.GA41125@gx.dnepr.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Just another data point, this has happened to me as well. This was on a production box so I hadn't had time to trace it yet; thanks Andrey :) Very similar setup -- zebra and ospfd running on a box with a vlan on an fxp card. Killing ospfd will sometimes cause this panic (whether I kill it manually or a shutdown -r kills it). This was happening to me on 4.5-STABLE, so it looks like it's been around at least since then. Pseudo-workaround for me was to not kill ospfd ;) Craig On Tue, 2002-07-16 at 10:35, Andrey Lakhno wrote: > Hi! > > I use FreeBSD 4.6-R with zebra routing software (zebra-0.93a). > Both ripd and ospfd is running. With non-zero probability, when I kill ripd > or ospfd process, system panics with the following diagnostics: > > Fatal trap 12: page fault while in kernel mode > fault virtual address = 0x6 > fault code = supervisor read, page not present > instruction pointer = 0x8:0xc01856c7 > stack pointer = 0x10:0xca01bc90 > frame pointer = 0x10:0xca01bca4 > 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 = 629 (ripd) > interrupt mask = net > trap number = 12 > panic: page fault > > syncing disks... 40 2 1 1 1 1 1 1 1 > done > > I found that such panics occurs only on machines with vlan interfaces. > > > Kernel config follows: > ---8<--- > makeoptions DEBUG=-g > > machine i386 > cpu I686_CPU > ident XXX > > options INET > options FFS > options FFS_ROOT > options SOFTUPDATES > options PROCFS > options COMPAT_43 > options UCONSOLE > options KTRACE > options SYSVSHM > options SYSVMSG > options SYSVSEM > options P1003_1B > options _KPOSIX_PRIORITY_SCHEDULING > options ICMP_BANDLIM > options KBD_INSTALL_CDEV > > device isa > device pci > > device ata > device atadisk > options ATA_STATIC_ID > > device atkbdc0 at isa? port IO_KBD > device atkbd0 at atkbdc? irq 1 > > device vga0 at isa? > device sc0 at isa? flags 0x100 > device npx0 at nexus? port IO_NPX irq 13 > > device sio0 at isa? port IO_COM1 flags 0x10 irq 4 > device sio1 at isa? port IO_COM2 irq 3 > > device miibus > device fxp > device ed > device rl > > pseudo-device loop > pseudo-device ether > pseudo-device pty > pseudo-device bpf > pseudo-device vlan 2 > > options UFS_DIRHASH > options IPFIREWALL > options IPFIREWALL_VERBOSE > options IPFIREWALL_DEFAULT_TO_ACCEPT > options TCP_DROP_SYNFIN > options DUMMYNET > options HZ=1000 > options SC_HISTORY_SIZE=100 > ---8<--- > > ifconfig: > fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > inet x.x.x.x netmask 0xffffffe0 broadcast x.x.x.x > ether 00:03:47:xx:xx:xx > media: Ethernet autoselect (100baseTX <full-duplex>) > status: active > vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 > inet x.x.x.x netmask 0xffffffe0 broadcast x.x.x.x > ether 00:03:47:xx:xx:xx > vlan: 5 parent interface: fxp0 > vlan1: flags=0<> mtu 1500 > ether 00:00:00:00:00:00 > vlan: 0 parent interface: <none> > lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 > inet 127.0.0.1 netmask 0xff000000 > > > Here is output from gdb -k: > > (kgdb) where > #0 dumpsys () at ../../kern/kern_shutdown.c:487 > #1 0xc01445bf in boot (howto=256) at ../../kern/kern_shutdown.c:316 > #2 0xc01449e4 in poweroff_wait (junk=0xc0211d6c, howto=-1071572849) > at ../../kern/kern_shutdown.c:595 > #3 0xc01eb71e in trap_fatal (frame=0xca01bc50, eva=6) > at ../../i386/i386/trap.c:966 > #4 0xc01eb3f1 in trap_pfault (frame=0xca01bc50, usermode=0, eva=6) > at ../../i386/i386/trap.c:859 > #5 0xc01eafdb in trap (frame={tf_fs = -1071448048, tf_es = 6422544, > tf_ds = -1066074096, tf_edi = -1066046208, tf_esi = 1, > tf_ebp = -905855836, tf_isp = -905855876, tf_ebx = -1053640192, > tf_edx = 6, tf_ecx = -905855812, tf_eax = 2, tf_trapno = 12, tf_err = 0, > tf_eip = -1072146745, tf_cs = 8, tf_eflags = 66050, > tf_esp = -1053640192, tf_ss = -1052190624}) at ../../i386/i386/trap.c:458 > #6 0xc01856c7 in rt_msg1 (type=16, rtinfo=0xca01bcbc) > at ../../net/rtsock.c:613 > #7 0xc0185b35 in rt_newmaddrmsg (cmd=16, ifma=0xc148d860) > at ../../net/rtsock.c:848 > #8 0xc018020c in if_delmulti (ifp=0xc132ba00, sa=0xca01bd3c) > at ../../net/if.c:1507 > #9 0xc01818f5 in vlan_setmulti (ifp=0xc132b400) at ../../net/if_vlan.c:154 > #10 0xc0182416 in vlan_ioctl (ifp=0xc132b400, cmd=2149607730, data=0x0) > at ../../net/if_vlan.c:704 > #11 0xc01802e6 in if_delmulti (ifp=0xc132b400, sa=0xc0724040) > at ../../net/if.c:1548 > #12 0xc0188b6f in in_delmulti (inm=0xc14c4820) at ../../netinet/in.c:893 > #13 0xc019352c in ip_freemoptions (imo=0xc14fba00) > at ../../netinet/ip_output.c:1886 > #14 0xc01894ad in in_pcbdetach (inp=0xc93dbfc0) at ../../netinet/in_pcb.c:567 > #15 0xc019b418 in udp_detach (so=0xc931e940) at ../../netinet/udp_usrreq.c:871 > #16 0xc0162511 in soclose (so=0xc931e940) at ../../kern/uipc_socket.c:320 > #17 0xc0156a56 in soo_close (fp=0xc14ad600, p=0xc890d6c0) > at ../../kern/sys_socket.c:195 > #18 0xc013a2df in fdrop (fp=0xc14ad600, p=0xc890d6c0) at ../../sys/file.h:217 > #19 0xc013a227 in closef (fp=0xc14ad600, p=0xc890d6c0) > at ../../kern/kern_descrip.c:1277 > #20 0xc0139629 in close (p=0xc890d6c0, uap=0xca01bf80) > at ../../kern/kern_descrip.c:581 > #21 0xc01eb9cd in syscall2 (frame={tf_fs = 47, tf_es = 47, tf_ds = 47, > tf_edi = -1077937712, tf_esi = 0, tf_ebp = -1077938364, > tf_isp = -905855020, tf_ebx = 134973184, tf_edx = 134754364, > tf_ecx = 134956992, tf_eax = 6, tf_trapno = 12, tf_err = 2, > tf_eip = 672846696, tf_cs = 31, tf_eflags = 659, tf_esp = -1077938408, > tf_ss = 47}) at ../../i386/i386/trap.c:1167 > #22 0xc01dfe15 in Xint0x80_syscall () > #23 0x8049ab8 in ?? () > #24 0xbfbfffac in ?? () > #25 0x8049d47 in ?? () > #26 0x8049909 in ?? () > > (kgdb) up 5 > #5 0xc01eafdb in trap (frame={tf_fs = -1071448048, tf_es = 6422544, > tf_ds = -1066074096, tf_edi = -1066046208, tf_esi = 1, > tf_ebp = -905855836, tf_isp = -905855876, tf_ebx = -1053640192, > tf_edx = 6, tf_ecx = -905855812, tf_eax = 2, tf_trapno = 12, tf_err = 0, > tf_eip = -1072146745, tf_cs = 8, tf_eflags = 66050, > tf_esp = -1053640192, tf_ss = -1052190624}) at ../../i386/i386/trap.c:458 > 458 (void) trap_pfault(&frame, FALSE, eva); > > (kgdb) frame frame->tf_ebp frame->tf_eip > #0 rt_msg1 (type=16, rtinfo=0xca01bcbc) at ../../net/rtsock.c:614 > 614 dlen = ROUNDUP(sa->sa_len); > > (kgdb) list > 609 bzero((caddr_t)rtm, len); > 610 for (i = 0; i < RTAX_MAX; i++) { > 611 if ((sa = rtinfo->rti_info[i]) == NULL) > 612 continue; > 613 rtinfo->rti_addrs |= (1 << i); > 614 dlen = ROUNDUP(sa->sa_len); > 615 m_copyback(m, len, dlen, (caddr_t)sa); > 616 len += dlen; > 617 } > 618 if (m->m_pkthdr.len != len) { > > (kgdb) print sa > $1 = (struct sockaddr *) 0x0 > > (kgdb) up > #1 0xc0185b35 in rt_newmaddrmsg (cmd=16, ifma=0xc148d860) > at ../../net/rtsock.c:848 > 848 if ((m = rt_msg1(cmd, &info)) == NULL) > (kgdb) list > 843 /* > 844 * If a link-layer address is present, present it as a ``gateway'' > 845 * (similarly to how ARP entries, e.g., are presented). > 846 */ > 847 gate = ifma->ifma_lladdr; > 848 if ((m = rt_msg1(cmd, &info)) == NULL) > 849 return; > 850 ifmam = mtod(m, struct ifma_msghdr *); > 851 ifmam->ifmam_index = ifp->if_index; > 852 ifmam->ifmam_addrs = info.rti_addrs; > (kgdb) up > #2 0xc018020c in if_delmulti (ifp=0xc132ba00, sa=0xca01bd3c) > at ../../net/if.c:1507 > 1507 rt_newmaddrmsg(RTM_DELMADDR, ifma); > (kgdb) list > 1502 if (ifma->ifma_refcount > 1) { > 1503 ifma->ifma_refcount--; > 1504 return 0; > 1505 } > 1506 > 1507 rt_newmaddrmsg(RTM_DELMADDR, ifma); > 1508 sa = ifma->ifma_lladdr; > 1509 s = splimp(); > 1510 LIST_REMOVE(ifma, ifma_link); > 1511 /* > (kgdb) up > #3 0xc01818f5 in vlan_setmulti (ifp=0xc132b400) at ../../net/if_vlan.c:154 > 154 error = if_delmulti(ifp_p, (struct sockaddr *)&sdl); > (kgdb) list > 149 > 150 /* First, remove any existing filter entries. */ > 151 while(SLIST_FIRST(&sc->vlan_mc_listhead) != NULL) { > 152 mc = SLIST_FIRST(&sc->vlan_mc_listhead); > 153 bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN); > 154 error = if_delmulti(ifp_p, (struct sockaddr *)&sdl); > 155 if (error) > 156 return(error); > 157 SLIST_REMOVE_HEAD(&sc->vlan_mc_listhead, mc_entries); > 158 free(mc, M_VLAN); > (kgdb) up > #4 0xc0182416 in vlan_ioctl (ifp=0xc132b400, cmd=2149607730, data=0x0) > at ../../net/if_vlan.c:704 > 704 error = vlan_setmulti(ifp); > (kgdb) list > 699 error = EINVAL; > 700 } > 701 break; > 702 case SIOCADDMULTI: > 703 case SIOCDELMULTI: > 704 error = vlan_setmulti(ifp); > 705 break; > 706 default: > 707 error = EINVAL; > 708 } > (kgdb) up > #5 0xc01802e6 in if_delmulti (ifp=0xc132b400, sa=0xc0724040) > at ../../net/if.c:1548 > 1548 ifp->if_ioctl(ifp, SIOCDELMULTI, 0); > (kgdb) list > 1543 return 0; > 1544 } > 1545 > 1546 s = splimp(); > 1547 LIST_REMOVE(ifma, ifma_link); > 1548 ifp->if_ioctl(ifp, SIOCDELMULTI, 0); > 1549 splx(s); > 1550 free(ifma->ifma_addr, M_IFMADDR); > 1551 free(sa, M_IFMADDR); > 1552 free(ifma, M_IFMADDR); > (kgdb) up > #6 0xc0188b6f in in_delmulti (inm=0xc14c4820) at ../../netinet/in.c:893 > 893 if_delmulti(ifma->ifma_ifp, ifma->ifma_addr); > (kgdb) list > 888 ifma->ifma_protospec = 0; > 889 LIST_REMOVE(inm, inm_link); > 890 free(inm, M_IPMADDR); > 891 } > 892 /* XXX - should be separate API for when we have an ifma? */ > 893 if_delmulti(ifma->ifma_ifp, ifma->ifma_addr); > 894 if (my_inm.inm_ifp != NULL) > 895 igmp_leavegroup(&my_inm); > 896 splx(s); > 897 } > (kgdb) up > #7 0xc019352c in ip_freemoptions (imo=0xc14fba00) > at ../../netinet/ip_output.c:1886 > 1886 in_delmulti(imo->imo_membership[i]); > (kgdb) list > 1881 { > 1882 register int i; > 1883 > 1884 if (imo != NULL) { > 1885 for (i = 0; i < imo->imo_num_memberships; ++i) > 1886 in_delmulti(imo->imo_membership[i]); > 1887 free(imo, M_IPMOPTS); > 1888 } > 1889 } > 1890 > (kgdb) up > #8 0xc01894ad in in_pcbdetach (inp=0xc93dbfc0) at ../../netinet/in_pcb.c:567 > 567 ip_freemoptions(inp->inp_moptions); > (kgdb) list > 562 sofree(so); > 563 if (inp->inp_options) > 564 (void)m_free(inp->inp_options); > 565 if (inp->inp_route.ro_rt) > 566 rtfree(inp->inp_route.ro_rt); > 567 ip_freemoptions(inp->inp_moptions); > 568 inp->inp_vflag = 0; > 569 zfreei(ipi->ipi_zone, inp); > 570 } > 571 > > -- > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-stable" in the body of the message To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1026842984.1084.9.camel>