[media] soc-camera: Fix devm_kfree() in soc_of_bind()
Unlike scan_async_group(), soc_of_bind() doesn't allocate its
soc_camera_async_client structure using devm_kzalloc(), but has it
embedded inside the soc_of_info structure. Hence on failure, it must
free the whole soc_of_info structure, and not just the embedded
soc_camera_async_client structure, as the latter causes a warning, and
may cause slab corruption:
soc-camera-pdrv soc-camera-pdrv.0: Probing soc-camera-pdrv.0
------------[ cut here ]------------
WARNING: CPU: 0 PID: 1 at drivers/base/devres.c:887 devm_kfree+0x30/0x40()
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.19.0-shmobile-08386-g37feb0d093cb2d8e #128
Hardware name: Generic R8A7791 (Flattened Device Tree)
Backtrace:
[<
c0011e7c>] (dump_backtrace) from [<
c0012024>] (show_stack+0x18/0x1c)
r6:
c05a923b r5:
00000009 r4:
00000000 r3:
00204140
[<
c001200c>] (show_stack) from [<
c048ed30>] (dump_stack+0x78/0x94)
[<
c048ecb8>] (dump_stack) from [<
c002687c>] (warn_slowpath_common+0x8c/0xb8)
r4:
00000000 r3:
00000000
[<
c00267f0>] (warn_slowpath_common) from [<
c0026980>] (warn_slowpath_null+0x24/0x2c)
r8:
ee7d8214 r7:
ed83b810 r6:
ed83bc20 r5:
fffffffa r4:
ed83e510
[<
c002695c>] (warn_slowpath_null) from [<
c025e0cc>] (devm_kfree+0x30/0x40)
[<
c025e09c>] (devm_kfree) from [<
c032bbf4>] (soc_of_bind.isra.14+0x194/0x1d4)
[<
c032ba60>] (soc_of_bind.isra.14) from [<
c032c6b8>] (soc_camera_host_register+0x208/0x31c)
r9:
00000070 r8:
ee7e05d0 r7:
ee153210 r6:
00000000 r5:
ee7e0218 r4:
ed83bc20
[<
c032c4b0>] (soc_camera_host_register) from [<
c032e80c>] (rcar_vin_probe+0x1f4/0x238)
r8:
ee153200 r7:
00000008 r6:
ee153210 r5:
ed83bc10 r4:
c066319c r3:
000000c0
[<
c032e618>] (rcar_vin_probe) from [<
c025c334>] (platform_drv_probe+0x50/0xa0)
r10:
00000000 r9:
c0662fa8 r8:
00000000 r7:
c06a3700 r6:
c0662fa8 r5:
ee153210
r4:
00000000
[<
c025c2e4>] (platform_drv_probe) from [<
c025af08>] (driver_probe_device+0xc4/0x208)
r6:
c06a36f4 r5:
00000000 r4:
ee153210 r3:
c025c2e4
[<
c025ae44>] (driver_probe_device) from [<
c025b108>] (__driver_attach+0x70/0x94)
r9:
c066f9c0 r8:
c0624a98 r7:
c065b790 r6:
c0662fa8 r5:
ee153244 r4:
ee153210
[<
c025b098>] (__driver_attach) from [<
c025984c>] (bus_for_each_dev+0x74/0x98)
r6:
c025b098 r5:
c0662fa8 r4:
00000000 r3:
00000001
[<
c02597d8>] (bus_for_each_dev) from [<
c025b1dc>] (driver_attach+0x20/0x28)
r6:
ed83c200 r5:
00000000 r4:
c0662fa8
[<
c025b1bc>] (driver_attach) from [<
c025a00c>] (bus_add_driver+0xdc/0x1c4)
[<
c0259f30>] (bus_add_driver) from [<
c025b8f4>] (driver_register+0xa4/0xe8)
r7:
c0624a98 r6:
00000000 r5:
c060b010 r4:
c0662fa8
[<
c025b850>] (driver_register) from [<
c025ccd0>] (__platform_driver_register+0x50/0x64)
r5:
c060b010 r4:
ed8394c0
[<
c025cc80>] (__platform_driver_register) from [<
c060b028>] (rcar_vin_driver_init+0x18/0x20)
[<
c060b010>] (rcar_vin_driver_init) from [<
c05edde8>] (do_one_initcall+0x108/0x1b8)
[<
c05edce0>] (do_one_initcall) from [<
c05edfb4>] (kernel_init_freeable+0x11c/0x1e4)
r9:
c066f9c0 r8:
c066f9c0 r7:
c062eab0 r6:
c06252c4 r5:
000000ad r4:
00000006
[<
c05ede98>] (kernel_init_freeable) from [<
c048c3d0>] (kernel_init+0x10/0xec)
r9:
00000000 r8:
00000000 r7:
00000000 r6:
00000000 r5:
c048c3c0 r4:
00000000
[<
c048c3c0>] (kernel_init) from [<
c000eba0>] (ret_from_fork+0x14/0x34)
r4:
00000000 r3:
ee04e000
---[ end trace
e3a984cc0335c8a0 ]---
rcar_vin
e6ef1000.video: group probe failed: -6
Fixes:
1ddc6a6caa94e1e1 ("[media] soc_camera: add support for dt binding soc_camera drivers")
Cc: <stable@vger.kernel.org> # 3.17+
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>