All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Rosen Penev" <rosenp@gmail.com>
Cc: vkoul@kernel.org, dmaengine@vger.kernel.org, Frank.Li@kernel.org
Subject: Re: [PATCH] dmaengine: ste_dma40: fix out-of-bounds access from D40_MEMCPY_MAX_CHANS
Date: Sun, 31 May 2026 21:27:08 +0000	[thread overview]
Message-ID: <20260531212709.10FFB1F00893@smtp.kernel.org> (raw)
In-Reply-To: <20260531210747.11401-1-rosenp@gmail.com>

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

New issues:
- [Low] The commit message incorrectly claims that the out-of-bounds write corrupts 'adjacent stack memory'.

Pre-existing issues:
- [High] Missing `free_irq()` and `tasklet_kill()` in the `d40_probe()` error path (`destroy_cache`) leads to a severe Use-After-Free and IRQ leak.
--

commit d80dea89461b0f1c87cf7d871360b4cb6985bcdb
Author: Rosen Penev <rosenp@gmail.com>

dmaengine: ste_dma40: fix out-of-bounds access from D40_MEMCPY_MAX_CHANS

The commit fixes an out-of-bounds array access in the ste_dma40 driver by
correcting D40_MEMCPY_MAX_CHANS to match the actual size of the
dma40_memcpy_channels array.

> 1. d40_of_probe() accepts up to 8 memcpy channels from DT
>    (num_memcpy > D40_MEMCPY_MAX_CHANS allows 7-8), then writes them
>    into the 6-element dma40_memcpy_channels[], corrupting adjacent
>    stack memory.

[Severity: Low]
Is the description of "stack memory" corruption accurate here?

Looking at dma40_memcpy_channels, it is defined as a static global array,
meaning the out-of-bounds write would corrupt the .data or .bss segments
rather than adjacent stack memory.

Could the commit message be updated to reflect that this is global memory
corruption rather than stack corruption?


> diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
> index 9b803c0aec254..9dfacffa0548f 100644
> --- a/drivers/dma/ste_dma40.c
> +++ b/drivers/dma/ste_dma40.c
> @@ -86,7 +86,7 @@ struct stedma40_platform_data {
>  #define D40_ALLOC_PHY		BIT(30)
>  #define D40_ALLOC_LOG_FREE	0
>  
> -#define D40_MEMCPY_MAX_CHANS	8
> +#define D40_MEMCPY_MAX_CHANS	6

[Severity: High]
This is a pre-existing issue, but I noticed a missing cleanup step in the
probe function's error handling. Does the destroy_cache error path in
d40_probe() leak the IRQ and fail to kill tasklets?

drivers/dma/ste_dma40.c:d40_probe() {
    ...
	ret = request_irq(base->irq, d40_handle_interrupt, 0, D40_NAME, base);
	if (ret) {
		d40_err(dev, "No IRQ defined\n");
		goto destroy_cache;
	}
    ...
	ret = of_dma_controller_register(np, d40_xlate, NULL);
	if (ret) {
		dev_err(dev,
			"could not register of_dma_controller\n");
		goto destroy_cache;
	}
    ...
 destroy_cache:
	if (base->lcla_pool.dma_addr)
		dma_unmap_single(base->dev, base->lcla_pool.dma_addr,
    ...
}

Because request_irq() is used instead of a devm_ variant, shouldn't free_irq()
and tasklet_kill() be called before returning?

If probe fails late, the devm_kzalloc() allocated base structure is
automatically freed. If the leaked IRQ fires or a scheduled tasklet executes
afterwards, they will access the freed memory, leading to a Use-After-Free.

>  
>  /* Reserved event lines for memcpy only. */
>  #define DB8500_DMA_MEMCPY_EV_0	51

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260531210747.11401-1-rosenp@gmail.com?part=1

  reply	other threads:[~2026-05-31 21:27 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-31 21:07 [PATCH] dmaengine: ste_dma40: fix out-of-bounds access from D40_MEMCPY_MAX_CHANS Rosen Penev
2026-05-31 21:27 ` sashiko-bot [this message]
2026-06-02  8:48 ` Linus Walleij
2026-06-02  8:53   ` Rosen Penev

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=20260531212709.10FFB1F00893@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=Frank.Li@kernel.org \
    --cc=dmaengine@vger.kernel.org \
    --cc=rosenp@gmail.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=vkoul@kernel.org \
    /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.