Unverified Commit 29be646f authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Ilpo Järvinen
Browse files

platform: arm64: thinkpad-t14s-ec: fix IRQ race condition



Fix a race condition, that an input key related interrupt might be
triggered before the input handler has been registered, which results
in a NULL pointer dereference. This can happen if the user enables
the keyboard backlight shortly before the driver is being probed.

This fixes the following backtrace visible in dmesg:

Unable to handle kernel NULL pointer dereference at virtual address 00000000000000e0
...
Call trace:
 sparse_keymap_report_event+0x2c/0x978 [sparse_keymap] (P)
 t14s_ec_irq_handler+0x190/0x3e8 [lenovo_thinkpad_t14s]
 irq_thread_fn+0x30/0xb8
 irq_thread+0x18c/0x3b0
 kthread+0x148/0x228
 ret_from_fork+0x10/0x20

Fixes: 60b7ab6c ("platform: arm64: thinkpad-t14s-ec: new driver")
Signed-off-by: default avatarSebastian Reichel <sre@kernel.org>
Reviewed-by: default avatarBryan O'Donoghue <bod@kernel.org>
Link: https://patch.msgid.link/20251119-thinkpad-t14s-ec-improvements-v2-1-441219857c02@kernel.org


Reviewed-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: default avatarIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
parent db302333
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -557,12 +557,6 @@ static int t14s_ec_probe(struct i2c_client *client)
		return dev_err_probe(dev, PTR_ERR(ec->regmap),
				     "Failed to init regmap\n");

	ret = devm_request_threaded_irq(dev, client->irq, NULL,
					t14s_ec_irq_handler,
					IRQF_ONESHOT, dev_name(dev), ec);
	if (ret < 0)
		return dev_err_probe(dev, ret, "Failed to get IRQ\n");

	ret = t14s_leds_probe(ec);
	if (ret < 0)
		return ret;
@@ -579,6 +573,12 @@ static int t14s_ec_probe(struct i2c_client *client)
	if (ret < 0)
		return ret;

	ret = devm_request_threaded_irq(dev, client->irq, NULL,
					t14s_ec_irq_handler,
					IRQF_ONESHOT, dev_name(dev), ec);
	if (ret < 0)
		return dev_err_probe(dev, ret, "Failed to get IRQ\n");

	/*
	 * Disable wakeup support by default, because the driver currently does
	 * not support masking any events and the laptop should not wake up when