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

Reply via email to