aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/wil6210/rx_reorder.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/wil6210/rx_reorder.c b/drivers/net/wireless/ath/wil6210/rx_reorder.c
index e3d1be82f314..32031e7a11d5 100644
--- a/drivers/net/wireless/ath/wil6210/rx_reorder.c
+++ b/drivers/net/wireless/ath/wil6210/rx_reorder.c
@@ -261,9 +261,19 @@ struct wil_tid_ampdu_rx *wil_tid_ampdu_rx_alloc(struct wil6210_priv *wil,
261void wil_tid_ampdu_rx_free(struct wil6210_priv *wil, 261void wil_tid_ampdu_rx_free(struct wil6210_priv *wil,
262 struct wil_tid_ampdu_rx *r) 262 struct wil_tid_ampdu_rx *r)
263{ 263{
264 int i;
265
264 if (!r) 266 if (!r)
265 return; 267 return;
266 wil_release_reorder_frames(wil, r, r->head_seq_num + r->buf_size); 268
269 /* Do not pass remaining frames to the network stack - it may be
270 * not expecting to get any more Rx. Rx from here may lead to
271 * kernel OOPS since some per-socket accounting info was already
272 * released.
273 */
274 for (i = 0; i < r->buf_size; i++)
275 kfree_skb(r->reorder_buf[i]);
276
267 kfree(r->reorder_buf); 277 kfree(r->reorder_buf);
268 kfree(r->reorder_time); 278 kfree(r->reorder_time);
269 kfree(r); 279 kfree(r);