From d276e8814c7ba68e5c183ee575361aadf4ce1e3b Mon Sep 17 00:00:00 2001 From: Manoj Prabhu B Date: Thu, 27 Jul 2017 15:27:23 +0530 Subject: [PATCH] diag: Free the read workqueue structure to avoid memory leak The patch frees the read workqueue structure after scheduled workqueue processes the glink buffers and notifies glink to avoid possible memory leak. CRs-Fixed: 2083447 Change-Id: I4e562f9d1cbf02d8306e0a127835af85dfa5db23 Signed-off-by: Manoj Prabhu B --- drivers/char/diag/diagfwd_glink.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/char/diag/diagfwd_glink.c b/drivers/char/diag/diagfwd_glink.c index 42182e3a939d..f1f8f0b2b34b 100644 --- a/drivers/char/diag/diagfwd_glink.c +++ b/drivers/char/diag/diagfwd_glink.c @@ -375,8 +375,10 @@ static void diag_glink_notify_rx_work_fn(struct work_struct *work) struct diag_glink_read_work, work); struct diag_glink_info *glink_info = read_work->glink_info; - if (!glink_info || !glink_info->hdl) + if (!glink_info || !glink_info->hdl) { + kfree(read_work); return; + } diagfwd_channel_read_done(glink_info->fwd_ctxt, (unsigned char *)(read_work->ptr_read_done), @@ -388,6 +390,7 @@ static void diag_glink_notify_rx_work_fn(struct work_struct *work) "diag: Rx done for packet %pK of len: %d periph: %d ch: %d\n", read_work->ptr_rx_done, (int)read_work->ptr_read_size, glink_info->peripheral, glink_info->type); + kfree(read_work); } static void diag_glink_notify_rx(void *hdl, const void *priv, @@ -411,6 +414,7 @@ static void diag_glink_notify_rx(void *hdl, const void *priv, if (!read_work) { DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "diag: Could not allocate read_work\n"); + glink_rx_done(glink_info->hdl, ptr, true); return; }