On 19.03.2015 19:31, Alexandre Martins wrote:
> Hi !
> 
> I found a leak of mbuf in the lagg driver :
> 
> https://svnweb.freebsd.org/base/head/sys/net/if_lagg.c?view=annotate#l1672
> 
> -=-=-=-=-=-=-=-=-=-=-
> m = (lp->lp_detaching == 0) ? lagg_proto_input(sc, lp, m) : NULL;
> -=-=-=-=-=-=-=-=-=-=-
> 
> If lp_detaching is non 0, the mbuf pointer is set to NULL without m_freem it.
> 
> Can you look at this ?

Hi,

what you thing about this patch?
lp_detaching can be non zero in case of parent interface departure.
So I don't see the reason to call ETHER_BPF_MTAP() in this case.

-- 
WBR, Andrey V. Elsukov
Index: if_lagg.c
===================================================================
--- if_lagg.c	(revision 280234)
+++ if_lagg.c	(working copy)
@@ -1661,7 +1661,8 @@ lagg_input(struct ifnet *ifp, struct mbuf *m)
 	LAGG_RLOCK(sc, &tracker);
 	if ((scifp->if_drv_flags & IFF_DRV_RUNNING) == 0 ||
 	    (lp->lp_flags & LAGG_PORT_DISABLED) ||
-	    sc->sc_proto == LAGG_PROTO_NONE) {
+	    sc->sc_proto == LAGG_PROTO_NONE ||
+	    lp->lp_detaching != 0) {
 		LAGG_RUNLOCK(sc, &tracker);
 		m_freem(m);
 		return (NULL);
@@ -1668,9 +1669,7 @@ lagg_input(struct ifnet *ifp, struct mbuf *m)
 	}
 
 	ETHER_BPF_MTAP(scifp, m);
-
-	m = (lp->lp_detaching == 0) ? lagg_proto_input(sc, lp, m) : NULL;
-
+	m = lagg_proto_input(sc, lp, m);
 	if (m != NULL) {
 		if (scifp->if_flags & IFF_MONITOR) {
 			m_freem(m);

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to