linux/drivers/media
Takashi Iwai b8052d2832 xc2028: Fix use-after-free bug properly
commit 22a1e7783e upstream.

The commit 8dfbcc4351 ("[media] xc2028: avoid use after free") tried
to address the reported use-after-free by clearing the reference.

However, it's clearing the wrong pointer; it sets NULL to
priv->ctrl.fname, but it's anyway overwritten by the next line
memcpy(&priv->ctrl, p, sizeof(priv->ctrl)).

OTOH, the actual code accessing the freed string is the strcmp() call
with priv->fname:
	if (!firmware_name[0] && p->fname &&
	    priv->fname && strcmp(p->fname, priv->fname))
		free_firmware(priv);

where priv->fname points to the previous file name, and this was
already freed by kfree().

For fixing the bug properly, this patch does the following:

- Keep the copy of firmware file name in only priv->fname,
  priv->ctrl.fname isn't changed;
- The allocation is done only when the firmware gets loaded;
- The kfree() is called in free_firmware() commonly

Fixes: commit 8dfbcc4351 ('[media] xc2028: avoid use after free')
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2017-02-23 03:54:39 +00:00
..
common [media] siano: add support for PCTV 77e 2014-11-17 14:11:49 +00:00
dvb-core media: dvb_ringbuffer: Add memory barriers 2016-11-20 01:16:48 +00:00
dvb-frontends mb86a20s: fix demod settings 2017-02-23 03:53:58 +00:00
firewire firewire: introduce fw_driver.probe and .remove methods 2013-06-09 18:15:00 +02:00
i2c adv7511: TX_EDID_PRESENT is still 1 after a disconnect 2016-05-01 00:05:48 +02:00
mmc [media] siano: get rid of CammelCase from smscoreapi.h 2013-03-21 10:03:16 -03:00
parport [media] media: parport: Fix format string mismatch in bw-qcam.c 2014-05-23 12:18:53 -03:00
pci ngene: properly handle __user ptr 2016-11-20 01:16:48 +00:00
platform s5p-mfc: Add release callback for memory region devs 2016-11-20 01:16:39 +00:00
radio [media] si4713: fix Kconfig dependencies 2014-03-28 18:06:55 -03:00
rc [media] rc: allow rc modules to be loaded if rc-main is not a module 2016-02-02 19:10:10 +00:00
tuners xc2028: Fix use-after-free bug properly 2017-02-23 03:54:39 +00:00
usb dib0700: fix nec repeat handling 2017-02-23 03:54:33 +00:00
v4l2-core media: v4l2-compat-ioctl32: fix missing length copy in put_v4l2_buffer32 2016-05-01 00:05:45 +02:00
Kconfig [media] subdev autoselect only works if I2C and I2C_MUX is selected 2013-12-21 06:03:06 -02:00
Makefile [media] move i2c files into drivers/media/i2c 2012-09-06 18:42:54 -03:00
media-device.c media: media-device: Remove duplicated memset() in media_enum_entities() 2014-09-17 09:21:49 -07:00
media-devnode.c [media] media: Use a better owner for the media device 2014-05-13 13:39:00 -03:00
media-entity.c [media] media: Check for active links on pads with MEDIA_PAD_FL_MUST_CONNECT flag 2013-12-04 15:03:45 -02:00