Skip to content

Commit a178987

Browse files
fenrus75mchehab
authored andcommitted
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 <[email protected]> Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent 5c554e6 commit a178987

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

drivers/media/video/saa7134/saa7134-empress.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ static int ts_release(struct inode *inode, struct file *file)
110110
{
111111
struct saa7134_dev *dev = file->private_data;
112112

113+
mutex_lock(&dev->empress_tsq.vb_lock);
114+
113115
videobuf_stop(&dev->empress_tsq);
114116
videobuf_mmap_free(&dev->empress_tsq);
115117

@@ -122,6 +124,8 @@ static int ts_release(struct inode *inode, struct file *file)
122124

123125
dev->empress_users--;
124126

127+
mutex_unlock(&dev->empress_tsq.vb_lock);
128+
125129
return 0;
126130
}
127131

0 commit comments

Comments
 (0)