Re: gif(4) vs splnet()

2017-05-16 Thread Alexander Bluhm
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 -   1.94
> +++ net/if_gif.c  15 May 2017 13:10:13 -
> @@ -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;



gif(4) vs splnet()

2017-05-15 Thread Martin Pieuchot
Similar to gre(4), the global list of interfaces needs to be protected
by the NET_LOCK().

ok?

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.c4 May 2017 15:00:24 -   1.94
+++ net/if_gif.c15 May 2017 13:10:13 -
@@ -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;