linux/drivers/i2c/busses
Liu Zhenlong 7362a1553e
i2c: qcom-cci: fix device_node refcount leak in cci_probe()/cci_remove()
The of_node_put() matching of_node_get() runs after i2c_del_adapter(),
whose trailing memset() zeroes adap->dev and thus adap->dev.of_node,
making the put a no-op and leaking the node on every adapter removal
and error cleanup.

Use a devm action: the pointer is captured at registration, out of
reach of that memset(), and devres runs the put once on probe failure
and detach, replacing the three manual of_node_put() calls.  The
setup loop uses the scoped iterator form so the child node is released
automatically if devm_add_action_or_reset() fails mid-loop.

Suggested-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Fixes: 02a4a69667 ("i2c: qcom-cci: don't put a device tree node before i2c_add_adapter()")
Assisted-by: Claude:claude-opus-5
Signed-off-by: Liu Zhenlong <dragonliu2018@gmail.com>
Cc: <stable@vger.kernel.org> # v5.17+
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://patch.msgid.link/20260818175750.4205-1-dragonliu2018@gmail.com
2026-09-20 09:40:29 +02:00
..
i2c-acorn.c
i2c-ali15x3.c i2c: ali15x3: Fix an error handling path in ali15x3_probe() 2025-03-12 12:24:52 +01:00
i2c-ali1535.c i2c: ali1535: Fix an error handling path in ali1535_probe() 2025-03-12 12:24:52 +01:00
i2c-ali1563.c i2c: add missing MODULE_DESCRIPTION() macros 2024-07-09 00:46:06 +02:00
i2c-altera.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-amd-asf-plat.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-amd-mp2-pci.c i2c: amd-mp2: clean up amd_mp2_find_device() 2026-01-16 13:45:05 +01:00
i2c-amd-mp2-plat.c i2c: amd-mp2: Unregister callback on adapter add failure 2026-07-27 22:52:34 +02:00
i2c-amd-mp2.h i2c: Remove redundant pm_runtime_mark_last_busy() calls 2025-10-14 13:51:07 +02:00
i2c-amd756.c i2c: amd756: Remove superfluous TODO 2025-01-14 11:09:47 +01:00
i2c-amd8111.c i2c: amd8111: switch to devm_ functions 2026-02-07 01:20:04 +01:00
i2c-aspeed.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-at91-core.c i2c: at91: release DMA channels on remove and probe error 2026-09-20 09:40:28 +02:00
i2c-at91-master.c i2c: at91: release DMA channels on remove and probe error 2026-09-20 09:40:28 +02:00
i2c-at91-slave.c i2c: at91: Fix the functionality flags of the slave-only interface 2024-06-12 17:07:33 +01:00
i2c-at91.h i2c: at91: release DMA channels on remove and probe error 2026-09-20 09:40:28 +02:00
i2c-au1550.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-axxia.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-bcm-iproc.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-bcm-kona.c i2c: bcm-kona: fix spelling mistake in timeout-check comment 2026-06-09 08:40:21 +02:00
i2c-bcm2835.c i2c: busses: bcm2835: convert from round_rate() to determine_rate() 2025-10-27 14:17:14 +01:00
i2c-brcmstb.c i2c: brcmstb: Use i2c_10bit_addr_*_from_msg() helpers 2025-03-18 21:53:54 +01:00
i2c-cadence.c i2c: cadence: Add shutdown handler 2026-06-09 08:30:47 +02:00
i2c-cbus-gpio.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-ccgx-ucsi.c i2c: add missing MODULE_DESCRIPTION() macros 2024-07-09 00:46:06 +02:00
i2c-ccgx-ucsi.h i2c: Introduce common module to instantiate CCGx UCSI 2022-02-15 10:04:53 +01:00
i2c-cgbc.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-cht-wc.c i2c: Switch to irq_domain_create_linear() 2025-05-16 21:06:09 +02:00
i2c-cp2615.c i2c-for-7.1-rc1-part1 2026-04-18 09:44:22 -07:00
i2c-cpm.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-cros-ec-tunnel.c i2c: cros-ec-tunnel: defer probe if parent EC is not present 2025-04-13 21:33:44 +02:00
i2c-davinci.c i2c: davinci: Use generic definitions for bus frequencies 2026-07-01 10:50:29 +02:00
i2c-designware-amdisp.c i2c: designware: amdisp: Fix resume-probe race condition issue 2026-03-27 13:51:21 +01:00
i2c-designware-amdpsp.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-designware-baytrail.c i2c: designware: Add AMD PSP I2C bus support 2022-02-11 15:38:23 +01:00
i2c-designware-common.c i2c: designware: Global register definitions 2026-08-27 12:00:16 -04:00
i2c-designware-core.h i2c: designware: Global register definitions 2026-08-27 12:00:16 -04:00
i2c-designware-master.c i2c: designware: Global register definitions 2026-08-27 12:00:16 -04:00
i2c-designware-pcidrv.c i2c: designware-pcidrv: Consistently define pci_device_ids using named initializers 2026-06-09 08:44:21 +02:00
i2c-designware-platdrv.c i2c: designware: Enable interrupt mask workaround for HJMC3001 2026-08-28 02:38:00 +02:00
i2c-designware-slave.c i2c: designware: Global register definitions 2026-08-27 12:00:16 -04:00
i2c-digicolor.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-diolan-u2c.c i2c: diolan-u2c: drop redundant device reference 2026-03-09 12:58:56 +01:00
i2c-dln2.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-eg20t.c i2c: eg20t: Consistently define pci_device_ids using named initializers 2026-06-09 08:44:26 +02:00
i2c-elektor.c i2c: Don't let i2c adapters declare I2C_CLASS_SPD support if they support I2C_CLASS_HWMON 2024-01-18 21:10:41 +01:00
i2c-emev2.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-exynos5.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-fsi.c i2c: fsi: Fix a potential leak in fsi_i2c_probe() 2026-03-19 23:45:06 +01:00
i2c-gpio.c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
i2c-gxp.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-highlander.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-hisi.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-hix5hd2.c i2c: Remove redundant pm_runtime_mark_last_busy() calls 2025-10-14 13:51:07 +02:00
i2c-hydra.c
i2c-i801.c i2c: i801: fix hardware state machine corruption in error path 2026-06-23 17:53:08 +02:00
i2c-ibm_iic.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-ibm_iic.h
i2c-icy.c i2c: icy: Use named initializer for zorro_device_id arrays 2026-05-29 00:19:03 +02:00
i2c-img-scb.c i2c: Remove redundant pm_runtime_mark_last_busy() calls 2025-10-14 13:51:07 +02:00
i2c-imx-lpi2c.c i2c: imx-lpi2c: avoid accessing target registers on master-only controllers 2026-08-28 03:00:32 +02:00
i2c-imx.c i2c: imx: release DMA channels on probe error 2026-09-20 09:40:28 +02:00
i2c-iop3xx.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-iop3xx.h
i2c-isch.c i2c: isch: Convert comma to semicolon 2025-01-07 23:46:10 +01:00
i2c-ismt.c i2c: ismt: Use non-hybrid PCI devres API 2025-05-19 22:23:57 +02:00
i2c-jz4780.c i2c: jz4780: Cache host clock rate at probe to prevent CCF prepare_lock deadlock 2026-07-27 22:56:08 +02:00
i2c-k1.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-keba.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-kempld.c i2c: kempld: Use i2c_10bit_addr_*_from_msg() helpers 2025-03-18 21:53:54 +01:00
i2c-ljca.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
i2c-lpc2k.c i2c: lpc2k: Add check for clk_enable() 2025-05-19 22:23:54 +02:00
i2c-ls2x-v2.c i2c: ls2x-v2: return IRQ_HANDLED after servicing an error 2026-06-17 01:19:53 +02:00
i2c-ls2x.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-mchp-pci1xxxx.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-meson.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-microchip-corei2c.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-mlxbf.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-mlxcpld.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-mpc.c i2c: mpc: Fix timeout calculations 2026-06-23 17:28:25 +02:00
i2c-mt65xx.c i2c: mediatek: fix WRRD for SoCs without auto_restart option 2026-07-15 00:21:51 +02:00
i2c-mt7621.c i2c: mt7621: Use i2c_10bit_addr_*_from_msg() helpers 2025-03-18 21:53:54 +01:00
i2c-mv64xxx.c i2c: Remove redundant pm_runtime_mark_last_busy() calls 2025-10-14 13:51:07 +02:00
i2c-mxs.c i2c: mxs: fix DMA channel leak on probe error 2026-08-19 21:55:53 +02:00
i2c-nct6694.c i2c: Add Nuvoton NCT6694 I2C support 2025-09-16 14:41:57 +01:00
i2c-nforce2.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-nomadik.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-npcm7xx.c i2c: npcm7xx: Use NULL instead of 0 for pointer 2026-03-20 00:12:10 +01:00
i2c-nvidia-gpu.c i2c: Remove redundant pm_runtime_mark_last_busy() calls 2025-10-14 13:51:07 +02:00
i2c-ocores.c i2c: ocores: Disable clock on failed resume 2026-08-19 21:55:52 +02:00
i2c-octeon-core.c i2c: octeon: add block-mode i2c operations 2025-05-19 22:23:55 +02:00
i2c-octeon-core.h i2c: octeon-core: Use generic definitions for bus frequencies 2026-07-01 10:50:30 +02:00
i2c-octeon-platdrv.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-omap.c i2c: omap: switch to new generic helper for getting selected mux-state 2026-03-09 13:44:45 +01:00
i2c-opal.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-owl.c i2c: owl: reword according to newest specification 2024-07-11 15:14:17 +02:00
i2c-parport.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-pasemi-core.c i2c: pasemi: Log bus reset causes 2025-05-19 22:23:57 +02:00
i2c-pasemi-core.h i2c: /pasemi: PASemi I2C controller IRQ enablement 2022-11-12 21:30:16 +01:00
i2c-pasemi-pci.c i2c: pasemi: Sort includes alphabetically 2025-05-19 22:23:55 +02:00
i2c-pasemi-platform.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-pca-isa.c i2c: rename wait_for_completion callback to wait_for_completion_cb 2025-10-04 18:52:58 +02:00
i2c-pca-platform.c i2c: rename wait_for_completion callback to wait_for_completion_cb 2025-10-04 18:52:58 +02:00
i2c-piix4.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-piix4.h i2c: piix4: Export i2c_piix4 driver functions as library 2024-11-13 23:29:46 +01:00
i2c-pnx.c i2c: pnx: Use generic definitions for bus frequencies 2026-07-01 10:50:28 +02:00
i2c-powermac.c i2c: powermac: convert of_node usage to fwnode 2025-05-20 22:49:21 +02:00
i2c-pxa-pci.c i2c: pxa-pci: use platform_device_set_of_node() 2026-07-10 16:07:09 +02:00
i2c-pxa.c i2c: pxa: Use named initializers for the platform_device_id array 2026-06-18 12:08:49 +02:00
i2c-qcom-cci.c i2c: qcom-cci: fix device_node refcount leak in cci_probe()/cci_remove() 2026-09-20 09:40:29 +02:00
i2c-qcom-geni.c i2c: qcom-geni: release DMA channels on probe error 2026-09-20 09:40:29 +02:00
i2c-qup.c i2c: qup: Propagate clock enable failures 2026-07-28 23:39:07 +02:00
i2c-rcar.c i2c: rcar: fix reset handling for Gen5 2026-08-19 22:07:13 +02:00
i2c-riic.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-rk3x.c i2c: rk3x: Use HZ_PER_GHZ constant instead of plain number 2026-01-13 18:34:33 +01:00
i2c-robotfuzz-osif.c i2c: robotfuzz-osif: drop redundant device reference 2026-03-09 12:54:03 +01:00
i2c-rtl9300.c Replace <linux/mod_devicetable.h> by more specific <linux/device-id/*.h> (c files) 2026-07-03 07:38:17 +02:00
i2c-rzv2m.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-s3c2410.c i2c: s3c24xx: check the size of the SMBUS message before using it 2026-03-25 18:13:39 +01:00
i2c-scmi.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-sh_mobile.c i2c: use inclusive callbacks in struct i2c_algorithm 2025-06-12 10:05:31 +02:00
i2c-sh7760.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-sibyte.c i2c: Don't let i2c adapters declare I2C_CLASS_SPD support if they support I2C_CLASS_HWMON 2024-01-18 21:10:41 +01:00
i2c-simtec.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-sis96x.c i2c: sis96x: Replace dev_err() with dev_err_probe() in probe function 2026-05-29 00:05:06 +02:00
i2c-sis630.c i2c: sis630: Replace dev_err() with dev_err_probe() in probe function 2026-05-29 00:05:10 +02:00
i2c-sis5595.c i2c: sis5595: reword according to newest specification 2024-07-11 15:14:20 +02:00
i2c-sprd.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-st.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-stm32.c i2c: stm32: Replace dev_err() with dev_err_probe() in probe function 2026-05-29 00:04:57 +02:00
i2c-stm32.h
i2c-stm32f4.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-stm32f7.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-sun6i-p2wi.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-synquacer.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-taos-evm.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-tegra-bpmp.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-tegra.c i2c for v7.2 2026-06-16 07:43:29 +05:30
i2c-thunderx-pcidrv.c i2c: thunderx: Use non-hybrid PCI devres API 2025-05-19 22:23:57 +02:00
i2c-tiny-usb.c i2c: tiny-usb: Replace dev_err() with dev_err_probe() in probe function 2026-05-28 23:26:43 +02:00
i2c-uniphier-f.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-uniphier.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-usbio.c i2c: usbio: Add ACPI device-id for NVL platforms 2026-04-10 23:08:42 +02:00
i2c-versatile.c i2c: Switch back to struct platform_driver::remove() 2024-11-17 11:58:14 +01:00
i2c-via.c i2c: via: Replace dev_err() with dev_err_probe() in probe function 2025-05-19 22:23:55 +02:00
i2c-viai2c-common.c i2c: viai2c: reword according to newest specification 2024-07-11 15:14:24 +02:00
i2c-viai2c-common.h i2c: viai2c: turn common code into a proper module 2024-06-26 16:07:21 +02:00
i2c-viai2c-wmt.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-viai2c-zhaoxin.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
i2c-viapro.c i2c: viapro: Replace dev_err() with dev_err_probe() in probe function 2025-05-19 22:23:55 +02:00
i2c-viperboard.c i2c: busses: Fix some spelling errors 2025-09-25 23:49:08 +02:00
i2c-virtio.c i2c: virtio: mark device ready before registering the adapter 2026-05-30 15:56:07 +02:00
i2c-xgene-slimpro.c i2c: xgene-slimpro: Replace dev_err() with dev_err_probe() in probe function 2025-05-23 10:02:27 +02:00
i2c-xiic.c i2c: xiic: skip input clock setup on non-OF systems 2026-04-02 01:28:03 +02:00
i2c-xlp9xx.c i2c: busses: drop redundant dev_err_probe() around irq helpers 2026-08-19 21:55:51 +02:00
Kconfig i2c: spacemit: configure ILCR/IWCR for accurate SCL frequency 2026-07-01 10:50:18 +02:00
Makefile i2c: ls2x-v2: Add driver for Loongson-2K0300 I2C controller 2026-04-27 12:35:35 +02:00
scx200_acb.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00