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