diff options
author | 2009-06-02 16:28:21 +0000 | |
---|---|---|
committer | 2009-06-02 16:28:21 +0000 | |
commit | c38efa92aff994bc5da9b18c12007da8f858f16c (patch) | |
tree | fcb9a58c9816ed1089e56d34945de10da1966d58 /sys/dev/pci | |
parent | make sure the channel's subband is found in iwn4965_set_txpower(). (diff) | |
download | wireguard-openbsd-c38efa92aff994bc5da9b18c12007da8f858f16c.tar.xz wireguard-openbsd-c38efa92aff994bc5da9b18c12007da8f858f16c.zip |
do not leak mbufs in the Rx path in case hardware decryption failed.
this leak was introduced when i switched to MCLGETI.
reported by mpf@ and others.
Diffstat (limited to 'sys/dev/pci')
-rw-r--r-- | sys/dev/pci/if_iwn.c | 5 | ||||
-rw-r--r-- | sys/dev/pci/if_wpi.c | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/pci/if_iwn.c b/sys/dev/pci/if_iwn.c index 183a41501b0..108c01cb08f 100644 --- a/sys/dev/pci/if_iwn.c +++ b/sys/dev/pci/if_iwn.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_iwn.c,v 1.58 2009/06/02 16:24:40 damien Exp $ */ +/* $OpenBSD: if_iwn.c,v 1.59 2009/06/02 16:28:21 damien Exp $ */ /*- * Copyright (c) 2007-2009 Damien Bergamini <damien.bergamini@free.fr> @@ -1767,6 +1767,7 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, if ((flags & IWN_RX_CIPHER_MASK) != IWN_RX_CIPHER_CCMP) { ic->ic_stats.is_ccmp_dec_errs++; ifp->if_ierrors++; + m_freem(m); return; } /* Check whether decryption was successful or not. */ @@ -1778,10 +1779,12 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, DPRINTF(("CCMP decryption failed 0x%x\n", flags)); ic->ic_stats.is_ccmp_dec_errs++; ifp->if_ierrors++; + m_freem(m); return; } if (iwn_ccmp_decap(sc, m, &ni->ni_pairwise_key) != 0) { ifp->if_ierrors++; + m_freem(m); return; } rxi.rxi_flags |= IEEE80211_RXI_HWDEC; diff --git a/sys/dev/pci/if_wpi.c b/sys/dev/pci/if_wpi.c index d902ece384b..e8772f1e778 100644 --- a/sys/dev/pci/if_wpi.c +++ b/sys/dev/pci/if_wpi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_wpi.c,v 1.87 2009/05/29 08:25:45 damien Exp $ */ +/* $OpenBSD: if_wpi.c,v 1.88 2009/06/02 16:28:21 damien Exp $ */ /*- * Copyright (c) 2006-2008 @@ -1254,6 +1254,7 @@ wpi_rx_done(struct wpi_softc *sc, struct wpi_rx_desc *desc, if ((flags & WPI_RX_CIPHER_MASK) != WPI_RX_CIPHER_CCMP) { ic->ic_stats.is_ccmp_dec_errs++; ifp->if_ierrors++; + m_freem(m); return; } /* Check whether decryption was successful or not. */ @@ -1261,10 +1262,12 @@ wpi_rx_done(struct wpi_softc *sc, struct wpi_rx_desc *desc, DPRINTF(("CCMP decryption failed 0x%x\n", flags)); ic->ic_stats.is_ccmp_dec_errs++; ifp->if_ierrors++; + m_freem(m); return; } if (wpi_ccmp_decap(sc, m, &ni->ni_pairwise_key) != 0) { ifp->if_ierrors++; + m_freem(m); return; } rxi.rxi_flags |= IEEE80211_RXI_HWDEC; |