From 831f476cee704c37e7f96510135a90dfec6d00e9 Mon Sep 17 00:00:00 2001 From: Andy Walls Date: Sat, 30 Jan 2010 15:50:51 -0300 Subject: [PATCH] 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 Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/cx18/cx18-alsa-pcm.c | 18 +++++------------- 1 file 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 06862a69c7b..cfa512112ca 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; } -- 2.41.0