diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-07-28 00:21:12 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-07-28 00:21:11 -0700 |
| commit | 96e98ab9bbdb35840782553d005105fd8c6e18f7 (patch) | |
| tree | 86af0552837352d5f1dd6729766b8453c4063ce8 | |
| parent | 1036b05d5c0a13e54779e9e63aff93763377f566 (diff) | |
| parent | d276e8814c7ba68e5c183ee575361aadf4ce1e3b (diff) | |
Merge "diag: Free the read workqueue structure to avoid memory leak"
| -rw-r--r-- | drivers/char/diag/diagfwd_glink.c | 6 |
1 files changed, 5 insertions, 1 deletions
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; } |
