From: Sakari Ailus Date: Fri, 4 May 2007 15:19:59 +0000 (-0300) Subject: V4L/DVB (5603): V4L: Prevent queueing queued buffers. X-Git-Tag: v2.6.22-rc1~23^2~18 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36a63ee34b568de8d0762f9b07f34ae5caae7724;p=linux-2.6 V4L/DVB (5603): V4L: Prevent queueing queued buffers. videobuf_qbuf queues buffers to q->stream but does not properly check the state of the buffer before queueing. It was possible to queue buffers that already were in the queue. Only buffers that are in states STATE_NEEDS_INIT and STATE_IDLE can be queued. Signed-off-by: Sakari Ailus Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/video/video-buf.c b/drivers/media/video/video-buf.c index 459786ff45..a32dfbe058 100644 --- a/drivers/media/video/video-buf.c +++ b/drivers/media/video/video-buf.c @@ -702,9 +702,7 @@ videobuf_qbuf(struct videobuf_queue *q, dprintk(1,"qbuf: memory type is wrong.\n"); goto done; } - if (buf->state == STATE_QUEUED || - buf->state == STATE_PREPARED || - buf->state == STATE_ACTIVE) { + if (buf->state != STATE_NEEDS_INIT && buf->state != STATE_IDLE) { dprintk(1,"qbuf: buffer is already queued or active.\n"); goto done; }