Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Oct 2001 08:05:33 -0700 (PDT)
From:      Skip Hansen <shansen@earthlink.net>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/31085: kernel panic on tftp only pxeboot
Message-ID:  <200110061505.f96F5XK54035@freefall.freebsd.org>

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

>Number:         31085
>Category:       kern
>Synopsis:       kernel panic on tftp only pxeboot
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Oct 06 08:10:02 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Skip Hansen
>Release:        4.4 release
>Organization:
Consultant
>Environment:
(PicoBSD build from 4.4 release, sorry no uname in crunch)
FreeBSD 4.4-RELEASE #0: Sun Sep 23 10:12:32 PDT 2001
    pink@floyd:/usr/src/sys/compile/PICOBSD-thewall.net4501.pxe.0.2

>Description:
When I boot my kernel with the tftp only version of pxeboot I get the 
following crash:

--- snip ---
Copyright (c) 1992-2001 The FreeBSD Project. syms=[0x4+0x490+0x4+0x203]
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 4.4-RELEASE #0: Fri Sep 21 14:30:53 PDT 2001
    pink@floyd:/usr/src/sys/compile/PICOBSD-thewall.net4501.pxe.0.2
Timecounter "i8254"  frequency 1193182 Hz
CPU: AMD Enhanced Am486DX4 Write-Back (486-class CPU)
  Origin = "AuthenticAMD"  Id = 0x494  Stepping = 4
  Features=0x1<FPU>
real memory  = 67108864 (65536K bytes)
avail memory = 59330560 (57940K bytes)
pnpbios: Bad PnP BIOS data checksum
Preloaded elf kernel "kernel.gz" at 0xc05de000.
md1: Malloc disk
npx0: <math processor> on motherboard
npx0: INT 16 interface
pcib0: <Host to PCI bridge> on motherboard
pci0: <PCI bus> on pcib0
sis0: <NatSemi DP83815 10/100BaseTX> port 0xe000-0xe0ff mem 
0xa0000000-0xa0000ff
f irq 10 at device 18.0 on pci0
sis0: Ethernet address: 00:00:24:c0:00:4c
miibus0: <MII bus> on sis0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis1: <NatSemi DP83815 10/100BaseTX> port 0xe100-0xe1ff mem 
0xa0001000-0xa0001ff
f irq 11 at device 19.0 on pci0
sis1: Ethernet address: 00:00:24:c0:00:4d
miibus1: <MII bus> on sis1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis2: <NatSemi DP83815 10/100BaseTX> port 0xe200-0xe2ff mem 
0xa0002000-0xa0002ff
f irq 5 at device 20.0 on pci0
sis2: Ethernet address: 00:00:24:c0:00:4e
miibus2: <MII bus> on sis2
ukphy2: <Generic IEEE 802.3u media interface> on miibus2
ukphy2:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
isa0: <ISA bus> on motherboard
orm0: <Option ROMs> at iomem 0xc8000-0xd1fff,0xe0000-0xe9fff on isa0
ata0 at port 0x1f0-0x1f7,0x3f6 irq 14 on isa0
atkbdc0: <Keyboard controller (i8042)> at port 0x60,0x64 on isa0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
sio0 at port 0x3f8-0x3ff irq 4 flags 0x30 on isa0
sio0: type 16550A, console
IP packet filtering initialized, divert enabled, rule-based forwarding 
disabled,
default to accept, logging limited to 100 packets/entry by default
no B_DEVMAGIC (bootdev=0)
Mounting root from ufs:/dev/md0c
Warning: Block size restricts cylinders per group to 12.


Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x9c
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xc0174928
stack pointer           = 0x10:0xc01ef1ec
frame pointer           = 0x10:0xc01ef204
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         = Idle
interrupt mask          =
trap number             = 12
panic: page fault

syncing disks...

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x30
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xc018d5d2
stack pointer           = 0x10:0xc01eef54
frame pointer           = 0x10:0xc01eef68
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         = Idle
interrupt mask          = bio
trap number             = 12
panic: page fault
Uptime: 5s
Automatic reboot in 15 seconds - press a key on the console to abort
Rebooting...
--- snip ---

This is 100% reproducible.  The first panic fault appears to be in 
icmp_reflect, here's a snippet of the object and source:

--- snip ---
0xc017490c <icmp_reflect+180>:  pushl  0x14(%ecx)
0xc017490f <icmp_reflect+183>:  push   $0xc046b4b8
0xc0174914 <icmp_reflect+188>:  call   0xc0167390 <ifaof_ifpforaddr>
0xc0174919 <icmp_reflect+193>:  mov    %eax,%edx
0xc017491b <icmp_reflect+195>:  add    $0x8,%esp
0xc017491e <icmp_reflect+198>:  test   %edx,%edx
0xc0174920 <icmp_reflect+200>:  jne    0xc0174928 <icmp_reflect+208>
0xc0174922 <icmp_reflect+202>:  mov    0xc048c214,%edx
0xc0174928 <icmp_reflect+208>:  mov    0x9c(%edx),%ecx
0xc017492e <icmp_reflect+214>:  mov    0xfffffffc(%ebp),%eax

	icmpdst.sin_addr = t;
	if ((ia == (struct in_ifaddr *)0) && m->m_pkthdr.rcvif)
		ia = (struct in_ifaddr *)ifaof_ifpforaddr(
			(struct sockaddr *)&icmpdst, m->m_pkthdr.rcvif);
	/*
	 * The following happens if the packet was not addressed to us,
	 * and was received on an interface with no IP address.
	 */
	if (ia == (struct in_ifaddr *)0)
		ia = in_ifaddrhead.tqh_first;
--- snip ---

While watching the download with Ethereal I noticed that the last block of the kernel download is not ack'ed by pxeboot. Looking at /usr/src/lib/libstand/tftp.c it looks like that's expected as the source includes the comment "let it time out ..." in tftp_close. I'm assuming the icmp response is being sent because of the TFTP retries that are sent while the kernel is starting up.

So if I've followed all of this correctly (doubtful!) I think 
in_ifaddrhead.tqh_first hasn't been initialized at the point of the panic.  Perhaps this is just be a race condition caused timing of the tftp download. 

The good news is that this is 100% reproducible here.

The second panic is in mfs_strategy.  I haven't looked into that one in any detail.

>How-To-Repeat:
Set LOADER_TFTP_SUPPORT=YES in /etc/defaults.make.conf, rebuild pxeboot. TFTP server is also a FreeBSD 4.4 release system. Note: the same kernel binary works fine when booted via tftp/nfs.  The PicoBSD configuration & binaries (for a Soekris Engineering Net4501 card) are available @ http://prdownloads.sourceforge.net/thewall/thewall.net4501.pxe.0.2.tgz .
I believe (but have not confirmed) that this is a generic problem, not specific to my PicoBSD build.

>Fix:

>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?200110061505.f96F5XK54035>