linux/drivers/media/usb/gspca
Antonio Ospite dcc7fdbec5 [media] gspca: ov534/topro: prevent a division by 0
v4l2-compliance sends a zeroed struct v4l2_streamparm in
v4l2-test-formats.cpp::testParmType(), and this results in a division by
0 in some gspca subdrivers:

  divide error: 0000 [#1] SMP
  Modules linked in: gspca_ov534 gspca_main ...
  CPU: 0 PID: 17201 Comm: v4l2-compliance Not tainted 4.3.0-rc2-ao2 #1
  Hardware name: System manufacturer System Product Name/M2N-E SLI, BIOS
    ASUS M2N-E SLI ACPI BIOS Revision 1301 09/16/2010
  task: ffff8800818306c0 ti: ffff880095c4c000 task.ti: ffff880095c4c000
  RIP: 0010:[<ffffffffa079bd62>]  [<ffffffffa079bd62>] sd_set_streamparm+0x12/0x60 [gspca_ov534]
  RSP: 0018:ffff880095c4fce8  EFLAGS: 00010296
  RAX: 0000000000000000 RBX: ffff8800c9522000 RCX: ffffffffa077a140
  RDX: 0000000000000000 RSI: ffff880095e0c100 RDI: ffff8800c9522000
  RBP: ffff880095e0c100 R08: ffffffffa077a100 R09: 00000000000000cc
  R10: ffff880067ec7740 R11: 0000000000000016 R12: ffffffffa07bb400
  R13: 0000000000000000 R14: ffff880081b6a800 R15: 0000000000000000
  FS:  00007fda0de78740(0000) GS:ffff88012fc00000(0000) knlGS:0000000000000000
  CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
  CR2: 00000000014630f8 CR3: 00000000cf349000 CR4: 00000000000006f0
  Stack:
   ffffffffa07a6431 ffff8800c9522000 ffffffffa077656e 00000000c0cc5616
   ffff8800c9522000 ffffffffa07a5e20 ffff880095e0c100 0000000000000000
   ffff880067ec7740 ffffffffa077a140 ffff880067ec7740 0000000000000016
  Call Trace:
   [<ffffffffa07a6431>] ? v4l_s_parm+0x21/0x50 [videodev]
   [<ffffffffa077656e>] ? vidioc_s_parm+0x4e/0x60 [gspca_main]
   [<ffffffffa07a5e20>] ? __video_do_ioctl+0x280/0x2f0 [videodev]
   [<ffffffffa07a5ba0>] ? video_ioctl2+0x20/0x20 [videodev]
   [<ffffffffa07a59b9>] ? video_usercopy+0x319/0x4e0 [videodev]
   [<ffffffff81182dc1>] ? page_add_new_anon_rmap+0x71/0xa0
   [<ffffffff811afb92>] ? mem_cgroup_commit_charge+0x52/0x90
   [<ffffffff81179b18>] ? handle_mm_fault+0xc18/0x1680
   [<ffffffffa07a15cc>] ? v4l2_ioctl+0xac/0xd0 [videodev]
   [<ffffffff811c846f>] ? do_vfs_ioctl+0x28f/0x480
   [<ffffffff811c86d4>] ? SyS_ioctl+0x74/0x80
   [<ffffffff8154a8b6>] ? entry_SYSCALL_64_fastpath+0x16/0x75
  Code: c7 93 d9 79 a0 5b 5d e9 f1 f3 9a e0 0f 1f 00 66 2e 0f 1f 84 00
    00 00 00 00 66 66 66 66 90 53 31 d2 48 89 fb 48 83 ec 08 8b 46 10 <f7>
    76 0c 80 bf ac 0c 00 00 00 88 87 4e 0e 00 00 74 09 80 bf 4f
  RIP  [<ffffffffa079bd62>] sd_set_streamparm+0x12/0x60 [gspca_ov534]
   RSP <ffff880095c4fce8>
  ---[ end trace 279710c2c6c72080 ]---

Following what the doc says about a zeroed timeperframe (see
http://www.linuxtv.org/downloads/v4l-dvb-apis/vidioc-g-parm.html):

  ...
  To reset manually applications can just set this field to zero.

fix the issue by resetting the frame rate to a default value in case of
an unusable timeperframe.

The fix is done in the subdrivers instead of gspca.c because only the
subdrivers have notion of a default frame rate to reset the camera to.

Signed-off-by: Antonio Ospite <ao2@ao2.it>
Cc: stable@vger.kernel.org
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2015-11-17 14:54:25 -02:00
..
gl860 [media] gspca_gl860: Clean up idxdata structs 2014-04-16 18:13:56 -03:00
m5602 [media] gscpa_m5602: use msecs_to_jiffies for conversions 2015-07-06 08:26:06 -03:00
stv06xx [media] gspca_stv06xx: enable button found on some Quickcam Express variant 2015-01-29 18:27:25 -02:00
Kconfig [media] media: fix gspca drivers build dependencies 2015-03-03 10:16:31 -03:00
Makefile [media] gspca_touptek: Add support for ToupTek UCMOS series USB cameras 2015-01-29 18:13:13 -02:00
autogain_functions.c [media] Fix 64-bit division fall-out from 64-bit control ranges 2014-07-17 12:44:38 -03:00
benq.c [media] benq: fix indentation 2015-04-30 13:41:52 -03:00
conex.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
cpia1.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
dtcs033.c [media] media:gspca:dtcs033 Clean sparse check warnings on endianess 2014-04-23 10:07:52 -03:00
etoms.c [media] gspca: remove obsolete Kconfig macros 2013-03-29 08:19:26 -03:00
finepix.c
gspca.c [media] use v4l2_get_timestamp where possible 2015-10-01 08:29:23 -03:00
gspca.h [media] trivial: drivers/media/usb/gspca/gspca.h: indent with TABs, not spaces 2014-09-08 10:00:57 -03:00
jeilinj.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
jl2005bcd.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
jpeg.h [media] gpsca: remove the risk of a division by zero 2014-04-08 11:01:12 -03:00
kinect.c [media] kinect: fix sparse warnings 2014-09-03 09:34:14 -03:00
konica.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
mars.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
mr97310a.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
nw80x.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
ov519.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
ov534.c [media] gspca: ov534/topro: prevent a division by 0 2015-11-17 14:54:25 -02:00
ov534_9.c [media] gscpa_ov534_9: Add support for ov3610 sensor 2013-10-15 12:49:51 -03:00
pac207.c [media] media_tree: Fix spelling errors 2013-12-09 14:50:50 -02:00
pac7302.c Merge commit '67dd8f35c2d8ed80f26c9654b474cffc11c6674d' into patchwork 2014-07-22 02:03:59 -03:00
pac7311.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
pac_common.h [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
se401.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
se401.h
sn9c20x.c [media] sn9c20x: fix checkpatch warning: sizeof cmatrix should be sizeof(cmatrix) 2014-09-21 20:59:57 -03:00
sn9c2028.c [media] gspca: sn9c2028: remove an unneeded condition 2015-07-06 08:26:06 -03:00
sn9c2028.h [media] gspca: sn9c2028: Add gain and autogain controls Genius Videocam Live v2 2015-05-30 11:48:09 -03:00
sonixb.c [media] Fix 64-bit division fall-out from 64-bit control ranges 2014-07-17 12:44:38 -03:00
sonixj.c [media] sonixj: fix bad indenting 2015-05-01 06:11:05 -03:00
spca500.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
spca501.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
spca505.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
spca506.c Drivers: media: remove __dev* attributes. 2013-01-03 15:57:02 -08:00
spca508.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
spca561.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
spca1528.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
sq905.c [media] gspca: Remove gspca-specific debug magic 2013-03-05 15:13:48 -03:00
sq905c.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
sq930x.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
stk014.c [media] stk014: fix bad indenting 2015-05-01 06:11:22 -03:00
stk1135.c [media] gspca-stk1135: Add delay after configuring clock 2013-11-29 12:03:16 -02:00
stk1135.h [media] introduce gspca-stk1135: Syntek STK1135 driver 2013-08-21 05:21:55 -03:00
stv0680.c [media] media_tree: Fix spelling errors 2013-12-09 14:50:50 -02:00
sunplus.c [media] gspca_sunplus: Add new usb-id for 06d6:0041 2013-11-29 12:12:52 -02:00
t613.c [media] usb/gspca/t613.c: use IS_ENABLED() macro 2013-02-05 14:54:37 -02:00
topro.c [media] gspca: ov534/topro: prevent a division by 0 2015-11-17 14:54:25 -02:00
touptek.c [media] gspca/touptek: Fix a few CodingStyle issues 2015-01-29 18:25:02 -02:00
tv8532.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
vc032x.c [media] gspca_vc032x: Fix wrong bytesperline 2015-01-29 18:28:46 -02:00
vicam.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
w996Xcf.c [media] gspca: store current mode instead of individual parameters 2013-09-26 07:19:09 -03:00
xirlink_cit.c [media] xirlink_cit: comment unreachable code 2015-05-01 06:27:08 -03:00
zc3xx-reg.h
zc3xx.c [media] zc3xx: remove dead code and uneeded gotos 2015-04-30 14:27:53 -03:00