Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Jul 2011 20:02:09 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r223846 - head/sys/net
Message-ID:  <201107072002.p67K29A2076846@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: thompsa
Date: Thu Jul  7 20:02:09 2011
New Revision: 223846
URL: http://svn.freebsd.org/changeset/base/223846

Log:
  Grab the rlock before checking if our interface is enabled, it could be
  possible to hit a dead pointer when changing interfaces.
  
  PR:		kern/156978
  Submitted by:	Andrew Boyer
  MFC after:	1 week

Modified:
  head/sys/net/if_lagg.c

Modified: head/sys/net/if_lagg.c
==============================================================================
--- head/sys/net/if_lagg.c	Thu Jul  7 18:07:03 2011	(r223845)
+++ head/sys/net/if_lagg.c	Thu Jul  7 20:02:09 2011	(r223846)
@@ -1221,14 +1221,15 @@ lagg_input(struct ifnet *ifp, struct mbu
 	struct lagg_softc *sc = lp->lp_softc;
 	struct ifnet *scifp = sc->sc_ifp;
 
+	LAGG_RLOCK(sc);
 	if ((scifp->if_drv_flags & IFF_DRV_RUNNING) == 0 ||
 	    (lp->lp_flags & LAGG_PORT_DISABLED) ||
 	    sc->sc_proto == LAGG_PROTO_NONE) {
+		LAGG_RUNLOCK(sc);
 		m_freem(m);
 		return (NULL);
 	}
 
-	LAGG_RLOCK(sc);
 	ETHER_BPF_MTAP(scifp, m);
 
 	m = (*sc->sc_input)(sc, lp, m);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201107072002.p67K29A2076846>