i2c_adapter_lookup() acquires a reference on the i2c adapter through i2c_acpi_find_adapter_by_handle() but not releases it. Each invocation of this ACPI resource callback leaks one device reference, potentially leading to resource exhaustion over repeated driver load/unload cycles.
Calling path: i2c_acpi_find_adapter_by_handle() -> bus_find_device() -> get_device. Found by code review. Signed-off-by: Ma Ke <[email protected]> Cc: [email protected] Fixes: 8cbf89db2941 ("drm/i915/dsi: Parse the I2C element from the VBT MIPI sequence block (v3)") --- drivers/gpu/drm/i915/display/intel_dsi_vbt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c index fe12041e913c..2097c5d17cb7 100644 --- a/drivers/gpu/drm/i915/display/intel_dsi_vbt.c +++ b/drivers/gpu/drm/i915/display/intel_dsi_vbt.c @@ -460,8 +460,10 @@ static int i2c_adapter_lookup(struct acpi_resource *ares, void *data) return 1; adapter = i2c_acpi_find_adapter_by_handle(adapter_handle); - if (adapter) + if (adapter) { intel_dsi->i2c_bus_num = adapter->nr; + put_device(&adapter->dev); + } return 1; } -- 2.43.0
