From 79b64ac4badf06445f235f7a1bccb9d941c60371 Mon Sep 17 00:00:00 2001 From: Chaithanya Garrepalli Date: Tue, 7 Jan 2020 17:28:49 +0530 Subject: [PATCH] qcacmn: fix potential memory leak in dp_rx_process There is a chance of leak of RX buffers if peer disconnects while we are in middle for processing the list of MSDUs in a AMSDU Change-Id: I0081ec96da95ea570903dbd5d91c866c8c141667 --- dp/wifi3.0/dp_rx.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 11dfaf6a67..8047f66f1b 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -2237,9 +2237,20 @@ done: dp_peer_unref_del_find_by_id(peer); } - if (deliver_list_head && peer) - dp_rx_deliver_to_stack(vdev, peer, deliver_list_head, - deliver_list_tail); + if (qdf_likely(deliver_list_head)) { + if (qdf_likely(peer)) + dp_rx_deliver_to_stack(vdev, peer, deliver_list_head, + deliver_list_tail); + else { + nbuf = deliver_list_head; + while (nbuf) { + next = nbuf->next; + nbuf->next = NULL; + dp_rx_deliver_to_stack_no_peer(soc, nbuf); + nbuf = next; + } + } + } if (dp_rx_enable_eol_data_check(soc) && rx_bufs_used) { if (quota) {