linux/drivers/media
Hans Verkuil fac710e45d [media] vb2: fix nasty vb2_thread regression
The vb2_thread implementation was made generic and was moved from
videobuf2-v4l2.c to videobuf2-core.c in commit af3bac1a. Unfortunately
that clearly was never tested since it broke read() causing NULL address
references.

The root cause was confused handling of vb2_buffer vs v4l2_buffer (the pb
pointer in various core functions).

The v4l2_buffer no longer exists after moving the code into the core and
it is no longer needed. However, the vb2_thread code passed a pointer to
a vb2_buffer to the core functions were a v4l2_buffer pointer was expected
and vb2_thread expected that the vb2_buffer fields would be filled in
correctly.

This is obviously wrong since v4l2_buffer != vb2_buffer. Note that the
pb pointer is a void pointer, so no type-checking took place.

This patch fixes this problem:

1) allow pb to be NULL for vb2_core_(d)qbuf. The vb2_thread code will use
   a NULL pointer here since they don't care about v4l2_buffer anyway.
2) let vb2_core_dqbuf pass back the index of the received buffer. This is
   all vb2_thread needs: this index is the index into the q->bufs array
   and vb2_thread just gets the vb2_buffer from there.
3) the fileio->b pointer (that originally contained a v4l2_buffer) is
   removed altogether since it is no longer needed.

Tested with vivid and the cobalt driver.

Cc: stable@vger.kernel.org # Kernel >= 4.3
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Reported-by: Matthias Schwarzott <zzam@gentoo.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
2016-02-04 09:13:46 -02:00
..
common Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2016-01-14 17:04:19 -08:00
dvb-core [media] mxl111sf: Add a tuner entity 2016-01-11 12:19:26 -02:00
dvb-frontends [media] tda1004x: only update the frontend properties if locked 2016-02-04 09:10:45 -02:00
firewire [media] dvb: modify core to implement interfaces/entities at MC new gen 2016-01-11 12:18:52 -02:00
i2c [media] media: i2c: Don't export ir-kbd-i2c module alias 2016-02-01 13:19:31 -02:00
mmc [media] siano: register media controller earlier 2015-02-26 09:10:39 -03:00
pci Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2016-01-14 17:04:19 -08:00
platform [media] exynos4-is: make VIDEO_SAMSUNG_EXYNOS4_IS tristate 2016-01-25 12:53:17 -02:00
radio [media] media, sound: tea575x: constify snd_tea575x_ops structures 2015-12-03 11:26:45 -02:00
rc [media] rc: sunxi-cir: Initialize the spinlock properly 2015-12-23 15:51:40 -02:00
tuners [media] tv tuner max2165 driver: extend frequency range 2015-11-19 11:19:42 -02:00
usb media updates for v4.5-rc1 2016-01-13 11:46:37 -08:00
v4l2-core [media] vb2: fix nasty vb2_thread regression 2016-02-04 09:13:46 -02:00
Kconfig [media] Kconfig: Re-enable Media controller support for DVB 2016-01-11 12:18:40 -02:00
Makefile [media] bq/c-qcam, w9966, pms: move to staging in preparation for removal 2014-12-16 23:21:44 -02:00
media-device.c [media] Postpone the addition of MEDIA_IOC_G_TOPOLOGY 2016-01-11 12:35:17 -02:00
media-devnode.c [media] media-devnode: move kernel-doc documentation to the header 2016-01-11 12:19:13 -02:00
media-entity.c [media] media-entitiy: add a function to create multiple links 2016-01-11 12:19:26 -02:00