V4L/DVB (8108): Fix open/close race in saa7134

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Sunday, June 29, 2008 - 1:06 pm

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a17898...
Commit:     a17898737eaed4ef41f273da7b830c632e06613e
Parent:     5c554e6b984ce6b36488b93a7ec8e2752233e7cb
Author:     Arjan van de Ven <arjan@linux.intel.com>
AuthorDate: Sun Jun 22 17:03:02 2008 -0300
Committer:  Mauro Carvalho Chehab <mchehab@infradead.org>
CommitDate: Thu Jun 26 15:58:59 2008 -0300

    V4L/DVB (8108): Fix open/close race in saa7134
    
    The saa7134 driver uses a (non-atomic) variable in an attempt to
    only allow one opener of the device (how it deals with sending
    the fd over unix sockets I don't know).
    
    Unfortunately, the release function first decrements this variable,
    and THEN goes on to disable more of the device. This allows for
    a race where another opener of the device comes in after the decrement of
    the variable, configures the hardware just to then see the hardware
    be disabled by the rest of the release function.
    
    This patch makes the release function use the same lock as the open
    function to protect the hardware as well as the variable (which now
    at least has some locking to protect it).
    
    Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
---
 drivers/media/video/saa7134/saa7134-empress.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
index 1c8cd0e..3ae71a3 100644
--- a/drivers/media/video/saa7134/saa7134-empress.c
+++ b/drivers/media/video/saa7134/saa7134-empress.c
@@ -110,6 +110,8 @@ static int ts_release(struct inode *inode, struct file *file)
 {
 	struct saa7134_dev *dev = file->private_data;
 
+	mutex_lock(&dev->empress_tsq.vb_lock);
+
 	videobuf_stop(&dev->empress_tsq);
 	videobuf_mmap_free(&dev->empress_tsq);
 
@@ -122,6 +124,8 @@ static int ts_release(struct inode *inode, struct file *file)
 
 	dev->empress_users--;
 
+	mutex_unlock(&dev->empress_tsq.vb_lock);
+
 	return 0;
 }
 
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
V4L/DVB (8108): Fix open/close race in saa7134, Linux Kernel Mailing ..., (Sun Jun 29, 1:06 pm)