aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18
diff options
context:
space:
mode:
authorAndy Walls <awalls@radix.net>2010-01-30 15:50:51 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-02-26 15:10:50 -0300
commit831f476cee704c37e7f96510135a90dfec6d00e9 (patch)
tree701bbdec5d39da9729ce51d5d90cc517d7fc2ec5 /drivers/media/video/cx18
parentb4729dcbba5431bf636d3d6615709383ad5e0d34 (diff)
downloadkernel_samsung_smdk4412-831f476cee704c37e7f96510135a90dfec6d00e9.zip
kernel_samsung_smdk4412-831f476cee704c37e7f96510135a90dfec6d00e9.tar.gz
kernel_samsung_smdk4412-831f476cee704c37e7f96510135a90dfec6d00e9.tar.bz2
V4L/DVB: cx18: Fix memory leak in cx18-alsa starting of PCM captures
The cx18_open_id is normally dynamically allocated and stored in the filp->private_data for v4l2 file operations. The cx18-alsa routines should not dynamically allocate a cx18_open_id because they never store it anywhere and never free it. This change fixes that and plugs a memory leak. Signed-off-by: Andy Walls <awalls@radix.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18')
-rw-r--r--drivers/media/video/cx18/cx18-alsa-pcm.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/media/video/cx18/cx18-alsa-pcm.c b/drivers/media/video/cx18/cx18-alsa-pcm.c
index 06862a6..cfa5121 100644
--- a/drivers/media/video/cx18/cx18-alsa-pcm.c
+++ b/drivers/media/video/cx18/cx18-alsa-pcm.c
@@ -152,28 +152,20 @@ static int snd_cx18_pcm_capture_open(struct snd_pcm_substream *substream)
struct v4l2_device *v4l2_dev = cxsc->v4l2_dev;
struct cx18 *cx = to_cx18(v4l2_dev);
struct cx18_stream *s;
- struct cx18_open_id *item;
+ struct cx18_open_id item;
int ret;
/* Instruct the cx18 to start sending packets */
snd_cx18_lock(cxsc);
s = &cx->streams[CX18_ENC_STREAM_TYPE_PCM];
- /* Allocate memory */
- item = kmalloc(sizeof(struct cx18_open_id), GFP_KERNEL);
- if (NULL == item) {
- snd_cx18_unlock(cxsc);
- return -ENOMEM;
- }
-
- item->cx = cx;
- item->type = s->type;
- item->open_id = cx->open_id++;
+ item.cx = cx;
+ item.type = s->type;
+ item.open_id = cx->open_id++;
/* See if the stream is available */
- if (cx18_claim_stream(item, item->type)) {
+ if (cx18_claim_stream(&item, item.type)) {
/* No, it's already in use */
- kfree(item);
snd_cx18_unlock(cxsc);
return -EBUSY;
}