Linux LED subsystem development
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: sashiko-reviews@lists.linux.dev
Cc: haibo.chen@oss.nxp.com, linux-leds@vger.kernel.org,
	Frank.Li@kernel.org, imx@lists.linux.dev
Subject: Re: [PATCH v2 2/4] leds: pca9532: check return value in pca9532_setled()
Date: Thu, 6 Aug 2026 15:22:14 +0100	[thread overview]
Message-ID: <20260806142214.GM2869284@google.com> (raw)
In-Reply-To: <20260729075535.53DE11F000E9@smtp.kernel.org>

On Wed, 29 Jul 2026, sashiko-bot@kernel.org wrote:

> Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
> 
> New issues:
> - [Medium] The newly added error return values from `pca9532_setled()` and `pca9532_gpio_set_value()` are ignored in the configuration and GPIO direction paths.
> - [Low] The commit message violates the LED subsystem capitalization rule.

Please review, explain or fix the Sashiko review(s).

If this is a set, this request includes the other patches too.

> Pre-existing issues:
> - [High] Incorrect teardown ordering of a devm-managed input device and a custom workqueue leads to a Use-After-Free during device removal.
> --
> 
> --- Patch [2]: [PATCH v2 2/4] leds: pca9532: check return value in pca9532_setled() ---
> commit 3e826891d5b6286d8b08ddc7c668e35465352554
> Author: Haibo Chen <haibo.chen@nxp.com>
> 
> leds: pca9532: check return value in pca9532_setled()
> 
> This commit updates pca9532_setled() to check the return value of
> i2c_smbus_read_byte_data(). By checking for read failures, it prevents
> writing bogus bitwise-modified negative error codes back to the device.
> 
> > leds: pca9532: check return value in pca9532_setled()
> 
> [Severity: Low]
> This isn't a bug, but the commit description after the subsystem prefix isn't 
> capitalized. It should probably be "Check return value in pca9532_setled()".
> 
> > diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c
> > index e8ee17b8bd547..adfb5aa50e8e1 100644
> > --- a/drivers/leds/leds-pca9532.c
> > +++ b/drivers/leds/leds-pca9532.c
> [ ... ]
> > @@ -159,21 +159,29 @@ static int pca9532_setpwm(struct i2c_client *client, int pwm)
> >  }
> >  
> >  /* Set LED routing */
> > -static void pca9532_setled(struct pca9532_led *led)
> > +static int pca9532_setled(struct pca9532_led *led)
> 
> [Severity: Medium]
> Since this function now returns an error code, do we also need to update
> other callers that still ignore it? 
> 
> For example, pca9532_gpio_direction_input() calls pca9532_gpio_set_value()
> (which returns the error from pca9532_setled()), but the error is discarded:
> 
> drivers/leds/leds-pca9532.c:pca9532_gpio_direction_input() {
>     ...
>     pca9532_gpio_set_value(gc, offset, 1);
>     return 0;
> }
> 
> Similarly, pca9532_configure() invokes pca9532_setled() during initialization
> without checking the result, which might leave the hardware in an undefined
> state if the I2C bus fails.
> 
> [ ... ]
> > @@ -257,9 +264,7 @@ static int pca9532_set_blink(struct led_classdev *led_cdev,
> >  	if (err)
> >  		return err;
> >  
> > -	pca9532_setled(led);
> > -
> > -	return 0;
> > +	return pca9532_setled(led);
> >  }
> >  
> >  static int pca9532_event(struct input_dev *dev, unsigned int type,
> 
> [Severity: High]
> This is a pre-existing issue, but can this event callback fire after the
> workqueue is cancelled during device removal, causing a use-after-free?
> 
> During driver unbind, pca9532_remove() calls pca9532_destroy_devices()
> which manually cancels the work:
> 
> drivers/leds/leds-pca9532.c:pca9532_destroy_devices() {
>     ...
>     cancel_work_sync(&data->work);
>     data->idev = NULL;
>     ...
> }
> 
> However, because the input device is allocated with
> devm_input_allocate_device(), it remains active and registered until
> devres cleanup runs after .remove() finishes. 
> 
> If userspace injects an EV_SND event concurrently, the input core could
> invoke pca9532_event(), rescheduling the work item via
> schedule_work(&data->work). When the scheduled work executes later, the data
> structure will have already been freed by devres.
> 
> -- 
> Sashiko AI review · https://sashiko.dev/#/patchset/20260729-led-fix-v2-0-09ad218457bd@nxp.com?part=2

-- 
Lee Jones

  reply	other threads:[~2026-08-06 14:22 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-29  7:43 [PATCH v2 0/4] leds: pca9532: fix unchecked I2C reads and unbind use-after-free haibo.chen
2026-07-29  7:43 ` [PATCH v2 1/4] leds: pca9532: check i2c_smbus_read_byte_data() return value haibo.chen
2026-07-29  7:55   ` sashiko-bot
2026-07-29  7:43 ` [PATCH v2 2/4] leds: pca9532: check return value in pca9532_setled() haibo.chen
2026-07-29  7:55   ` sashiko-bot
2026-08-06 14:22     ` Lee Jones [this message]
2026-07-29  7:43 ` [PATCH v2 3/4] leds: pca9532: check return value in pca9532_gpio_get_value() haibo.chen
2026-07-29  7:52   ` sashiko-bot
2026-07-29  7:43 ` [PATCH v2 4/4] leds: pca9532: fix use-after-free on unbind with N2100 beeper haibo.chen
2026-07-29  7:50   ` sashiko-bot

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=20260806142214.GM2869284@google.com \
    --to=lee@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=haibo.chen@oss.nxp.com \
    --cc=imx@lists.linux.dev \
    --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