summaryrefslogtreecommitdiffstats
path: root/sys/dev/pci
diff options
context:
space:
mode:
authordamien <damien@openbsd.org>2009-06-02 16:28:21 +0000
committerdamien <damien@openbsd.org>2009-06-02 16:28:21 +0000
commitc38efa92aff994bc5da9b18c12007da8f858f16c (patch)
treefcb9a58c9816ed1089e56d34945de10da1966d58 /sys/dev/pci
parentmake sure the channel's subband is found in iwn4965_set_txpower(). (diff)
downloadwireguard-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.c5
-rw-r--r--sys/dev/pci/if_wpi.c5
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;