All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Sven Püschel" <s.pueschel@pengutronix.de>
Cc: linux-media@vger.kernel.org
Subject: Re: [PATCH 01/17] media: rockchip: rga: zero cmdbuf in shared code
Date: Fri, 05 Jun 2026 22:20:51 +0000	[thread overview]
Message-ID: <20260605222052.2AAAD1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260606-spu-rga3multicore-v1-1-3ec2b15675f7@pengutronix.de>

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

Pre-existing issues:
- [High] Concurrent lockless modification of f->crop and ctx->cmdbuf_dirty in vidioc_s_selection races with device_run.
--

commit d338e595cb9fb0b46d00f7fc398fe05c4adbac84
Author: Sven Püschel <s.pueschel@pengutronix.de>

media: rockchip: rga: zero cmdbuf in shared code

This commit centralizes the zeroing of the command buffer into the shared rga
code instead of individual implementations. It also uses the cmdbuf_size member
for the memset operation.

> diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
> index b3cb6bf8eb863..bd0afd33affe4 100644
> --- a/drivers/media/platform/rockchip/rga/rga.c
> +++ b/drivers/media/platform/rockchip/rga/rga.c
> @@ -41,6 +41,7 @@ static void device_run(void *prv)
>  	spin_lock_irqsave(&rga->ctrl_lock, flags);
>  	if (ctx->cmdbuf_dirty) {
>  		ctx->cmdbuf_dirty = false;
> +		memset(ctx->cmdbuf_virt, 0, rga->hw->cmdbuf_size);
>  		rga->hw->setup_cmdbuf(ctx);

[Severity: High]
This is a pre-existing issue, but can the lockless modification of f->crop
and ctx->cmdbuf_dirty in vidioc_s_selection race with this execution of
device_run?

In vidioc_s_selection, the crop dimensions and dirty flag are updated without
acquiring the rga->ctrl_lock spinlock:

drivers/media/platform/rockchip/rga/rga.c:vidioc_s_selection() {
    ...
    f->crop = s->r;
    ctx->cmdbuf_dirty = true;
    ...
}

Because vidioc_s_selection runs with only rga->mutex held and allows
modifications while streaming, it can execute concurrently with the v4l2_m2m
worker thread running device_run.

Since vidioc_s_selection does not acquire rga->ctrl_lock, hardware
configuration functions like rga_cmd_set_dst_info can read a torn f->crop 
state during rga->hw->setup_cmdbuf:

drivers/media/platform/rockchip/rga/rga-hw.c:rga_cmd_set_dst_info() {
    ...
    dst_h = ctx->out.crop.height;
    dst_w = ctx->out.crop.width;
    dst_x = ctx->out.crop.left;
    dst_y = ctx->out.crop.top;
    ...
    corner_addrs = rga_get_corner_addrs(&ctx->out, addrs, dst_x, dst_y,
                                        dst_w, dst_h);
    ...
}

If a torn read mixes an old, large left and top offset with a new, large
width and height, it bypasses the validation done in vidioc_s_selection.

Does this cause rga_get_corner_addrs to calculate out-of-bounds DMA base
addresses, resulting in the RGA hardware performing out-of-bounds DMA writes
past the allocated video buffers?

>  	}
>  	spin_unlock_irqrestore(&rga->ctrl_lock, flags);

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260606-spu-rga3multicore-v1-0-3ec2b15675f7@pengutronix.de?part=1

  reply	other threads:[~2026-06-05 22:20 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-05 22:06 [PATCH 00/17] media: rockchip: rga: Add multi-core support Sven Püschel
2026-06-05 22:06 ` Sven Püschel
2026-06-05 22:06 ` [PATCH 01/17] media: rockchip: rga: zero cmdbuf in shared code Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:20   ` sashiko-bot [this message]
2026-06-05 22:06 ` [PATCH 02/17] media: rockchip: rga: add comment about pixel alignment for YUV formats Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:06 ` [PATCH 03/17] media: rockchip: rga: move early return into if condition in vidioc_enum_fmt Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:06 ` [PATCH 04/17] media: rockchip: rga: removed unused regmap member Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:06 ` [PATCH 05/17] media: v4l2-mem2mem: support running multiple jobs in parallel Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:18   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 06/17] media: rockchip: rga: move power handling to device_run Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:22   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 07/17] media: rockchip: rga: adjust get_version to return the version Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:06 ` [PATCH 08/17] media: rockchip: rga: add rga_core structure Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:22   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 09/17] media: rockchip: rga: use components to manage multiple cores Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:24   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 10/17] media: rockchip: rga: move rockchip_rga allocation to master probe Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:23   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 11/17] media: rockchip: rga: move video device to the master Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:21   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 12/17] media: rockchip: rga: move core initialization from bind to probe Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:20   ` sashiko-bot
2026-06-05 22:06 ` [PATCH 13/17] media: rockchip: rga: bind all cores to the master Sven Püschel
2026-06-05 22:06   ` Sven Püschel
2026-06-05 22:23   ` sashiko-bot
2026-06-05 22:07 ` [PATCH 14/17] media: rockchip: rga: put all cores into first core iommu domain Sven Püschel
2026-06-05 22:07   ` Sven Püschel
2026-06-05 22:23   ` sashiko-bot
2026-06-05 22:07 ` [PATCH 15/17] media: rockchip: rga: schedule jobs to multiple cores Sven Püschel
2026-06-05 22:07   ` Sven Püschel
2026-06-05 22:25   ` sashiko-bot
2026-06-05 22:07 ` [PATCH 16/17] arm64: dts: rockchip: add rga3 dt nodes to rk3588 Sven Püschel
2026-06-05 22:07   ` Sven Püschel
2026-06-05 22:07 ` [PATCH 17/17] iommu/rockchip: disable fetch dte time limit Sven Püschel
2026-06-05 22:07   ` Sven Püschel
2026-06-05 22:26   ` 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=20260605222052.2AAAD1F00893@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=s.pueschel@pengutronix.de \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.