On Mon, May 15, 2017 at 03:06:08PM +0200, Martin Pieuchot wrote:
> They all need to be audited and possibly changed to a solution that work
> with the NET_LOCK(). Just saying,  enc(4) is a nightmare.
> 
> Here's a diff fro gre(4).  The 'softnet' iterates over ``gre_softc_list'' 
> so we need to make sure it isn't modified when this happen.  We need the
> NET_LOCK() were splnet() was used.
> 
> ok?

OK bluhm@

> 
> Index: net/if_gre.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_gre.c,v
> retrieving revision 1.84
> diff -u -p -r1.84 if_gre.c
> --- net/if_gre.c      24 Jan 2017 10:08:30 -0000      1.84
> +++ net/if_gre.c      15 May 2017 12:45:25 -0000
> @@ -165,9 +165,9 @@ gre_clone_create(struct if_clone *ifc, i
>  #if NBPFILTER > 0
>       bpfattach(&sc->sc_if.if_bpf, &sc->sc_if, DLT_LOOP, sizeof(u_int32_t));
>  #endif
> -     s = splnet();
> +     NET_LOCK(s);
>       LIST_INSERT_HEAD(&gre_softc_list, sc, sc_list);
> -     splx(s);
> +     NET_UNLOCK(s);
>  
>       return (0);
>  }
> @@ -178,11 +178,11 @@ gre_clone_destroy(struct ifnet *ifp)
>       struct gre_softc *sc = ifp->if_softc;
>       int s;
>  
> -     s = splnet();
>       timeout_del(&sc->sc_ka_snd);
>       timeout_del(&sc->sc_ka_hold);
> +     NET_LOCK(s);
>       LIST_REMOVE(sc, sc_list);
> -     splx(s);
> +     NET_UNLOCK(s);
>  
>       if_detach(ifp);
>  

Reply via email to