Skip to content

Commit 5c7ef50

Browse files
arndbgregkh
authored andcommitted
ALSA: qc_audio_offload: avoid leaking xfer_buf allocation
The info->xfer_buf_cpu member is set to a NULL value because the allocation happens in a different function and is only assigned to the function argument but never passed back. Pass it by reference instead to have a handle that can actually be freed by the final usb_free_coherent() call. Signed-off-by: Arnd Bergmann <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 485ae08 commit 5c7ef50

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

sound/usb/qcom/qc_audio_offload.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,10 +1014,11 @@ static int enable_audio_stream(struct snd_usb_substream *subs,
10141014
*
10151015
*/
10161016
static int uaudio_transfer_buffer_setup(struct snd_usb_substream *subs,
1017-
u8 *xfer_buf, u32 xfer_buf_len,
1017+
void **xfer_buf_cpu, u32 xfer_buf_len,
10181018
struct mem_info_v01 *mem_info)
10191019
{
10201020
struct sg_table xfer_buf_sgt;
1021+
void *xfer_buf;
10211022
phys_addr_t xfer_buf_pa;
10221023
u32 len = xfer_buf_len;
10231024
bool dma_coherent;
@@ -1060,6 +1061,7 @@ static int uaudio_transfer_buffer_setup(struct snd_usb_substream *subs,
10601061
mem_info->dma = xfer_buf_pa;
10611062
mem_info->size = len;
10621063
mem_info->iova = PREPEND_SID_TO_IOVA(iova, uaudio_qdev->data->sid);
1064+
*xfer_buf_cpu = xfer_buf;
10631065
sg_free_table(&xfer_buf_sgt);
10641066

10651067
return 0;
@@ -1340,7 +1342,7 @@ static int prepare_qmi_response(struct snd_usb_substream *subs,
13401342
struct q6usb_offload *data;
13411343
int pcm_dev_num;
13421344
int card_num;
1343-
u8 *xfer_buf_cpu = NULL;
1345+
void *xfer_buf_cpu;
13441346
int ret;
13451347

13461348
pcm_dev_num = (req_msg->usb_token & QMI_STREAM_REQ_DEV_NUM_MASK) >> 8;
@@ -1409,7 +1411,7 @@ static int prepare_qmi_response(struct snd_usb_substream *subs,
14091411

14101412
resp->speed_info_valid = 1;
14111413

1412-
ret = uaudio_transfer_buffer_setup(subs, xfer_buf_cpu, req_msg->xfer_buff_size,
1414+
ret = uaudio_transfer_buffer_setup(subs, &xfer_buf_cpu, req_msg->xfer_buff_size,
14131415
&resp->xhci_mem_info.xfer_buff);
14141416
if (ret < 0) {
14151417
ret = -ENOMEM;

0 commit comments

Comments
 (0)