summaryrefslogtreecommitdiff
path: root/tools/lib/python
diff options
context:
space:
mode:
authorMa Ke <make_ruc2021@163.com>2026-10-12 09:34:21 +0800
committerAndi Shyti <andi.shyti@linux.intel.com>2026-10-22 21:22:14 +0200
commita65917d0a22f9b10694853b725f9cd399fc3ef4d (patch)
tree7db198633ad199c149f4f66ec7bf2c33f2ca2d96 /tools/lib/python
parent02d9f7b8324d3a09b01c9a4c0ab0e6846e6691dc (diff)
i2c: acpi: Fix adapter reference leak in i2c_acpi_new_device_by_fwnode()
i2c_acpi_new_device_by_fwnode() obtains an i2c_adapter through i2c_acpi_find_adapter_by_handle(). That helper uses bus_find_device() internally, so it returns the adapter with a reference held: adapter = i2c_verify_adapter(dev); if (!adapter) put_device(dev); return adapter; The reference is only put on the failure path inside that helper. The caller owns it otherwise. i2c_acpi_new_device_by_fwnode() never drops it, neither on the -EPROBE_DEFER path nor after i2c_new_client_device(), so every call leaks one reference on the adapter and the adapter can never be released. i2c_new_client_device() does not consume that reference. It registers the new client with the adapter as its parent, and device_add() takes its own reference on the parent, which device_del() releases when the client goes away. The reference obtained by the lookup is a separate one and has to be dropped here. i2c_acpi_notify() in the same file already does exactly this. It takes the adapter from the same helper, registers the client through i2c_acpi_register_device(), which calls i2c_new_client_device(), and then puts the reference. i2c_new_client_device() gives the client its own reference on the adapter, so ours can be dropped unconditionally. Found by code review. Fixes: 605f8fc22442 ("i2c: core: Add new i2c_acpi_new_device helper function") Signed-off-by: Ma Ke <make_ruc2021@163.com> Cc: <stable@vger.kernel.org> # v4.12+ Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Link: https://patch.msgid.link/20261012013421.3597430-1-make_ruc2021@163.com
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions