On Mon, May 15, 2017 at 03:11:20PM +0200, Martin Pieuchot wrote:
> Similar to gre(4), the global list of interfaces needs to be protected
> by the NET_LOCK().
> 
> ok?

OK bluhm@

> 
> Index: net/if_gif.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_gif.c,v
> retrieving revision 1.94
> diff -u -p -r1.94 if_gif.c
> --- net/if_gif.c      4 May 2017 15:00:24 -0000       1.94
> +++ net/if_gif.c      15 May 2017 13:10:13 -0000
> @@ -129,9 +129,9 @@ gif_clone_create(struct if_clone *ifc, i
>  #if NBPFILTER > 0
>       bpfattach(&sc->gif_if.if_bpf, &sc->gif_if, DLT_LOOP, sizeof(u_int32_t));
>  #endif
> -     s = splnet();
> +     NET_LOCK(s);
>       LIST_INSERT_HEAD(&gif_softc_list, sc, gif_list);
> -     splx(s);
> +     NET_UNLOCK(s);
>  
>       return (0);
>  }
> @@ -142,9 +142,9 @@ gif_clone_destroy(struct ifnet *ifp)
>       struct gif_softc *sc = ifp->if_softc;
>       int s;
>  
> -     s = splnet();
> +     NET_LOCK(s);
>       LIST_REMOVE(sc, gif_list);
> -     splx(s);
> +     NET_UNLOCK(s);
>  
>       if_detach(ifp);
>  
> @@ -323,7 +323,6 @@ gif_ioctl(struct ifnet *ifp, u_long cmd,
>       int error = 0, size;
>       struct sockaddr *dst, *src;
>       struct sockaddr *sa;
> -     int s;
>       struct gif_softc *sc2;
>  
>       switch (cmd) {
> @@ -466,10 +465,8 @@ gif_ioctl(struct ifnet *ifp, u_long cmd,
>               bcopy((caddr_t)dst, (caddr_t)sa, dst->sa_len);
>               sc->gif_pdst = sa;
>  
> -             s = splnet();
>               ifp->if_flags |= IFF_RUNNING;
>               if_up(ifp);             /* send up RTM_IFINFO */
> -             splx(s);
>  
>               error = 0;
>               break;

Reply via email to