linux/drivers/media/test-drivers/vidtv
Chen Zhongjin c290aa527f media: vidtv: Fix use-after-free in vidtv_bridge_dvb_init()
[ Upstream commit ba8d940593 ]

KASAN reports a use-after-free:
BUG: KASAN: use-after-free in dvb_dmxdev_release+0x4d5/0x5d0 [dvb_core]
Call Trace:
 ...
 dvb_dmxdev_release+0x4d5/0x5d0 [dvb_core]
 vidtv_bridge_probe+0x7bf/0xa40 [dvb_vidtv_bridge]
 platform_probe+0xb6/0x170
 ...
Allocated by task 1238:
 ...
 dvb_register_device+0x1a7/0xa70 [dvb_core]
 dvb_dmxdev_init+0x2af/0x4a0 [dvb_core]
 vidtv_bridge_probe+0x766/0xa40 [dvb_vidtv_bridge]
 ...
Freed by task 1238:
 dvb_register_device+0x6d2/0xa70 [dvb_core]
 dvb_dmxdev_init+0x2af/0x4a0 [dvb_core]
 vidtv_bridge_probe+0x766/0xa40 [dvb_vidtv_bridge]
 ...

It is because the error handling in vidtv_bridge_dvb_init() is wrong.

First, vidtv_bridge_dmx(dev)_init() will clean themselves when fail, but
goto fail_dmx(_dev): calls release functions again, which causes
use-after-free.

Also, in fail_fe, fail_tuner_probe and fail_demod_probe, j = i will cause
out-of-bound when i finished its loop (i == NUM_FE). And the loop
releasing is wrong, although now NUM_FE is 1 so it won't cause problem.

Fix this by correctly releasing everything.

Fixes: f90cf6079b ("media: vidtv: add a bridge driver")
Signed-off-by: Chen Zhongjin <chenzhongjin@huawei.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-31 13:14:10 +01:00
..
Kconfig
Makefile
vidtv_bridge.c media: vidtv: Fix use-after-free in vidtv_bridge_dvb_init() 2022-12-31 13:14:10 +01:00
vidtv_bridge.h
vidtv_channel.c
vidtv_channel.h
vidtv_common.c
vidtv_common.h
vidtv_demod.c
vidtv_demod.h
vidtv_encoder.h
vidtv_mux.c
vidtv_mux.h
vidtv_pes.c
vidtv_pes.h
vidtv_psi.c
vidtv_psi.h
vidtv_s302m.c media: vidtv: Check for null return of vzalloc 2022-04-08 14:23:20 +02:00
vidtv_s302m.h
vidtv_ts.c
vidtv_ts.h
vidtv_tuner.c
vidtv_tuner.h