From: sashiko-bot@kernel.org
To: "Shih-Yuan Lee" <fourdollars@debian.org>
Cc: linux-input@vger.kernel.org, dmitry.torokhov@gmail.com
Subject: Re: [PATCH v4 1/3] Input: applespi - cancel pending work on driver remove
Date: Sat, 11 Jul 2026 12:05:06 +0000 [thread overview]
Message-ID: <20260711120506.7B9651F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260711114937.16670-2-fourdollars@debian.org>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
Pre-existing issues:
- [High] Multiple processing of `PACKET_DEV_INFO` causes the driver to unconditionally allocate and register multiple touchpad devices, leaking previously allocated devm resources.
- [High] Potential use-after-free of `applespi->gpe` in `applespi_async_read_complete()` due to premature driver unbind.
- [High] Dereferencing `applespi->touchpad_input_dev` before it is initialized in `applespi_tp_dim_open`.
--
--- Patch [1]: [PATCH v4 1/3] Input: applespi - cancel pending work on driver remove ---
commit 89c8a3961b949e3c0049b442d0905f82cd245fbd
Author: Shih-Yuan Lee <fourdollars@debian.org>
Input: applespi - cancel pending work on driver remove
This commit fixes a use-after-free vulnerability during driver removal.
It explicitly cancels the pending worker thread that registers the touchpad
device before devres frees the private data structure.
> diff --git a/drivers/input/keyboard/applespi.c b/drivers/input/keyboard/applespi.c
> index b5ff71cd5a701..3bdb9e7cfb8b2 100644
> --- a/drivers/input/keyboard/applespi.c
> +++ b/drivers/input/keyboard/applespi.c
> @@ -1822,6 +1822,8 @@ static void applespi_remove(struct spi_device *spi)
>
> applespi_drain_reads(applespi);
[Severity: High]
This is a pre-existing issue, but can applespi_drain_reads() lead to a
use-after-free of applespi->gpe?
In applespi_remove(), applespi_drain_reads() waits for the read to complete:
static void applespi_drain_reads(struct applespi_data *applespi)
{
...
wait_event_lock_irq(applespi->drain_complete, !applespi->read_active,
applespi->cmd_msg_lock);
...
}
The async read callback signals completion and wakes the waitqueue:
static void applespi_async_read_complete(void *context)
{
...
applespi_msg_complete(applespi, true, true);
...
acpi_finish_gpe(NULL, applespi->gpe);
}
If applespi_remove() unblocks, completes, and triggers devres cleanup
before the read callback finishes, could the callback dereference the freed
applespi->gpe when calling acpi_finish_gpe()?
> + cancel_work_sync(&applespi->work);
> +
> debugfs_remove_recursive(applespi->debugfs_root);
> }
[Severity: High]
This is a pre-existing issue, but does the driver leak devm resources if
multiple info packets are received?
When the driver receives a PACKET_DEV_INFO packet:
applespi_handle_cmd_response()
applespi->rcvd_tp_info = message->tp_info;
schedule_work(&applespi->work);
The worker unconditionally allocates and registers the touchpad device:
applespi_register_touchpad_device()
touchpad_input_dev = devm_input_allocate_device(&applespi->spi->dev);
...
sts = input_register_device(touchpad_input_dev);
...
smp_store_release(&applespi->touchpad_input_dev, touchpad_input_dev);
If a malfunctioning or malicious device sends multiple PACKET_DEV_INFO
messages, does this overwrite applespi->touchpad_input_dev and leak the
previously allocated devm resources and registered input devices?
[Severity: High]
This is a pre-existing issue, but can the debugfs tp_dim file dereference a
NULL pointer?
The touchpad_input_dev is allocated asynchronously by the worker:
applespi_worker()
applespi_register_touchpad_device()
However, the debugfs entry is created synchronously during probe:
applespi_probe()
debugfs_create_file("tp_dim", ...);
If userspace opens the tp_dim file before the worker completes initialization,
applespi_tp_dim_open() will unconditionally dereference the pointer:
applespi_tp_dim_open()
snprintf(applespi->tp_dim_val, sizeof(applespi->tp_dim_val),
"0x%.4x %dx%d+%u+%u\n",
applespi->touchpad_input_dev->id.product,
Could this lead to a kernel panic since applespi->touchpad_input_dev might
still be NULL?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260711114937.16670-1-fourdollars@debian.org?part=1
next prev parent reply other threads:[~2026-07-11 12:05 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-11 5:52 [PATCH 0/1] Input: applespi - force PIO mode on MacBook8,1 Shih-Yuan Lee
2026-07-11 5:52 ` [PATCH 1/1] " Shih-Yuan Lee
2026-07-11 6:00 ` sashiko-bot
2026-07-11 6:54 ` [PATCH v2 0/3] Input: applespi - fixes for DMA timeout, UAF, and NULL pointer dereference Shih-Yuan Lee
2026-07-11 6:54 ` [PATCH v2 1/3] Input: applespi - force PIO mode on MacBook8,1 Shih-Yuan Lee
2026-07-11 7:04 ` sashiko-bot
2026-07-11 6:54 ` [PATCH v2 2/3] Input: applespi - cancel pending work on driver remove Shih-Yuan Lee
2026-07-11 7:09 ` sashiko-bot
2026-07-11 6:54 ` [PATCH v2 3/3] Input: applespi - fix NULL pointer dereference in tp_dim open Shih-Yuan Lee
2026-07-11 7:08 ` sashiko-bot
2026-07-11 11:49 ` [PATCH v4 0/3] Input/SPI: fixes for MacBook8,1 DMA timeout, UAF, and NULL pointer dereference Shih-Yuan Lee
2026-07-11 11:49 ` [PATCH v4 1/3] Input: applespi - cancel pending work on driver remove Shih-Yuan Lee
2026-07-11 12:05 ` sashiko-bot [this message]
2026-07-11 11:49 ` [PATCH v4 2/3] Input: applespi - fix NULL pointer dereference in tp_dim open Shih-Yuan Lee
2026-07-11 12:02 ` sashiko-bot
2026-07-11 11:49 ` [PATCH v4 3/3] spi: pxa2xx: disable DMA for Apple MacBook8,1 Shih-Yuan Lee
2026-07-11 11:58 ` sashiko-bot
2026-07-11 13:11 ` [PATCH v5 0/3] Input/SPI: fixes for MacBook8,1 DMA timeout, UAF, and NULL pointer dereference Shih-Yuan Lee
2026-07-11 13:11 ` [PATCH v5 1/3] Input: applespi - cancel pending work on driver remove Shih-Yuan Lee
2026-07-11 13:26 ` sashiko-bot
2026-07-11 21:55 ` Dmitry Torokhov
2026-07-11 13:11 ` [PATCH v5 2/3] Input: applespi - fix NULL pointer dereference in tp_dim open Shih-Yuan Lee
2026-07-11 13:26 ` sashiko-bot
2026-07-11 13:11 ` [PATCH v5 3/3] spi: pxa2xx: disable DMA for Apple MacBook8,1 Shih-Yuan Lee
2026-07-13 11:36 ` [PATCH v5 0/3] Input/SPI: fixes for MacBook8,1 DMA timeout, UAF, and NULL pointer dereference Mark Brown
2026-07-12 16:05 ` Shih-Yuan Lee
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=20260711120506.7B9651F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=fourdollars@debian.org \
--cc=linux-input@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.