From: sashiko-bot@kernel.org
To: "Rong Zhang" <i@rong.moe>
Cc: linux-leds@vger.kernel.org, lee@kernel.org
Subject: Re: [PATCH v5 08/12] leds: trigger: Do not attach trigger to a removing LED
Date: Fri, 21 Aug 2026 17:27:38 +0000 [thread overview]
Message-ID: <20260821172738.AE6001F00A3E@smtp.kernel.org> (raw)
In-Reply-To: <20260821-leds-trigger-hw-changed-v5-8-3e00d6c4a936@rong.moe>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] The patch attempts to fix a data race on `led_cdev->flags` by wrapping the `LED_UNREGISTERING` update in `trigger_lock`. However, this is an incomplete fix because `flags` is an `int` modified via non-atomic bitwise operations (`|=`, `&= ~`), and other modifiers (such as `led_classdev_suspend` and `led_sysfs_disable`) do not hold `trigger_lock`. A concurrent update from these paths will still cause a data race that can drop the `LED_UNREGISTERING` flag, exposing the same Use-After-Free bug.
- [High] `led_classdev_unregister()` flushes the brightness workqueue before unregistering the sysfs device, creating a race condition where concurrent sysfs writes can queue new work that executes after the LED is freed.
--
--- Patch [8]: [PATCH v5 08/12] leds: trigger: Do not attach trigger to a removing LED ---
commit 9ab2868504159e735891fdf50fc3354c0c88c1c8
Author: Rong Zhang <i@rong.moe>
leds: trigger: Do not attach trigger to a removing LED
This patch attempts to fix a race condition where a trigger may be attached
to a removing LED by setting the LED_UNREGISTERING flag under the
trigger_lock in led_classdev_unregister().
> diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c
> index 2460fcf0c4690..771a6e6c659be 100644
> --- a/drivers/leds/led-class.c
> +++ b/drivers/leds/led-class.c
> @@ -633,12 +633,13 @@ void led_classdev_unregister(struct led_classdev *led_cdev)
>
> #ifdef CONFIG_LEDS_TRIGGERS
> down_write(&led_cdev->trigger_lock);
> + led_cdev->flags |= LED_UNREGISTERING;
[Severity: High]
This is a pre-existing issue, but does this fully resolve the data race on
the flags bitmask?
While this update is now protected by trigger_lock, other paths like PM
suspend or V4L2 flash release modify led_cdev->flags using non-atomic
bitwise operations without holding trigger_lock.
If a concurrent update occurs without the lock, could the non-atomic
read-modify-write drop the LED_UNREGISTERING flag?
If the flag is lost, a subsequent sysfs trigger write might see it unset
and attach a trigger to the unregistering LED, leading to a use-after-free
when the trigger later fires.
[ ... ]
> /* Stop blinking */
> led_stop_software_blink(led_cdev);
>
> if (!(led_cdev->flags & LED_RETAIN_AT_SHUTDOWN))
> led_set_brightness(led_cdev, LED_OFF);
>
> flush_work(&led_cdev->set_brightness_work);
[Severity: High]
This is also a pre-existing issue, but is there a race condition between
flushing the workqueue and unregistering the device?
In led_classdev_unregister(), flush_work() is called before
device_unregister() removes the device from sysfs.
Could a user-space thread writing to the sysfs brightness attribute in the
window between these two calls queue new work?
sysfs brightness_store() -> led_set_brightness_nopm() -> queue_work()
Since device_unregister() hasn't been called yet, the sysfs write can
succeed, leaving pending work that will execute after the device memory is
freed.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260821-leds-trigger-hw-changed-v5-0-3e00d6c4a936@rong.moe?part=8
next prev parent reply other threads:[~2026-08-21 17:27 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-20 17:21 [PATCH v5 00/12] leds: Add support for hardware-initiated hardware control trigger transition Rong Zhang
2026-08-20 17:21 ` [PATCH v5 01/12] leds: Move led_trigger_is_hw_controlled() to the right place Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:21 ` [PATCH v5 02/12] leds: class: Remove hardware control trigger when writing brightness Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:21 ` [PATCH v5 03/12] leds: trigger: Add offloaded() callback and provide trigger_may_offload attribute Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:21 ` [PATCH v5 04/12] leds: cros_ec: Implement offloaded() trigger callback Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:22 ` [PATCH v5 05/12] leds: turris-omnia: Implement offloaded() trigger callback and declare hw_control_trigger Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-22 18:56 ` Rong Zhang
2026-08-20 17:22 ` [PATCH v5 06/12] leds: trigger: netdev: Implement offloaded() callback Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-22 19:01 ` Rong Zhang
2026-08-20 17:22 ` [PATCH v5 07/12] leds: trigger: Enforce strict checks in led_trigger_is_hw_controlled() Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-22 19:10 ` Rong Zhang
2026-08-20 17:22 ` [PATCH v5 08/12] leds: trigger: Do not attach trigger to a removing LED Rong Zhang
2026-08-21 17:27 ` sashiko-bot [this message]
2026-08-22 19:40 ` Rong Zhang
2026-08-20 17:22 ` [PATCH v5 09/12] leds: trigger: Add led_trigger_notify_hw_control_changed() interface Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:22 ` [PATCH v5 10/12] platform/x86: ideapad-laptop: Decouple hardware & classdev brightness for keyboard backlight Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-22 20:26 ` Rong Zhang
2026-08-20 17:22 ` [PATCH v5 11/12] platform/x86: ideapad-laptop: Serialize keyboard backlight notifications Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-20 17:22 ` [PATCH v5 12/12] platform/x86: ideapad-laptop: Fully support auto keyboard backlight Rong Zhang
2026-08-21 17:27 ` sashiko-bot
2026-08-22 20:25 ` Rong Zhang
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=20260821172738.AE6001F00A3E@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=i@rong.moe \
--cc=lee@kernel.org \
--cc=linux-leds@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox