NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/49682: reproducable panic when detaching bge (IPv6 related)



>Number:         49682
>Category:       kern
>Synopsis:       reproducable panic when detaching bge (IPv6 related)
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 20 14:00:00 +0000 2015
>Originator:     Martin Husemann
>Release:        NetBSD 7.99.5
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD night-owl.duskware.de 7.99.5 NetBSD 7.99.5 (NIGHT-OWL) #299: Fri Feb 20 09:55:15 CET 2015 martin%night-owl.duskware.de@localhost:/usr/src/sys/arch/amd64/compile/NIGHT-OWL amd64
Architecture: x86_64
Machine: amd64
>Description:

When shutting down this notebook I get (since a few weeks?) a reproducable
panic when bge0 tries to detach:

defrtlist_del+0x19
nd6_purge+0x14c
in6_ifdetach+0x21
udp6_purgeif_wrapper+0x35
if_detach+0x168
bge_detach

and this is:

(gdb) list *(nd6_purge+0x14c)
0xffffffff80539a8a is in nd6_purge (../../../../netinet6/nd6.c:774).
769             TAILQ_FOREACH_SAFE(dr, &nd_defrouter, dr_entry, ndr) {
770                     if (!dr->installed)
771                             continue;
772     
773                     if (dr->ifp == ifp)
774                             defrtrlist_del(dr);
775             }
776     
777             /* Nuke prefix list entries toward ifp */
778             LIST_FOREACH_SAFE(pr, &nd_prefix, ndpr_entry, npr) {

and there:

0xffffffff8053fc54 is in defrtrlist_del (../../../../netinet6/nd6_rtr.c:488).
483     }
484     
485     void
486     defrtrlist_del(struct nd_defrouter *dr)
487     {
488             struct nd_ifinfo *ndi = ND_IFINFO(dr->ifp);
489             struct nd_defrouter *deldr = NULL;
490             struct nd_prefix *pr;
491             struct in6_ifextra *ext = dr->ifp->if_afdata[AF_INET6];

to be exact:

(gdb) x/16i defrtrlist_del     
   0xffffffff8053fc3b <defrtrlist_del>: push   %rbp
   0xffffffff8053fc3c <defrtrlist_del+1>:       mov    %rsp,%rbp
   0xffffffff8053fc3f <defrtrlist_del+4>:       push   %r14
   0xffffffff8053fc41 <defrtrlist_del+6>:       push   %r13
   0xffffffff8053fc43 <defrtrlist_del+8>:       push   %r12
   0xffffffff8053fc45 <defrtrlist_del+10>:      push   %rbx
   0xffffffff8053fc46 <defrtrlist_del+11>:      mov    %rdi,%rbx
   0xffffffff8053fc49 <defrtrlist_del+14>:      mov    0x30(%rdi),%rax
   0xffffffff8053fc4d <defrtrlist_del+18>:      mov    0x2b0(%rax),%r13
   0xffffffff8053fc54 <defrtrlist_del+25>:      mov    0x10(%r13),%rdi

%r13 must be bogus.

#define ND_IFINFO(ifp) \
        (((struct in6_ifextra *)(ifp)->if_afdata[AF_INET6])->nd_ifinfo)

so the ->nd_ifinfo fails - how can this happen?

>How-To-Repeat:
Just run a machine with bge0 and configure IPv6 via dhcpcd - not sure why
my sparc64 machines with bge do not show the issue (but those use a static
IPv6 configuration).

>Fix:
n/a



Home | Main Index | Thread Index | Old Index