From: sashiko-bot@kernel.org
To: "Akhil R" <akhilrajeev@nvidia.com>
Cc: linux-hwmon@vger.kernel.org
Subject: Re: [PATCH v3 07/13] i3c: master: match I3C device through DT and ACPI
Date: Thu, 23 Apr 2026 23:27:42 +0000 [thread overview]
Message-ID: <20260423232742.DDA3AC2BCAF@smtp.kernel.org> (raw)
In-Reply-To: <20260423085718.70762-8-akhilrajeev@nvidia.com>
Sashiko AI review found 4 potential issue(s):
- [High] I3C devices matched via DT or ACPI will not automatically load their corresponding kernel modules because the I3C subsystem's `uevent` handler fails to generate OF or ACPI modaliases.
- [High] Lockless access to `i3cdev->desc` in `i3c_device_match()` introduces a TOCTOU race and a Use-After-Free / NULL Pointer Dereference.
- [High] Uninitialized memory read in `i3c_device_match_id()` when `i3cdev->desc` is NULL.
- [Medium] Architectural restriction of firmware matching to SETAASA devices.
--
commit b086c2a6b40084b4476548d93f6440348d3a2ee5
Author: Akhil R <akhilrajeev@nvidia.com>
i3c: master: match I3C device through DT and ACPI
This patch allows SETAASA-based I3C devices to be matched through Device
Tree or ACPI, as they might not implement deviceinfo CCC commands and lack
standard ID matching.
> diff --git a/drivers/i3c/master.c b/drivers/i3c/master.c
> index fbe8710c4c56f8..0be83bfdb563f5 100644
> --- a/drivers/i3c/master.c
> +++ b/drivers/i3c/master.c
[ ... ]
> @@ -343,15 +344,32 @@ static int i3c_device_match(struct device *dev, const struct device_driver *drv)
> {
> struct i3c_device *i3cdev;
> const struct i3c_driver *i3cdrv;
> + u8 static_addr_method = 0;
>
> if (dev->type != &i3c_device_type)
> return 0;
>
> i3cdev = dev_to_i3cdev(dev);
> i3cdrv = drv_to_i3cdrv(drv);
> - if (i3c_device_match_id(i3cdev, i3cdrv->id_table))
> +
> + if (i3cdev->desc && i3cdev->desc->boardinfo)
> + static_addr_method = i3cdev->desc->boardinfo->static_addr_method;
Is it safe to access i3cdev->desc and boardinfo here without holding the I3C
bus lock?
During a Dynamic Address Assignment or Hot-Join event,
i3c_master_add_i3c_dev_locked() can replace the descriptor and free the old
one. Because this match function runs without locks, it might see a non-NULL
descriptor, get preempted while the descriptor is freed, and then dereference
freed memory.
Additionally, the compiler might fetch i3cdev->desc twice here, which could
result in a NULL pointer dereference if it gets set to NULL concurrently
during device unregistration.
> +
> + /*
> + * SETAASA based device need not always have a matching ID since
> + * it is not mandatory for such devices to implement deviceinfo
> + * CCC commands. Allow them to register through DT or ACPI.
> + */
> + if (i3cdrv->id_table && i3c_device_match_id(i3cdev, i3cdrv->id_table))
If i3cdev->desc is NULL, does i3c_device_match_id() operate on uninitialized
memory?
The check above indicates i3cdev->desc can be NULL, but i3c_device_get_info()
will return early without initializing the devinfo structure when the
descriptor is missing, leaving i3c_device_match_id() to extract PID
components from uninitialized stack memory.
> return 1;
>
> + if (static_addr_method & I3C_ADDR_METHOD_SETAASA) {
> + if (of_driver_match_device(dev, drv))
> + return 1;
> + if (acpi_driver_match_device(dev, drv))
> + return 1;
> + }
Is there a reason to restrict DT and ACPI matching to only SETAASA devices?
Generic firmware matching is generally available to any device with a valid
firmware node. Since of_driver_match_device() and acpi_driver_match_device()
safely return 0 if no firmware match exists, gating this behind a specific
address assignment type might unnecessarily restrict firmware-based matching
for standard I3C devices.
Also, does i3c_device_uevent() need an update to generate OF and ACPI
modaliases?
If drivers omit an id_table and rely solely on DT or ACPI matching, they
might not be automatically loaded by userspace during device discovery, since
the uevent handler only emits standard I3C modaliases.
> return 0;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260423085718.70762-1-akhilrajeev@nvidia.com?part=7
next prev parent reply other threads:[~2026-04-23 23:27 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-23 8:56 [PATCH v3 00/13] Support ACPI and SETAASA device discovery Akhil R
2026-04-23 8:57 ` [PATCH v3 01/13] dt-bindings: i3c: Add mipi-i3c-static-method to support SETAASA Akhil R
2026-04-23 11:23 ` sashiko-bot
2026-05-05 21:32 ` Rob Herring
2026-05-05 22:17 ` Guenter Roeck
2026-05-05 23:12 ` Rob Herring
2026-04-23 8:57 ` [PATCH v3 02/13] ACPICA: Read LVR from the I2C resource descriptor Akhil R
2026-04-23 19:35 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 03/13] i3c: master: Use unified device property interface Akhil R
2026-04-23 20:08 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 04/13] i3c: master: Support ACPI enumeration of child devices Akhil R
2026-04-23 22:11 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 05/13] i3c: master: Add support for devices using SETAASA Akhil R
2026-04-23 22:36 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 06/13] i3c: master: Add support for devices without PID Akhil R
2026-04-23 23:01 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 07/13] i3c: master: match I3C device through DT and ACPI Akhil R
2026-04-23 23:27 ` sashiko-bot [this message]
2026-04-23 8:57 ` [PATCH v3 08/13] i3c: dw-i3c-master: Add SETAASA as supported CCC Akhil R
2026-04-23 8:57 ` [PATCH v3 09/13] i3c: dw-i3c-master: Add a quirk to skip clock and reset Akhil R
2026-04-24 0:18 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 10/13] i3c: dw-i3c-master: Add ACPI ID for Tegra410 Akhil R
2026-04-24 0:34 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 11/13] hwmon: spd5118: Remove 16-bit addressing Akhil R
2026-04-24 1:03 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 12/13] hwmon: spd5118: Add I3C support Akhil R
2026-04-24 3:08 ` sashiko-bot
2026-04-23 8:57 ` [PATCH v3 13/13] arm64: defconfig: Enable I3C and SPD5118 hwmon Akhil R
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=20260423232742.DDA3AC2BCAF@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=akhilrajeev@nvidia.com \
--cc=linux-hwmon@vger.kernel.org \
--cc=sashiko@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