ath11k: fix memory leak in monitor mode
authorMiles Hu <milehu@codeaurora.org>
Thu, 28 Nov 2019 08:21:49 +0000 (08:21 +0000)
committerKalle Valo <kvalo@codeaurora.org>
Fri, 29 Nov 2019 07:49:55 +0000 (09:49 +0200)
remove tail check to avoid last amsdu leak.
recycle skb in ppdu id wrap around case

Signed-off-by: Miles Hu <milehu@codeaurora.org>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/ath/ath11k/dp_rx.c

index 8c21925..85e999c 100644 (file)
@@ -3735,8 +3735,15 @@ ath11k_dp_rx_mon_mpdu_pop(struct ath11k *ar,
 
                                if (ath11k_dp_rx_mon_comp_ppduid(msdu_ppdu_id,
                                                                 ppdu_id,
-                                                                &rx_bufs_used))
+                                                                &rx_bufs_used)) {
+                                       if (rx_bufs_used) {
+                                               drop_mpdu = true;
+                                               dev_kfree_skb_any(msdu);
+                                               msdu = NULL;
+                                               goto next_msdu;
+                                       }
                                        return rx_bufs_used;
+                               }
                                pmon->mon_last_linkdesc_paddr = paddr;
                                is_first_msdu = false;
                        }
@@ -3938,7 +3945,7 @@ static int ath11k_dp_rx_mon_deliver(struct ath11k *ar, u32 mac_id,
 
                ath11k_dp_rx_deliver_msdu(ar, napi, mon_skb);
                mon_skb = skb_next;
-       } while (mon_skb && (mon_skb != tail_msdu));
+       } while (mon_skb);
        rxs->flag = 0;
 
        return 0;