From: "Жамбакиев Радий Рикардинович" <r.zhambakiev@prosoftsystems.ru>
To: Aaro Koskinen <aaro.koskinen@iki.fi>
Cc: "Жамбакиев Радий Рикардинович" <r.zhambakiev@prosoftsystems.ru>,
"Andreas Kemnade" <andreas@kemnade.info>,
"Kevin Hilman" <khilman@baylibre.com>,
"Roger Quadros" <rogerq@kernel.org>,
"Tony Lindgren" <tony@atomide.com>, "Lee Jones" <lee@kernel.org>,
"Marcin Niestroj" <m.niestroj@grinn-global.com>,
"Grygorii Strashko" <grygorii.strashko@ti.com>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"mfd@lists.linux.dev" <mfd@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"lvc-project@linuxtesting.org" <lvc-project@linuxtesting.org>,
"stable@vger.kernel.org" <stable@vger.kernel.org>
Subject: [PATCH v2 4/4] mfd: tps65217: Fix NULL pointer dereference in remove callback
Date: Fri, 21 Aug 2026 12:37:24 +0000 [thread overview]
Message-ID: <20260821123712.260443-5-r.zhambakiev@prosoftsystems.ru> (raw)
In-Reply-To: <20260821123712.260443-1-r.zhambakiev@prosoftsystems.ru>
When the device is probed without an interrupt, tps65217_irq_init() is
never called and tps->irq_domain remains NULL. The remove callback
still looks up IRQ mappings and calls irq_domain_remove(), which
dereferences the NULL domain and crashes the kernel. The mapping
lookup with a NULL domain falls back to the default IRQ domain and can
dispose mappings belonging to other devices.
Quiesce the parent interrupt before tearing down the domain: the
devres-managed interrupt is only freed after the remove callback
returns, so an interrupt firing in that window would run the threaded
handler with a NULL irq_domain. Also call disable_irq_wake() to balance
the enable_irq_wake() done in tps65217_irq_init().
Fixes: 6556bdacf646fcaa ("mfd: tps65217: Add support for IRQs")
Cc: stable@vger.kernel.org
Signed-off-by: Radiy Zhambakiev <r.zhambakiev@prosoftsystems.ru>
---
drivers/mfd/tps65217.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/mfd/tps65217.c b/drivers/mfd/tps65217.c
index d535d140c2e9..9f4afbaa6524 100644
--- a/drivers/mfd/tps65217.c
+++ b/drivers/mfd/tps65217.c
@@ -403,17 +403,20 @@ static int tps65217_probe(struct i2c_client *client)
static void tps65217_remove(struct i2c_client *client)
{
struct tps65217 *tps = i2c_get_clientdata(client);
- unsigned int virq;
- int i;
- for (i = 0; i < TPS65217_NUM_IRQ; i++) {
- virq = irq_find_mapping(tps->irq_domain, i);
- if (virq)
- irq_dispose_mapping(virq);
- }
+ if (!tps->irq_domain)
+ return;
- irq_domain_remove(tps->irq_domain);
- tps->irq_domain = NULL;
+ /*
+ * The interrupt is only freed by devres after this callback
+ * returns, so make sure no handler can run while the domain
+ * is being torn down.
+ */
+ disable_irq(tps->irq);
+ synchronize_irq(tps->irq);
+ disable_irq_wake(tps->irq);
+
+ tps65217_irq_cleanup(tps);
}
static const struct i2c_device_id tps65217_id_table[] = {
--
2.53.0
prev parent reply other threads:[~2026-08-21 12:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-21 12:37 [PATCH v2 0/4] mfd: tps65217: Handle IRQ initialization errors Жамбакиев Радий Рикардинович
2026-08-21 12:37 ` [PATCH v2 1/4] mfd: tps65217: Fix NULL pointer dereference on IRQ init failure Жамбакиев Радий Рикардинович
2026-08-21 12:37 ` [PATCH v2 2/4] mfd: tps65217: Check return value when masking interrupt sources Жамбакиев Радий Рикардинович
2026-08-21 12:37 ` [PATCH v2 3/4] mfd: tps65217: Fix irq_domain leak and use-after-free on probe failure Жамбакиев Радий Рикардинович
2026-08-21 12:37 ` Жамбакиев Радий Рикардинович [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260821123712.260443-5-r.zhambakiev@prosoftsystems.ru \
--to=r.zhambakiev@prosoftsystems.ru \
--cc=aaro.koskinen@iki.fi \
--cc=andreas@kemnade.info \
--cc=grygorii.strashko@ti.com \
--cc=khilman@baylibre.com \
--cc=lee@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=lvc-project@linuxtesting.org \
--cc=m.niestroj@grinn-global.com \
--cc=mfd@lists.linux.dev \
--cc=rogerq@kernel.org \
--cc=stable@vger.kernel.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox