Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

V4L/DVB (9194): stk-webcam: fix crash on close after disconnect

This patch prevents stk-webcam from updating usb device information
once the camera has been removed. This prevents a crash that would
otherwise occur if the camera is disconnected while it is still in
use.

Signed-off-by: David Ellingsworth <david@identd.dyndns.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

David Ellingsworth and committed by
Mauro Carvalho Chehab
f051ae18 081d868f

+7 -11
+7 -11
drivers/media/video/stk-webcam.c
··· 559 559 560 560 urb = dev->isobufs[i].urb; 561 561 if (urb) { 562 - if (atomic_read(&dev->urbs_used)) 562 + if (atomic_read(&dev->urbs_used) && is_present(dev)) 563 563 usb_kill_urb(urb); 564 564 usb_free_urb(urb); 565 565 } ··· 688 688 { 689 689 struct stk_camera *dev = fp->private_data; 690 690 691 - if (dev->owner != fp) { 692 - usb_autopm_put_interface(dev->interface); 693 - return 0; 691 + if (dev->owner == fp) { 692 + stk_stop_stream(dev); 693 + stk_free_buffers(dev); 694 + dev->owner = NULL; 694 695 } 695 696 696 - stk_stop_stream(dev); 697 - 698 - stk_free_buffers(dev); 699 - 700 - dev->owner = NULL; 701 - 702 - usb_autopm_put_interface(dev->interface); 697 + if(is_present(dev)) 698 + usb_autopm_put_interface(dev->interface); 703 699 704 700 return 0; 705 701 }