Linux-i3c Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Claudiu Beznea" <claudiu.beznea@tuxon.dev>
Cc: linux-i3c@lists.infradead.org, Frank.Li@kernel.org,
	wsa+renesas@sang-engineering.com,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>
Subject: Re: [PATCH v5 07/17] i3c: renesas: Clean DATBAS register on detach
Date: Mon, 13 Jul 2026 13:45:33 +0000	[thread overview]
Message-ID: <20260713134533.82EE11F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260713130545.568657-8-claudiu.beznea+renesas@tuxon.dev>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [High] The ENTDAA procedure in `renesas_i3c_daa` is incompatible with fragmented device indices, miscalculates masks, and leaks speculative `DATBAS` state.
- [High] Hardware transfer is not aborted on timeout and queued transfers are never started, leading to cross-transfer corruption and use-after-free.
--

--- Patch [7]: [PATCH v5 07/17] i3c: renesas: Clean DATBAS register on detach ---
commit c5598a36339bc89f9663008d7b023828e4ec62e5
Author: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>

i3c: renesas: Clean DATBAS register on detach

The controller uses DATBAS registers on TX/RX logic. Clean the DATBAS
register for the detached I3C device to avoid issues.

> diff --git a/drivers/i3c/master/renesas-i3c.c b/drivers/i3c/master/renesas-i3c.c
> index acc30ed615ab9..b9784d238f61c 100644
> --- a/drivers/i3c/master/renesas-i3c.c
> +++ b/drivers/i3c/master/renesas-i3c.c
> @@ -935,6 +935,8 @@ static void renesas_i3c_detach_i3c_dev(struct i3c_dev_desc *dev)
>  	struct i3c_master_controller *m = i3c_dev_get_master(dev);
>  	struct renesas_i3c *i3c = to_renesas_i3c(m);
>  
> +	renesas_writel(i3c->regs, DATBAS(data->index), 0);
> +
>  	i3c_dev_set_master_data(dev, NULL);
>  	i3c->addrs[data->index] = 0;
>  	i3c->free_pos |= BIT(data->index);

While reviewing this patch, I noticed a couple of pre-existing issues in
drivers/i3c/master/renesas-i3c.c that might need attention.

In renesas_i3c_daa():

>         newdevs = GENMASK(i3c->maxdevs - cmd->rx_count - 1, 0);
>         newdevs &= ~olddevs;

[Severity: High]
This is a pre-existing issue, but does this miscalculate the mask if zero
devices join during DAA?

If zero devices join, cmd->rx_count equals i3c->maxdevs, which would make
GENMASK(maxdevs - rx_count - 1, 0) evaluate to GENMASK(-1, 0). Could this
underflow to ~0UL and falsely add phantom devices for every free position?

Also in renesas_i3c_daa():

>         NCMDQP_CMD(I3C_CCC_ENTDAA) | NCMDQP_DEV_INDEX(ret) |
>         NCMDQP_DEV_COUNT(i3c->maxdevs - ret) | NCMDQP_TOC;

If free indices are fragmented (for example, after a detach like the one this
patch addresses), does this instruct the hardware to assign a sequential block
of devices? 

It appears this might override the DATBAS configuration of already-occupied
higher indices, resulting in duplicate I3C addresses. Furthermore, do
speculative DATBAS writes for indices that do not join get cleaned up, or
could they permanently pollute the controller's state?

In 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);

[Severity: High]
This isn't a bug introduced by this patch, but does this timeout path leave
the hardware actively processing the transfer?

The timeout removes the transfer from the software queue and allows its
memory to be freed, but if an abort isn't sent to the hardware, could this
create a use-after-free race?

In renesas_i3c_resp_isr():

>         xfer = list_first_entry_or_null(&i3c->xferqueue.list,
>                                         struct renesas_i3c_xfer, node);
>         if (xfer)
>                 list_del_init(&xfer->node);
> 
>         i3c->xferqueue.cur = xfer;

If the next transfer is popped from the queue and assigned to cur, but never
actually started in the hardware, will it permanently stall and guarantee a
timeout?

If a new transfer is later started and becomes cur, could the old delayed
hardware interrupt fire and process old events against the new cur transfer,
writing PIO data into the new buffer (or previously freed stack space)?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260713130545.568657-1-claudiu.beznea+renesas@tuxon.dev?part=7

-- 
linux-i3c mailing list
linux-i3c@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-i3c

  reply	other threads:[~2026-07-13 13:45 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 [this message]
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
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=20260713134533.82EE11F00A3A@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