From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794064135; b=tcYzTcGe9FkJvo13yPYzKnlRHadcA4w+yJEVnvZldQuCGvSXktDTooQ9MyejeuKqKF9N advMV5SVo3NREVwZWEgHm+a1hzdmMPhAVEjo3nixeum3hEkjFOFiLqCfMnUTewEyKkq6M Qijd6lrZ7BtplelXKST0I7Uc9hTB0zjJOZKlOPiHoje31HljnMxKd4ceXCju9pE43fNv7 6zpXU0W8jLJAU6x9YVxMTD+srmgHoBvaxJyIMjt0XGqw9adHwieOTeujS5KJuFs/CuDNE 49g5F6226F3wDhHHQyIr8YUS5Hhuv9QxWj4vQeYN9ShohZ4HnH1mAldqbzKh9zwNXZg== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794064135; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=+BZV8i8KP8KFQz700xS/okfk+Tg2ZtEEGqlzGvV4P6Y=; b=mgzvUQ+IdHbHG0eCRy7w5KF8IW8SCIsDoLyxj769eURZM1TEOwMcA3M+N59h+lbj+cEE 9cayrDzwA8CWk7SfJ+SmjQHBzeOZV2pS1AzcPGIgTIM/2JkMxEryezmzapKV08GnQxVs9 0eh8ohG4mkyxwsU9vrJwOcK1hkPsBHB6FaNAYznpnCaStJOD8PI4Q1UTYyQwB3D5rlMTS gXWyQwKwj1l+u2c+PgUdQrZZKA027ev5O/bMpnsgVMMdtUqM4Vct821d3OjVD2Lc0bblp EIxLuEqZANIgviFSJdiGxvSN92msH+QjBtlQDbbXcOiX09SQ2n7OA3o5GFyZGPcaZgA== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=xJOY7Owm; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 65FA7606A33F; Sat, 7 Nov 2026 15:08:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=xJOY7Owm Received: by smtp.kernel.org (Postfix) with ESMTPSA id 161A01F0089F; Sat, 7 Nov 2026 15:08:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794064135; bh=+BZV8i8KP8KFQz700xS/okfk+Tg2ZtEEGqlzGvV4P6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=xJOY7OwmfroE2kkbWtxjL20PjQxjpxaELYmuccc/TawuyxF4BTJHW3Vty2YXUsjao Sr1umbPVXwMB6LKlltvEELWrujPJPTAKmWFlodNQ6DrcTNDLv0JjGZd65JV9nm8Ua/ 638LiVpL3nCQB+IDwEXnXc9Iu1If/8d1ibFi3ebw= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ijae Kim , Myeonghun Pak , Lee Jones , Sasha Levin Subject: [PATCH 7.3 0286/1257] mfd: twl-core: Unregister the auxiliary platform device on unbind Date: Sat, 7 Nov 2026 08:43:02 -0500 Message-ID: <20261107134947.372792740@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261107134939.434104957@linuxfoundation.org> References: <20261107134939.434104957@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 7.3-stable review patch. If anyone has any objections, please let me know. ------------------ From: Myeonghun Pak [ Upstream commit 3c5c55d979ddcb0765ce531bc7ba173c87c8712a ] twl_probe() registers a standalone platform device named "twl", but keeps its pointer only in a local variable. Probe errors unregister the device, while successful probe leaves no way for twl_remove() to release it. The platform device therefore remains registered after the I2C driver unbinds. Register a managed action on the I2C device immediately after adding the platform device. This unregisters it on probe failure and driver unbind, and also handles failure to register the action itself. Remove the manual error-path unregister to avoid releasing the device twice. This issue was identified during our ongoing static-analysis research while reviewing kernel code. Fixes: defa6be1c821 ("mfd: Fix compile for twl-core.c by removing cpu_is_omap usage") Cc: stable@vger.kernel.org Assisted-by: OpenAI:GPT-5.6 Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak Link: https://patch.msgid.link/20260913205013.54777-1-mhun512@gmail.com Signed-off-by: Lee Jones Signed-off-by: Sasha Levin --- drivers/mfd/twl-core.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c index c024a28b057e3..128cd3f6c60c4 100644 --- a/drivers/mfd/twl-core.c +++ b/drivers/mfd/twl-core.c @@ -719,6 +719,11 @@ static const struct mfd_cell twl6032_cells[] = { { .name = "twl6032-clk" }, }; +static void twl_unregister_device(void *data) +{ + platform_device_unregister(data); +} + /* NOTE: This driver only handles a single twl4030/tps659x0 chip */ static int twl_probe(struct i2c_client *client) @@ -754,17 +759,22 @@ twl_probe(struct i2c_client *client) return status; } + status = devm_add_action_or_reset(&client->dev, twl_unregister_device, + pdev); + if (status) + return status; + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { dev_dbg(&client->dev, "can't talk I2C?\n"); status = -EIO; - goto free; + goto out; } twl_priv = devm_kzalloc(&client->dev, sizeof(struct twl_private), GFP_KERNEL); if (!twl_priv) { status = -ENOMEM; - goto free; + goto out; } if ((id->driver_data) & TWL6030_CLASS) { @@ -784,7 +794,7 @@ twl_probe(struct i2c_client *client) GFP_KERNEL); if (!twl_priv->twl_modules) { status = -ENOMEM; - goto free; + goto out; } for (i = 0; i < num_slaves; i++) { @@ -880,7 +890,7 @@ twl_probe(struct i2c_client *client) status = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, cells, num_cells, NULL, 0, NULL); if (status < 0) - goto free; + goto out; if (of_device_is_system_power_controller(node)) { if (!pm_power_off) @@ -896,10 +906,7 @@ twl_probe(struct i2c_client *client) fail: if (status < 0) twl_remove(client); -free: - if (status < 0) - platform_device_unregister(pdev); - +out: return status; } -- 2.53.0