linux-uconsole/drivers/soc
Timo Alho 67c2be1605 soc/tegra: fuse: Fix illegal free of IO base address
[ Upstream commit 51294bf6b9 ]

On cases where device tree entries for fuse and clock provider are in
different order, fuse driver needs to defer probing. This leads to
freeing incorrect IO base address as the fuse->base variable gets
overwritten once during first probe invocation. This leads to the
following spew during boot:

[    3.082285] Trying to vfree() nonexistent vm area (00000000cfe8fd94)
[    3.082308] WARNING: CPU: 5 PID: 126 at /hdd/l4t/kernel/stable/mm/vmalloc.c:1511 __vunmap+0xcc/0xd8
[    3.082318] Modules linked in:
[    3.082330] CPU: 5 PID: 126 Comm: kworker/5:1 Tainted: G S                4.19.7-tegra-gce119d3 #1
[    3.082340] Hardware name: quill (DT)
[    3.082353] Workqueue: events deferred_probe_work_func
[    3.082364] pstate: 40000005 (nZcv daif -PAN -UAO)
[    3.082372] pc : __vunmap+0xcc/0xd8
[    3.082379] lr : __vunmap+0xcc/0xd8
[    3.082385] sp : ffff00000a1d3b60
[    3.082391] x29: ffff00000a1d3b60 x28: 0000000000000000
[    3.082402] x27: 0000000000000000 x26: ffff000008e8b610
[    3.082413] x25: 0000000000000000 x24: 0000000000000009
[    3.082423] x23: ffff000009221a90 x22: ffff000009f6d000
[    3.082432] x21: 0000000000000000 x20: 0000000000000000
[    3.082442] x19: ffff000009f6d000 x18: ffffffffffffffff
[    3.082452] x17: 0000000000000000 x16: 0000000000000000
[    3.082462] x15: ffff0000091396c8 x14: 0720072007200720
[    3.082471] x13: 0720072007200720 x12: 0720072907340739
[    3.082481] x11: 0764076607380765 x10: 0766076307300730
[    3.082491] x9 : 0730073007300730 x8 : 0730073007280720
[    3.082501] x7 : 0761076507720761 x6 : 0000000000000102
[    3.082510] x5 : 0000000000000000 x4 : 0000000000000000
[    3.082519] x3 : ffffffffffffffff x2 : ffff000009150ff8
[    3.082528] x1 : 3d95b1429fff5200 x0 : 0000000000000000
[    3.082538] Call trace:
[    3.082545]  __vunmap+0xcc/0xd8
[    3.082552]  vunmap+0x24/0x30
[    3.082561]  __iounmap+0x2c/0x38
[    3.082569]  tegra_fuse_probe+0xc8/0x118
[    3.082577]  platform_drv_probe+0x50/0xa0
[    3.082585]  really_probe+0x1b0/0x288
[    3.082593]  driver_probe_device+0x58/0x100
[    3.082601]  __device_attach_driver+0x98/0xf0
[    3.082609]  bus_for_each_drv+0x64/0xc8
[    3.082616]  __device_attach+0xd8/0x130
[    3.082624]  device_initial_probe+0x10/0x18
[    3.082631]  bus_probe_device+0x90/0x98
[    3.082638]  deferred_probe_work_func+0x74/0xb0
[    3.082649]  process_one_work+0x1e0/0x318
[    3.082656]  worker_thread+0x228/0x450
[    3.082664]  kthread+0x128/0x130
[    3.082672]  ret_from_fork+0x10/0x18
[    3.082678] ---[ end trace 0810fe6ba772c1c7 ]---

Fix this by retaining the value of fuse->base until driver has
successfully probed.

Signed-off-by: Timo Alho <talho@nvidia.com>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-04-05 22:33:14 +02:00
..
actions treewide: Use struct_size() for devm_kmalloc() and friends 2018-06-06 11:15:43 -07:00
amlogic amlogic: meson-gx-socinfo: Update soc ids 2018-03-19 16:40:26 -07:00
atmel drivers: soc: atmel: Add basic support for new sama5d2 SiPs 2017-09-17 19:45:59 +02:00
bcm soc: bcm: brcmstb: Don't leak device tree node reference 2019-02-12 19:47:03 +01:00
dove License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
fsl soc: fsl: qbman: avoid race in clearing QMan interrupt 2019-03-13 14:02:33 -07:00
gemini soc: Add SoC driver for Gemini 2018-01-04 17:01:53 +01:00
imx ARM: SoC driver updates 2018-08-23 13:52:46 -07:00
lantiq MIPS: lantiq: gphy: Drop reboot/remove reset asserts 2018-05-24 13:22:56 +01:00
mediatek soc: mediatek: pwrap: add mt6351 driver for mt6797 SoCs 2018-07-16 15:50:17 +02:00
qcom soc: qcom: gsbi: Fix error handling in gsbi_probe() 2019-04-05 22:33:12 +02:00
renesas Second Round of Renesas ARM Based SoC Updates for v4.19 2018-07-21 14:19:37 -07:00
rockchip ARM: SoC driver updates 2018-06-11 18:15:22 -07:00
samsung soc: samsung: pm_domains: Deprecate support for clocks 2018-04-17 17:25:42 +02:00
sunxi soc: sunxi: Add the A13, A23 and H3 system control compatibles 2018-07-19 16:39:12 +02:00
tegra soc/tegra: fuse: Fix illegal free of IO base address 2019-04-05 22:33:14 +02:00
ti soc: ti: QMSS: Fix usage of irq_set_affinity_hint 2018-11-21 09:19:18 +01:00
ux500
versatile soc: versatile: remove unnecessary static in realview_soc_probe() 2017-08-16 22:28:27 +02:00
xilinx soc: xilinx: Fix Kconfig alignment 2018-01-16 15:50:21 +01:00
zte soc: zte: Restrict SOC_ZTE to ARCH_ZX or COMPILE_TEST 2017-07-27 13:12:34 +02:00
Kconfig soc: xilinx: Create folder structure for soc specific drivers 2018-01-08 13:42:39 +01:00
Makefile soc: Unconditionally include qcom Makefile 2018-05-25 15:53:57 -05:00