On Wed, Sep 03, 2014 at 03:53:34PM +0200, Martin Pieuchot wrote: > @@ -1078,7 +1079,7 @@ in6_purgeaddr(struct ifaddr *ifa) > void > in6_unlink_ifa(struct in6_ifaddr *ia6, struct ifnet *ifp) > { > - int s = splnet(); > + splsoftassert(IPL_SOFTNET); > > ifa_del(ifp, &ia6->ia_ifa); >
I think there are code paths that can trigger this assertion netinet6/in6.c: in6_unlink_ifa() netinet6/in6.c: in6_purgeaddr() netinet6/nd6_rtr.c: purge_detached() netinet6/nd6_rtr.c: nd6_prelist_add() netinet6/in6.c: in6_control() netinet/tcp_usrreq.c: tcp_usrreq() kern/sys_socket.c: soo_ioctl() netinet6/in6.c: in6_unlink_ifa() netinet6/in6.c: in6_purgeaddr() netinet6/nd6_rtr.c: purge_detached() netinet6/nd6_rtr.c: nd6_prelist_add() netinet6/in6_ifattach.c: in6_ifattach_linklocal() netinet/ip_carp.c carp_set_enaddr() netinet/ip_carp.c carp_ioctl() ... nd6_prelist_add() does some splsoftnet() already. I think you should put one around purge_detached() there. bluhm