Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 831f476c authored by Andy Walls's avatar Andy Walls Committed by Mauro Carvalho Chehab
Browse files

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: default avatarAndy Walls <awalls@radix.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent b4729dcb
Loading
Loading
Loading
Loading
+5 −13
Original line number Diff line number Diff line
@@ -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;
	}