Skip to content

Commit

Permalink
V4L/DVB (8108): Fix open/close race in saa7134
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Arjan van de Ven authored and Mauro Carvalho Chehab committed Jun 26, 2008
1 parent 5c554e6 commit a178987
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions drivers/media/video/saa7134/saa7134-empress.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -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;
}

Expand Down

0 comments on commit a178987

Please sign in to comment.