summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortobhe <tobhe@openbsd.org>2020-12-09 13:24:22 +0000
committertobhe <tobhe@openbsd.org>2020-12-09 13:24:22 +0000
commit86cf434e15b9d26ce9a6e9c0c903efaa86a9a72b (patch)
tree04975b1e62413a7d0c9c0b5409b55e8e74ba0787
parentRemove redundant TLB flush. All callers of pmap_pte_remove() were already (diff)
downloadwireguard-openbsd-86cf434e15b9d26ce9a6e9c0c903efaa86a9a72b.tar.xz
wireguard-openbsd-86cf434e15b9d26ce9a6e9c0c903efaa86a9a72b.zip
Flush reorder buffer after gap timeout, otherwise the frames remain
in the buffer until the next frame is received. Found by and fix from Christian Ehrhardt ok stsp@
-rw-r--r--sys/net80211/ieee80211_input.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index 81f054a70d7..96250c8036b 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ieee80211_input.c,v 1.224 2020/12/08 20:17:32 stsp Exp $ */
+/* $OpenBSD: ieee80211_input.c,v 1.225 2020/12/09 13:24:22 tobhe Exp $ */
/*-
* Copyright (c) 2001 Atsushi Onoe
@@ -959,6 +959,11 @@ ieee80211_input_ba_gap_timeout(void *arg)
skipped = ieee80211_input_ba_gap_skip(ba);
ic->ic_stats.is_ht_rx_ba_frame_lost += skipped;
+ if (skipped) {
+ struct mbuf_list ml = MBUF_LIST_INITIALIZER();
+ ieee80211_input_ba_flush(ic, ni, ba, &ml);
+ if_input(&ic->ic_if, &ml);
+ }
splx(s);
}