diff options
| author | Vidyakumar Athota <vathota@codeaurora.org> | 2016-11-29 13:45:42 -0800 |
|---|---|---|
| committer | Vidyakumar Athota <vathota@codeaurora.org> | 2016-11-29 18:18:14 -0800 |
| commit | a1e1a009233289ca64ff387e7a72bd2f59ae0502 (patch) | |
| tree | ce778185ba2d97295e817804e9a01f8a10a6ef5e /drivers | |
| parent | a1ccb4d410b2904ca0591c6ec27a277229b81fc8 (diff) | |
soc: qcom: fix to avoid invalid memory access
In error scenarios, tx_buf is accessed even after tx_buf
memory is freed up. This change is to avoid access to freed
up memory.
Change-Id: I93a2c5875474094da1de07ddaaad8a709193632f
Signed-off-by: Vidyakumar Athota <vathota@codeaurora.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/soc/qcom/wcd-dsp-glink.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/soc/qcom/wcd-dsp-glink.c b/drivers/soc/qcom/wcd-dsp-glink.c index daa6ed5ed5ea..efd5945ea626 100644 --- a/drivers/soc/qcom/wcd-dsp-glink.c +++ b/drivers/soc/qcom/wcd-dsp-glink.c @@ -604,6 +604,7 @@ static void wdsp_glink_tx_buf_work(struct work_struct *work) mutex_lock(&tx_buf->ch->mutex); if (ch->channel_state == GLINK_CONNECTED) { + mutex_unlock(&tx_buf->ch->mutex); ret = glink_tx(ch->handle, tx_buf, cpkt->payload, cpkt->payload_size, GLINK_TX_REQ_INTENT); @@ -618,6 +619,7 @@ static void wdsp_glink_tx_buf_work(struct work_struct *work) kfree(tx_buf); } } else { + mutex_unlock(&tx_buf->ch->mutex); dev_err(wpriv->dev, "%s: channel %s is not in connected state\n", __func__, ch->ch_cfg.name); /* @@ -626,7 +628,6 @@ static void wdsp_glink_tx_buf_work(struct work_struct *work) */ kfree(tx_buf); } - mutex_unlock(&tx_buf->ch->mutex); } /* |
