summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhipeng Lu <alexious@zju.edu.cn>2023-12-01 21:22:55 +0800
committerHans Verkuil <hverkuil-cisco@xs4all.nl>2023-12-07 08:31:15 +0100
commit5d3c8990e2bbf929cb211563dadd70708f42e4e6 (patch)
treef5ec1a14765ab9a03948f6e6bd0fff601f62f6b0
parentb58253793f4fe7495af3157d7f29cf0919183009 (diff)
downloadlinux-stable-5d3c8990e2bbf929cb211563dadd70708f42e4e6.tar.gz
linux-stable-5d3c8990e2bbf929cb211563dadd70708f42e4e6.tar.bz2
linux-stable-5d3c8990e2bbf929cb211563dadd70708f42e4e6.zip
media: cx231xx: fix a memleak in cx231xx_init_isoc
The dma_q->p_left_data alloced by kzalloc should be freed in all the following error handling paths. However, it hasn't been freed in the allocation error paths of dev->video_mode.isoc_ctl.urb and dev->video_mode.isoc_ctl.transfer_buffer. On the other hand, the dma_q->p_left_data did be freed in the error-handling paths after that of dev->video_mode.isoc_ctl.urb and dev->video_mode.isoc_ctl.transfer_buffer, by calling cx231xx_uninit_isoc(dev). So the same free operation should be done in error-handling paths of those two allocation. Fixes: 64fbf4445526 ("[media] cx231xx: Added support for Carraera, Shelby, RDx_253S and VIDEO_GRABBER") Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
-rw-r--r--drivers/media/usb/cx231xx/cx231xx-core.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/media/usb/cx231xx/cx231xx-core.c b/drivers/media/usb/cx231xx/cx231xx-core.c
index 7b7e2a26ef93..d8312201694f 100644
--- a/drivers/media/usb/cx231xx/cx231xx-core.c
+++ b/drivers/media/usb/cx231xx/cx231xx-core.c
@@ -1023,6 +1023,7 @@ int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
if (!dev->video_mode.isoc_ctl.urb) {
dev_err(dev->dev,
"cannot alloc memory for usb buffers\n");
+ kfree(dma_q->p_left_data);
return -ENOMEM;
}
@@ -1032,6 +1033,7 @@ int cx231xx_init_isoc(struct cx231xx *dev, int max_packets,
dev_err(dev->dev,
"cannot allocate memory for usbtransfer\n");
kfree(dev->video_mode.isoc_ctl.urb);
+ kfree(dma_q->p_left_data);
return -ENOMEM;
}