Skip to contentSkip to conversation

au0828_init_tuner() called without dev lock held

DISCUSSION Shuah Khan 2 participants 3 messages Sep 22, 2014 Media (V4L/DVB)

lore
Share & tools
lore

Shuah Khan

author
#0 lore raw

Hi Hans and Mauro,

While I was making changes for media token work, I noticed there are several places au0828_init_tuner() gets called without holding dev lock.

vidioc_s_std(), vidioc_g_tuner(), vidioc_s_tuner(), vidioc_streamon() au0828_v4l2_resume()

Some of these might be intended since au0828_init_tuner() invokes s_std. All of these changes including the au0828_init_tuner() itself were added in ea86968fb91471493ccac7d8f2a65bc65db6803b

au0828_v4l2_resume() also does this and this one for sure needs fixing very likely. I am not sure about the others. Thoughts??

-- Shuah

Signature · 4 lines
Shuah Khan
Sr. Linux Kernel Developer
Samsung Research America (Silicon Valley)
[email protected] | (970) 217-8978
#1 lore raw
Quoted 4 lines · Shuah Khan

Hi Hans and Mauro,

While I was making changes for media token work, I noticed there are several places au0828_init_tuner() gets called without holding dev lock.

au0828 sets the lock pointer in struct video_device to the dev lock. That means that all v4l2 ioctl calls are serialized in v4l2_ioctl() in v4l2-dev.c. So these calls *do* hold the device lock.

Not au0828_v4l2_resume() though, that's not an ioctl op.

Regards,

Hans

Quoted 13 lines

vidioc_s_std(), vidioc_g_tuner(), vidioc_s_tuner(), vidioc_streamon() au0828_v4l2_resume()

Some of these might be intended since au0828_init_tuner() invokes s_std. All of these changes including the au0828_init_tuner() itself were added in ea86968fb91471493ccac7d8f2a65bc65db6803b

au0828_v4l2_resume() also does this and this one for sure needs fixing very likely. I am not sure about the others. Thoughts??

-- Shuah

author
#2 lore raw
Quoted 12 lines · Hans Verkuil
Quoted 4 lines · Shuah Khan

Hi Hans and Mauro,

While I was making changes for media token work, I noticed there are several places au0828_init_tuner() gets called without holding dev lock.

au0828 sets the lock pointer in struct video_device to the dev lock. That means that all v4l2 ioctl calls are serialized in v4l2_ioctl() in v4l2-dev.c. So these calls *do* hold the device lock.

Not au0828_v4l2_resume() though, that's not an ioctl op.

Good. I will go ahead and fix au0828_v4l2_resume() to do it right.

thanks,
-- Shuah

Signature · 4 lines
Shuah Khan
Sr. Linux Kernel Developer
Samsung Research America (Silicon Valley)
[email protected] | (970) 217-8978