linux/drivers/i2c
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
..
algos i2c: algo: bit: Allow to skip bit test 2026-07-29 20:51:16 +02:00
busses i2c: qcom-cci: fix device_node refcount leak in cci_probe()/cci_remove() 2026-09-20 09:40:29 +02:00
muxes i2c: mux: demux-pinctrl: fix OF node leak on kstrdup failure 2026-08-19 21:55:53 +02:00
i2c-atr.c i2c: atr: fix dangling adapter pointer on add failure 2026-09-16 07:30:36 +02:00
i2c-boardinfo.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-core-acpi.c i2c for v7.3 2026-08-19 09:23:13 -07:00
i2c-core-base.c i2c: core: fix debugfs UAF on adapter removal 2026-08-28 03:12:01 +02:00
i2c-core-of-prober.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
i2c-core-of.c Revert "treewide: Fix probing of devices in DT overlays" 2026-05-22 13:33:58 +02:00
i2c-core-slave.c i2c: Use trace_call__##name() at guarded tracepoint call sites 2026-03-26 10:24:39 -04:00
i2c-core-smbus.c i2c: smbus: fix a potential uninitialization bug 2026-05-19 12:43:08 +02:00
i2c-core.h i2c: Let i2c-core.h include <linux/i2c.h> 2026-07-03 07:38:15 +02:00
i2c-dev.c i2c: dev: prevent integer overflow in I2C_TIMEOUT ioctl 2026-05-04 11:31:35 +02:00
i2c-mux.c i2c: mux: Fix channel node leak on adapter add failure 2026-08-26 15:39:36 +02:00
i2c-slave-eeprom.c i2c: Use named initializers for arrays of i2c_device_data 2026-06-05 01:09:25 +02:00
i2c-slave-testunit.c i2c for v7.2 2026-06-16 07:43:29 +05:30
i2c-smbus.c i2c: Use named initializers for arrays of i2c_device_data 2026-06-05 01:09:25 +02:00
i2c-stub.c i2c: stub: Reject I2C block transfers with invalid length 2026-05-04 13:23:53 +02:00
Kconfig i2c: Remove I2C_COMPAT config symbol and related code 2024-09-07 18:31:28 +02:00
Makefile i2c: Introduce OF component probe function 2024-11-27 12:04:10 +01:00