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>
