android_kernel_samsung_sm8650/drivers/media/i2c
Yuan Can ac93f8ac66 media: i2c: ov772x: Fix memleak in ov772x_probe()
[ Upstream commit 7485edb2b6ca5960205c0a49bedfd09bba30e521 ]

A memory leak was reported when testing ov772x with bpf mock device:

AssertionError: unreferenced object 0xffff888109afa7a8 (size 8):
  comm "python3", pid 279, jiffies 4294805921 (age 20.681s)
  hex dump (first 8 bytes):
    80 22 88 15 81 88 ff ff                          ."......
  backtrace:
    [<000000009990b438>] __kmalloc_node+0x44/0x1b0
    [<000000009e32f7d7>] kvmalloc_node+0x34/0x180
    [<00000000faf48134>] v4l2_ctrl_handler_init_class+0x11d/0x180 [videodev]
    [<00000000da376937>] ov772x_probe+0x1c3/0x68c [ov772x]
    [<000000003f0d225e>] i2c_device_probe+0x28d/0x680
    [<00000000e0b6db89>] really_probe+0x17c/0x3f0
    [<000000001b19fcee>] __driver_probe_device+0xe3/0x170
    [<0000000048370519>] driver_probe_device+0x49/0x120
    [<000000005ead07a0>] __device_attach_driver+0xf7/0x150
    [<0000000043f452b8>] bus_for_each_drv+0x114/0x180
    [<00000000358e5596>] __device_attach+0x1e5/0x2d0
    [<0000000043f83c5d>] bus_probe_device+0x126/0x140
    [<00000000ee0f3046>] device_add+0x810/0x1130
    [<00000000e0278184>] i2c_new_client_device+0x359/0x4f0
    [<0000000070baf34f>] of_i2c_register_device+0xf1/0x110
    [<00000000a9f2159d>] of_i2c_notify+0x100/0x160
unreferenced object 0xffff888119825c00 (size 256):
  comm "python3", pid 279, jiffies 4294805921 (age 20.681s)
  hex dump (first 32 bytes):
    00 b4 a5 17 81 88 ff ff 00 5e 82 19 81 88 ff ff  .........^......
    10 5c 82 19 81 88 ff ff 10 5c 82 19 81 88 ff ff  .\.......\......
  backtrace:
    [<000000009990b438>] __kmalloc_node+0x44/0x1b0
    [<000000009e32f7d7>] kvmalloc_node+0x34/0x180
    [<0000000073d88e0b>] v4l2_ctrl_new.cold+0x19b/0x86f [videodev]
    [<00000000b1f576fb>] v4l2_ctrl_new_std+0x16f/0x210 [videodev]
    [<00000000caf7ac99>] ov772x_probe+0x1fa/0x68c [ov772x]
    [<000000003f0d225e>] i2c_device_probe+0x28d/0x680
    [<00000000e0b6db89>] really_probe+0x17c/0x3f0
    [<000000001b19fcee>] __driver_probe_device+0xe3/0x170
    [<0000000048370519>] driver_probe_device+0x49/0x120
    [<000000005ead07a0>] __device_attach_driver+0xf7/0x150
    [<0000000043f452b8>] bus_for_each_drv+0x114/0x180
    [<00000000358e5596>] __device_attach+0x1e5/0x2d0
    [<0000000043f83c5d>] bus_probe_device+0x126/0x140
    [<00000000ee0f3046>] device_add+0x810/0x1130
    [<00000000e0278184>] i2c_new_client_device+0x359/0x4f0
    [<0000000070baf34f>] of_i2c_register_device+0xf1/0x110

The reason is that if priv->hdl.error is set, ov772x_probe() jumps to the
error_mutex_destroy without doing v4l2_ctrl_handler_free(), and all
resources allocated in v4l2_ctrl_handler_init() and v4l2_ctrl_new_std()
are leaked.

Fixes: 1112babde2 ("media: i2c: Copy ov772x soc_camera sensor driver")
Signed-off-by: Yuan Can <yuancan@huawei.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-03-10 09:33:42 +01:00
..
adv748x media: adv748x: afe: Select input port when initializing AFE 2022-12-31 13:32:03 +01:00
ccs i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
cx25840 media updates for v6.1-rc1 2022-10-07 11:04:35 -07:00
et8ek8 i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
m5mols i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
s5c73m3 i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ad5820.c media: i2c: ad5820: Fix error path 2022-12-31 13:32:04 +01:00
ad9389b.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adp1653.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7170.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7175.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7180.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7183_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
adv7183.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7343_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
adv7343.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7393_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
adv7393.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
adv7511-v4l2.c media updates for v6.1-rc1 2022-10-07 11:04:35 -07:00
adv7604.c media updates for v6.1-rc1 2022-10-07 11:04:35 -07:00
adv7842.c media updates for v6.1-rc1 2022-10-07 11:04:35 -07:00
ak881x.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ak7375.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
aptina-pll.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
aptina-pll.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
ar0521.c media fixes for v6.1-rc2 2022-10-22 15:30:15 -07:00
bt819.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
bt856.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
bt866.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ccs-pll.c Linux 5.11-rc6 2021-02-01 10:03:45 +01:00
ccs-pll.h media: ccs-pll: Switch from standard integer types to kernel ones 2021-01-12 17:55:28 +01:00
cs53l32a.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
cs3308.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
cs5345.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
dw9714.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
dw9768.c dw9768: Enable low-power probe on ACPI 2022-12-31 13:32:05 +01:00
dw9807-vcm.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
hi556.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
hi846.c media: i2c: hi846: Fix memory leak in hi846_parse_dt() 2022-12-31 13:32:04 +01:00
hi847.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx208.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx214.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx219.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx258.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx274.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx290.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx319.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx334.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx335.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx355.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
imx412.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ir-kbd-i2c.c media fixes for v6.1-rc2 2022-10-22 15:30:15 -07:00
isl7998x.c media fixes for v6.1-rc2 2022-10-22 15:30:15 -07:00
Kconfig media: ar0521: fix Kconfig: VIDEO_V4L2 -> VIDEO_DEV 2022-07-15 15:20:16 +01:00
ks0127.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ks0127.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
lm3560.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
lm3646.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
m52790.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
Makefile media: On Semi AR0521 sensor driver 2022-07-08 16:03:20 +01:00
max2175.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
max2175.h media: i2c: Use the correct style for SPDX License Identifier 2019-11-10 17:47:14 +01:00
max9271.c media: i2c: max9271: Introduce wake_up() function 2021-06-17 11:30:21 +02:00
max9271.h media: i2c: max9271: Introduce wake_up() function 2021-06-17 11:30:21 +02:00
max9286.c media: max9286: Fix memleak in max9286_v4l2_register() 2023-03-10 09:33:41 +01:00
ml86v7667.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
msp3400-driver.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
msp3400-driver.h media: msp3400: declare its own pads 2018-09-17 13:16:19 -04:00
msp3400-kthreads.c media: msp3400: use semicolons rather than commas to separate statements 2020-11-16 10:31:07 +01:00
mt9m001.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9m032.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9m111.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9p031.c media: mt9p031: Drop bogus v4l2_subdev_get_try_crop() call from mt9p031_init_cfg() 2022-12-31 13:32:16 +01:00
mt9t001.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9t112.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9v011.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9v032.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
mt9v111.c media fixes for v6.1-rc2 2022-10-22 15:30:15 -07:00
noon010pc30.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
og01a1b.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov02a10.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov08d10.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov13b10.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov772x.c media: i2c: ov772x: Fix memleak in ov772x_probe() 2023-03-10 09:33:42 +01:00
ov2640.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov2659.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov2680.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov2685.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov2740.c media: ov2740: Fix memleak in ov2740_init_controls() 2023-03-10 09:33:41 +01:00
ov5640.c media: ov5640: Handle delays when no reset_gpio set 2023-03-10 09:33:42 +01:00
ov5645.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov5647.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov5648.c media: i2c: ov5648: Free V4L2 fwnode data on unbind 2022-12-31 13:32:04 +01:00
ov5670.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov5675.c media: ov5675: Fix memleak in ov5675_init_controls() 2023-03-10 09:33:42 +01:00
ov5693.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov5695.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov6650.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov7251.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov7640.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov7670.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov7740.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov8856.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov8865.c media fixes for v6.1-rc2 2022-10-22 15:30:15 -07:00
ov9282.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov9640.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov9640.h media: ov9640: Use the generic clock framework 2021-02-06 09:38:05 +01:00
ov9650.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov9734.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ov13858.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
rdacm20.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
rdacm21.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
rj54n1cb0c.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
s5k4ecgx.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
s5k5baf.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
s5k6a3.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
s5k6aa.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa711x_regs.h media: i2c: Use the correct style for SPDX License Identifier 2019-11-10 17:47:14 +01:00
saa717x.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa6588.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa6752hs.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa7110.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa7115.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa7127.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
saa7185.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
sony-btf-mpx.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
sr030pc30.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
st-mipid02.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tc358743_regs.h
tc358743.c media updates for v6.1-rc1 2022-10-07 11:04:35 -07:00
tda1997x_regs.h media: TDA1997x: replace video detection routine 2021-10-19 08:08:38 +01:00
tda1997x.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tda7432.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tda9840.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tea6415c.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tea6415c.h
tea6420.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tea6420.h
ths7303.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
ths8200_regs.h
ths8200.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tlv320aic23b.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tvaudio.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tvp514x_regs.h media: media/i2c: fix kerneldoc issues for media i2c headers 2021-03-22 10:23:43 +01:00
tvp514x.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tvp5150_reg.h media: i2c: Use the correct style for SPDX License Identifier 2019-11-10 17:47:14 +01:00
tvp5150.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tvp7002_reg.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
tvp7002.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tw2804.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tw9903.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tw9906.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
tw9910.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
uda1342.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
upd64031a.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
upd64083.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
video-i2c.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
vp27smpx.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
vpx3220.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
vs6624_regs.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174 2019-05-30 11:26:41 -07:00
vs6624.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
wm8739.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
wm8775.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00