From: sashiko-bot@kernel.org
To: "Claudiu Beznea" <claudiu.beznea@tuxon.dev>
Cc: linux-i3c@lists.infradead.org, wsa+renesas@sang-engineering.com,
Frank.Li@kernel.org,
"Alexandre Belloni" <alexandre.belloni@bootlin.com>
Subject: Re: [PATCH v5 08/17] i3c: renesas: Fix out-of-bounds access for newdevs mask
Date: Mon, 13 Jul 2026 13:49:21 +0000 [thread overview]
Message-ID: <20260713134922.204F21F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260713130545.568657-9-claudiu.beznea+renesas@tuxon.dev>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
Pre-existing issues:
- [High] The driver completely ignores transfer completion status and timeouts in critical I/O functions (`renesas_i3c_daa`, `renesas_i3c_i3c_xfers`, `renesas_i3c_i2c_xfers`), leading to silent failures, uninitialized kernel memory leaks, and race conditions.
- [High] The Dynamic Address Assignment (DAA) logic incorrectly calculates the `newdevs` bitmask using `GENMASK(..., 0)`, failing to account for non-contiguous (fragmented) index allocations.
- [High] Missing hardware reset on transfer timeout causes command/response FIFOs to desynchronize, corrupting subsequent transfers.
--
--- Patch [8]: [PATCH v5 08/17] i3c: renesas: Fix out-of-bounds access for newdevs mask ---
commit 141d263a8a62dfaec861ec3e856a94b76c38fa01
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
i3c: renesas: Fix out-of-bounds access for newdevs mask
When software initiates DAA (Dynamic Address Assignment), the controller
reports the result via the NRSPQP (Normal Response Queue Port Register).
This patch adjusts the condition that computes the newly discovered devices
bitmask to prevent an out-of-bounds access when the I3C bus is empty.
> diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesas-i3c.c
> index b9784d238f61c..c459e40fd5ffc 100644
> --- a/drivers/i3c/master/renesas-i3c.c
> +++ b/drivers/i3c/master/renesas-i3c.c
> @@ -703,7 +703,11 @@ static int renesas_i3c_daa(struct i3c_master_controller *m)
>
> renesas_i3c_wait_xfer(i3c, xfer);
[Severity: High]
This is a pre-existing issue, but does the driver need to check the
completion status of renesas_i3c_wait_xfer()?
If this transfer times out, cmd->rx_count remains 0, which could cause the
subsequent code to process phantom devices.
Similar unhandled timeouts appear in renesas_i3c_i3c_xfers(), where returning
0 unconditionally could leak uninitialized read buffers, and in
renesas_i3c_i2c_xfers(), where ignoring the timeout allows the loop to modify
cmd fields concurrently with pending hardware operations.
Additionally, what happens to the hardware state if a timeout occurs?
drivers/i3c/master/renesas-i3c.c:renesas_i3c_wait_xfer() {
...
time_left = wait_for_completion_timeout(&xfer->comp, msecs_to_jiffies(1000));
if (!time_left)
renesas_i3c_dequeue_xfer(i3c, xfer);
...
}
If the transfer is dequeued from software on timeout without triggering a
hardware abort or reset, could the controller remain active? The next
enqueued software transfer might then be corrupted by the hardware completion
interrupt of the previous timed-out transfer.
> - newdevs = GENMASK(i3c->maxdevs - cmd->rx_count - 1, 0);
> + if (cmd->rx_count >= i3c->maxdevs)
> + newdevs = 0;
> + else
> + newdevs = GENMASK(i3c->maxdevs - cmd->rx_count - 1, 0);
> +
> newdevs &= ~olddevs;
[Severity: High]
This isn't a bug introduced by this patch, but does the calculation of
newdevs properly account for non-contiguous index allocations?
The Dynamic Address Assignment logic calculates the newdevs bitmask using
GENMASK(..., 0), which computes a bitmask strictly starting from index 0.
If a device is detached leaving a gap in free_pos (e.g., at index 0) while
higher indices are occupied, DAA sets DEV_INDEX to the first gap. Since
GENMASK(..., 0) ignores the DEV_INDEX offset, applying newdevs &= ~olddevs
could clear the incorrectly shifted bits corresponding to occupied slots.
Could this cause newly attached devices to be permanently dropped?
>
> for (pos = 0; pos < i3c->maxdevs; pos++) {
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260713130545.568657-1-claudiu.beznea+renesas@tuxon.dev?part=8
--
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2026-07-13 13:49 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 13:05 [PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM Claudiu Beznea
2026-07-13 13:05 ` [PATCH v5 01/17] i3c: renesas: Check that the transfer is valid before accessing it Claudiu Beznea
2026-07-13 13:24 ` sashiko-bot
2026-07-13 16:51 ` Frank Li
2026-07-13 13:05 ` [PATCH v5 02/17] i3c: renesas: Restore STDBR and EXTBR registers on resume Claudiu Beznea
2026-07-13 13:19 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 03/17] i3c: renesas: Follow the reset deassert order used in probe Claudiu Beznea
2026-07-13 13:14 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 04/17] i3c: renesas: Reconfigure the DATBAS register on re-attach Claudiu Beznea
2026-07-13 13:05 ` [PATCH v5 05/17] i3c: renesas: Reset the controller on resume Claudiu Beznea
2026-07-13 13:35 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 06/17] i3c: renesas: Perform Dynamic Address Assignment " Claudiu Beznea
2026-07-13 13:50 ` sashiko-bot
2026-07-13 16:59 ` Frank Li
2026-07-14 9:30 ` Claudiu Beznea
2026-07-14 18:57 ` Frank Li
2026-07-13 13:05 ` [PATCH v5 07/17] i3c: renesas: Clean DATBAS register on detach Claudiu Beznea
2026-07-13 13:45 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 08/17] i3c: renesas: Fix out-of-bounds access for newdevs mask Claudiu Beznea
2026-07-13 13:49 ` sashiko-bot [this message]
2026-07-13 17:01 ` Frank Li
2026-07-13 13:05 ` [PATCH v5 09/17] i3c: renesas: Use reset_control_bulk_{assert, deassert}() Claudiu Beznea
2026-07-13 17:02 ` Frank Li
2026-07-13 13:05 ` [PATCH v5 10/17] i3c: renesas: Return immediately if there is no transfer Claudiu Beznea
2026-07-13 14:04 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 11/17] i3c: renesas: Follow a unified pattern for transfer and command initialization Claudiu Beznea
2026-07-13 14:09 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 12/17] i3c: renesas: Drop the explicit memset() call Claudiu Beznea
2026-07-13 13:05 ` [PATCH v5 13/17] i3c: renesas: Update HW registers after SW computations are done Claudiu Beznea
2026-07-13 14:10 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 14/17] i3c: renesas: Organize structures to avoid unnecessary padding Claudiu Beznea
2026-07-13 14:15 ` sashiko-bot
2026-07-13 13:05 ` [PATCH v5 15/17] i3c: renesas: Use the "dev_name:irq_name" format for the interrupt name Claudiu Beznea
2026-07-13 13:05 ` [PATCH v5 16/17] i3c: renesas: Drop unnecessary tab Claudiu Beznea
2026-07-13 13:05 ` [PATCH v5 17/17] i3c: renesas: Add runtime PM support Claudiu Beznea
2026-07-13 14:33 ` sashiko-bot
2026-07-13 17:26 ` [PATCH v5 00/17] i3c: renesas: Suspend to RAM with power loss and runtime PM Tommaso Merciai
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=20260713134922.204F21F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=alexandre.belloni@bootlin.com \
--cc=claudiu.beznea@tuxon.dev \
--cc=linux-i3c@lists.infradead.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=wsa+renesas@sang-engineering.com \
/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