diff options
author | emaste <emaste@FreeBSD.org> | 2012-07-10 13:17:32 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2012-07-10 13:17:32 +0000 |
commit | 83fbc9d8445922f3b1fbbff6a99cd21e8bb1b9fd (patch) | |
tree | 9ab08b81d0faaf89d9ac564ff466d525afe5bffa /sys/net/if_bridge.c | |
parent | 9ca1308bfb634fec0f594911944b51b4b01a5331 (diff) | |
download | FreeBSD-src-83fbc9d8445922f3b1fbbff6a99cd21e8bb1b9fd.zip FreeBSD-src-83fbc9d8445922f3b1fbbff6a99cd21e8bb1b9fd.tar.gz |
Plug potential mbuf leak when bridging fragments
If an error occurs when transmitting one mbuf in a chain of fragments,
free the subsequent fragments instead of leaking them.
Sponsored by: ADARA Networks
Diffstat (limited to 'sys/net/if_bridge.c')
-rw-r--r-- | sys/net/if_bridge.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c index fd60bf2..7a57e9c 100644 --- a/sys/net/if_bridge.c +++ b/sys/net/if_bridge.c @@ -1813,6 +1813,8 @@ bridge_enqueue(struct bridge_softc *sc, struct ifnet *dst_ifp, struct mbuf *m) if (err == 0) err = dst_ifp->if_transmit(dst_ifp, m); + else + m_freem(m); } if (err == 0) { |