public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* uvcvideo: Race on dev->state between uvc_disconnect() and uvc_v4l2_open()
@ 2015-05-20 14:48 Eugene Shatokhin
  2015-05-24 22:32 ` Laurent Pinchart
  0 siblings, 1 reply; 3+ messages in thread
From: Eugene Shatokhin @ 2015-05-20 14:48 UTC (permalink / raw)
  To: Laurent Pinchart; +Cc: Mauro Carvalho Chehab, LKML

Hi,

There is a race in uvcvideo module between uvc_disconnect() and 
uvc_v4l2_open() on dev->state. Checked and reproduced that with kernel 
4.1-rc1.

drivers/media/usb/uvc/uvc_driver.c, uvc_disconnect():

	dev->state |= UVC_DEV_DISCONNECTED;

drivers/media/usb/uvc/uvc_v4l2.c, uvc_v4l2_open():

	if (stream->dev->state & UVC_DEV_DISCONNECTED)
		return -ENODEV;

I checked that the race does happen by introducing a delay in 
uvc_disconnect() right before that assignment and armed a hardware 
breakpoint to detect the access to stream->dev->state from 
uvc_v4l2_open(). When I disconnected the webcam while Google Hangout was 
running, the hardware breakpoint triggered several times for that read 
in uvc_v4l2_open (uvc_v4l2.c:484). uvc_v4l2_open() was called in the 
context of GoogleTalkPlugin processes.

Not sure if the race is intentional but I guess, better to report it 
anyway. Nothing has crashed during my (brief) testing yet, but still.

Regards,

Eugene

-- 
Eugene Shatokhin, ROSA
www.rosalab.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-05-25  6:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-05-20 14:48 uvcvideo: Race on dev->state between uvc_disconnect() and uvc_v4l2_open() Eugene Shatokhin
2015-05-24 22:32 ` Laurent Pinchart
2015-05-25  6:31   ` Eugene Shatokhin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox