Date: Tue, 29 Mar 2011 11:34:55 +0200 (CEST) From: Przemyslaw Frasunek <venglin@freebsd.lublin.pl> To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/156030: Crash in nd6_dad_start() due to null ptr dereference Message-ID: <20110329093455.BD4B5239460@lagoon.freebsd.lublin.pl> Resent-Message-ID: <201103290940.p2T9e9uL088520@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 156030
>Category: kern
>Synopsis: Crash in nd6_dad_start() due to null ptr dereference
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue Mar 29 09:40:08 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Przemyslaw Frasunek
>Release: FreeBSD 7.4-RELEASE i386
>Organization:
Nette sp. z o.o.
>Environment:
FreeBSD 7.4-RELEASE, GENERIC kernel, mpd5 with 200+ PPPoE interfaces,
IPv6 enabled
>Description:
Spurious crashes in nd6_dad_start()
(kgdb) bt
#0 doadump () at pcpu.h:197
#1 0xc085aa03 in boot (howto=260) at ../../../kern/kern_shutdown.c:421
#2 0xc085acd7 in panic (fmt=Variable "fmt" is not available.
) at ../../../kern/kern_shutdown.c:576
#3 0xc0b87cfc in trap_fatal (frame=0xe874386c, eva=392)
at ../../../i386/i386/trap.c:950
#4 0xc0b87f80 in trap_pfault (frame=0xe874386c, usermode=0, eva=392)
at ../../../i386/i386/trap.c:863
#5 0xc0b8895c in trap (frame=0xe874386c) at
../../../i386/i386/trap.c:541
#6 0xc0b6b27b in calltrap () at ../../../i386/i386/exception.s:166
#7 0xc084a374 in _mtx_lock_sleep (m=0xc743c67c, tid=3415908928, opts=0,
file=0x0, line=0) at ../../../kern/kern_mutex.c:339
#8 0xc09edc36 in nd6_dad_start (ifa=0xc743c600, delay=171)
at ../../../netinet6/nd6_nbr.c:1180
#9 0xc09d8810 in in6_update_ifa (ifp=0xc5c29800, ifra=0xe8743a4c,
ia=0xc743c600, flags=Variable "flags" is not available.
) at ../../../netinet6/in6.c:1306
#10 0xc09db9fd in in6_ifattach (ifp=0xc5c29800, altifp=0x0)
at ../../../netinet6/in6_ifattach.c:466
#11 0xc09d68d7 in in6_if_up (ifp=0xc5c29800) at
../../../netinet6/in6.c:2151
#12 0xc08fb1a5 in ifioctl (so=0xcad05d00, cmd=2151704858,
data=0xc6c63bc0 "ng9", td=0xcb9aa240) at ../../../net/if.c:2097
#13 0xc089ca02 in soo_ioctl (fp=0xc6625390, cmd=2151704858,
data=0xc6c63bc0,
active_cred=0xc70fa200, td=0xcb9aa240) at
../../../kern/sys_socket.c:204
#14 0xc08956e5 in kern_ioctl (td=0xcb9aa240, fd=33, com=2151704858,
data=0xc6c63bc0 "ng9") at file.h:269
#15 0xc0895844 in ioctl (td=0xcb9aa240, uap=0xe8743cfc)
at ../../../kern/sys_generic.c:571
#16 0xc0b882d5 in syscall (frame=0xe8743d38) at
../../../i386/i386/trap.c:1101
#17 0xc0b6b2e0 in Xint0x80_syscall () at
../../../i386/i386/exception.s:262
#18 0x00000033 in ?? ()
(kgdb) frame 7
#7 0xc084a374 in _mtx_lock_sleep (m=0xc743c67c, tid=3415908928, opts=0,
file=0x0, line=0) at ../../../kern/kern_mutex.c:339
339 owner = (struct thread *)(v & ~MTX_FLAGMASK);
(kgdb) print v
$1 = 6
(kgdb) x/i $eip
0xc084a374 <_mtx_lock_sleep+68>: mov 0x188(%ecx),%eax
(kgdb) info reg ecx
ecx 0x0 0
(kgdb) list
334 * If the owner is running on another CPU, spin until the
335 * owner stops running or the state of the lock changes.
336 */
337 v = m->mtx_lock;
338 if (v != MTX_UNOWNED) {
339 owner = (struct thread *)(v & ~MTX_FLAGMASK);
340 #ifdef ADAPTIVE_GIANT
341 if (TD_IS_RUNNING(owner)) {
342 #else
343 if (m != &Giant && TD_IS_RUNNING(owner)) {
(kgdb) print *m
$2 = {lock_object = {lo_name = 0xc0c3efef "ifaddr",
lo_type = 0xc0c3efef "ifaddr", lo_flags = 16908288, lo_witness_data = {
lod_list = {stqe_next = 0x0}, lod_witness = 0x0}}, mtx_lock = 6, mtx_recurse = 0}
(kgdb) frame 8
#8 0xc09edc36 in nd6_dad_start (ifa=0xc743c600, delay=171)
at ../../../netinet6/nd6_nbr.c:1180
1180 IFAREF(ifa); /* just for safety */
(kgdb) list
1175 * Note that we must delay the first transmission, if this is the
1176 * first packet to be sent from the interface after interface
1177 * (re)initialization.
1178 */
1179 dp->dad_ifa = ifa;
1180 IFAREF(ifa); /* just for safety */
1181 dp->dad_count = ip6_dad_count;
1182 dp->dad_ns_icount = dp->dad_na_icount = 0;
1183 dp->dad_ns_ocount = dp->dad_ns_tcount = 0;
1184 if (delay == 0) {
(kgdb) print *ifa
$3 = {ifa_addr = 0xc743c694, ifa_dstaddr = 0xc743c6cc,
ifa_netmask = 0xc743c6e8, if_data = {ifi_type = 0 '\0',
ifi_physical = 0 '\0', ifi_addrlen = 0 '\0', ifi_hdrlen = 0 '\0',
ifi_link_state = 0 '\0', ifi_spare_char1 = 0 '\0',
ifi_spare_char2 = 0 '\0', ifi_datalen = 0 '\0', ifi_mtu = 0,
ifi_metric = 0, ifi_baudrate = 0, ifi_ipackets = 0, ifi_ierrors = 0,
ifi_opackets = 0, ifi_oerrors = 0, ifi_collisions = 0, ifi_ibytes = 0,
ifi_obytes = 0, ifi_imcasts = 0, ifi_omcasts = 0, ifi_iqdrops = 0,
ifi_noproto = 0, ifi_hwassist = 0, ifi_epoch = 0, ifi_lastchange = { tv_sec = 0, tv_usec = 0}}, ifa_ifp = 0xc5c29800, ifa_link = {
tqe_next = 0x0, tqe_prev = 0xc594f960},
ifa_rtrequest = 0xc09eabc0 <nd6_rtrequest>, ifa_flags = 256, ifa_refcnt = 0,
ifa_metric = 0, ifa_claim_addr = 0, ifa_mtx = {lock_object = {
lo_name = 0xc0c3efef "ifaddr", lo_type = 0xc0c3efef "ifaddr",
lo_flags = 16908288, lo_witness_data = {lod_list = {stqe_next =
0x0},
lod_witness = 0x0}}, mtx_lock = 6, mtx_recurse = 0}}
>How-To-Repeat:
Happens after 20-30 days of uptime.
>Fix:
Unknown.
>Release-Note:
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110329093455.BD4B5239460>
