2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2025-01-15 17:14:00 +08:00
linux-next/drivers/media
Hans Verkuil 024e01dead media: pulse8-cec: fix duplicate free at disconnect or probe error
Commit 601282d65b ("media: pulse8-cec: use adap_free callback") used
the adap_free callback to clean up on disconnect. What I forgot was that
in the probe it will call cec_delete_adapter() followed by kfree(pulse8)
if an error occurs. But by using the adap_free callback,
cec_delete_adapter() is already freeing the pulse8 struct.

This wasn't noticed since normally the probe works fine, but Pulse-Eight
published a new firmware version that caused a probe error, so now it
hits this bug. This affects firmware version 12, but probably any
version >= 10.

Commit aa9eda7612 ("media: pulse8-cec: close serio in disconnect, not
adap_free") made this worse by adding the line 'pulse8->serio = NULL'
right after the call to cec_unregister_adapter in the disconnect()
function. Unfortunately, cec_unregister_adapter will typically call
cec_delete_adapter (unless a filehandle to the cec device is still
open), which frees the pulse8 struct. So now it will also crash on a
simple unplug of the Pulse-Eight device.

With this fix both the unplug issue and a probe() error situation are
handled correctly again.

It will still fail to probe() with a v12 firmware, that's something
to look at separately.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Reported-by: Maxime Ripard <mripard@kernel.org>
Tested-by: Maxime Ripard <mripard@kernel.org>
Fixes: aa9eda7612 ("media: pulse8-cec: close serio in disconnect, not adap_free")
Fixes: 601282d65b ("media: pulse8-cec: use adap_free callback")
Cc: <stable@vger.kernel.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
2020-12-01 16:19:07 +01:00
..
cec media: pulse8-cec: fix duplicate free at disconnect or probe error 2020-12-01 16:19:07 +01:00
common Linux 5.9-rc7 2020-10-04 12:19:12 +02:00
dvb-core media fixes for v5.9-rc7 2020-09-24 09:05:04 -07:00
dvb-frontends media: dvb-frontends/drxk_hard.c: fix uninitialized variable warning 2020-10-08 14:15:14 +02:00
firewire media: firewire: fix memory leak 2020-09-27 11:29:45 +02:00
i2c media: tvp7002: fix uninitialized variable warning 2020-10-08 14:13:59 +02:00
mc media: mc-device.c: change media_device_request_alloc to match media_ioctl_info 2020-08-29 08:15:23 +02:00
mmc media updates for v5.8-rc1 2020-06-03 20:59:38 -07:00
pci media: netup_unidvb: drop initialization of PM pointers 2020-09-27 11:24:28 +02:00
platform media: venus: pm_helpers: Fix kernel module reload 2020-11-16 19:06:10 +01:00
radio Linux 5.9-rc4 2020-09-07 16:13:06 +02:00
rc media: mtk-cir: fix calculation of chk period 2020-12-01 16:00:51 +01:00
spi media: i2c/Kconfig: use sub-menus for I2C support 2020-04-16 10:34:40 +02:00
test-drivers media: vidtv.rst: add kernel-doc markups 2020-11-26 08:05:24 +01:00
tuners Linux 5.9-rc4 2020-09-07 16:13:06 +02:00
usb media: usbtv: Fix refcounting mixup 2020-10-08 09:08:20 +02:00
v4l2-core media: v4l2-mem2mem: Fix spurious v4l2_m2m_buf_done 2020-10-08 09:08:53 +02:00
Kconfig media: media/test_drivers: rename to test-drivers 2020-04-16 10:38:31 +02:00
Makefile media: media/test_drivers: rename to test-drivers 2020-04-16 10:38:31 +02:00