From: sashiko-bot@kernel.org
To: "Sai Sree Kartheek Adivi" <s-adivi@ti.com>
Cc: Frank.Li@kernel.org, conor+dt@kernel.org, vkoul@kernel.org,
dmaengine@vger.kernel.org, robh@kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v7 10/19] dmaengine: ti: k3-udma: refactor resource setup functions
Date: Fri, 24 Jul 2026 10:42:55 +0000 [thread overview]
Message-ID: <20260724104255.A04861F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260724102115.2854-11-s-adivi@ti.com>
Thank you for your contribution! Sashiko AI review found 4 potential issue(s) to consider:
New issues:
- [Medium] Bitmaps allocated with `devm_kmalloc_array` remain uninitialized if the optional SCI resource setup functions are not provided.
- [Medium] Missing NULL pointer check before invoking the `ud->udma_setup_resources` callback.
- [Low] Exporting an overly generic symbol name `setup_resources` pollutes the global kernel namespace, and internal functions lack static scope.
Pre-existing issues:
- [High] Missing bounds check on hardware/firmware-provided resource ranges leads to a potential out-of-bounds write in `udma_mark_resource_ranges`.
--
--- Patch [10]: [PATCH v7 10/19] dmaengine: ti: k3-udma: refactor resource setup functions ---
commit 3e6d342dd828c46abfda9610c9254ebd7a374ce5
Author: Sai Sree Kartheek Adivi <s-adivi@ti.com>
dmaengine: ti: k3-udma: refactor resource setup functions
This commit refactors the resource setup functions for K3 UDMA variants by
moving shared logic to a common file. It splits SCI resource setup into
variant-specific functions and uses function pointers to retain existing
functionality.
> diff --git a/drivers/dma/ti/k3-udma-common.c b/drivers/dma/ti/k3-udma-common.c
> index 472903e7d1a9f..8b2a3be3fa932 100644
> --- a/drivers/dma/ti/k3-udma-common.c
> +++ b/drivers/dma/ti/k3-udma-common.c
[ ... ]
> +int bcdma_setup_resources(struct udma_dev *ud)
> +{
> + int ret;
> + struct device *dev = ud->dev;
> + u32 cap;
[ ... ]
> + ud->bchan_map = devm_kmalloc_array(dev, BITS_TO_LONGS(ud->bchan_cnt),
> + sizeof(unsigned long), GFP_KERNEL);
[Severity: Medium]
Because devm_kmalloc_array() does not zero the allocated memory, will
ud->bchan_map remain uninitialized if the optional
bcdma_setup_sci_resources() callback isn't set or fails to populate it?
Later in setup_resources():
if (ud->bchan_cnt)
ch_count -= bitmap_weight(ud->bchan_map, ud->bchan_cnt);
Could this call bitmap_weight() on uninitialized memory, leading to
corrupted channel counts? Using devm_bitmap_zalloc() might ensure the
bitmaps are safely initialized.
> + ud->bchans = devm_kcalloc(dev, ud->bchan_cnt, sizeof(*ud->bchans),
> + GFP_KERNEL);
[ ... ]
> +int setup_resources(struct udma_dev *ud)
> +{
> + struct device *dev = ud->dev;
> + int ch_count, ret;
> +
> + switch (ud->match_data->type) {
> + case DMA_TYPE_UDMA:
> + ret = ud->udma_setup_resources(ud);
[Severity: Medium]
Should there be a NULL pointer check here before invoking
ud->udma_setup_resources(ud)? While the current code might populate it
unconditionally, other variant callbacks in this file are guarded with
NULL checks before invocation.
> + break;
[ ... ]
> +EXPORT_SYMBOL_GPL(setup_resources);
[Severity: Low]
Does exporting setup_resources with such a generic name risk polluting the
global kernel namespace? Renaming it to something like
k3_udma_setup_resources might avoid future linking collisions.
> diff --git a/drivers/dma/ti/k3-udma.h b/drivers/dma/ti/k3-udma.h
> index 329df7eb156b2..5e222ce366faf 100644
> --- a/drivers/dma/ti/k3-udma.h
> +++ b/drivers/dma/ti/k3-udma.h
[ ... ]
> @@ -679,6 +682,11 @@ struct udma_bchan *__udma_reserve_bchan(struct udma_dev *ud, enum udma_tp_level
> struct udma_tchan *__udma_reserve_tchan(struct udma_dev *ud, enum udma_tp_level tpl, int id);
> struct udma_rchan *__udma_reserve_rchan(struct udma_dev *ud, enum udma_tp_level tpl, int id);
>
> +int udma_setup_resources(struct udma_dev *ud);
> +int bcdma_setup_resources(struct udma_dev *ud);
> +int pktdma_setup_resources(struct udma_dev *ud);
> +int setup_resources(struct udma_dev *ud);
[Severity: Low]
Since bcdma_setup_resources() and pktdma_setup_resources() are only called
internally within k3-udma-common.c, could they be declared static in the C
file instead of being exposed globally in this header?
[Severity: High]
This is a pre-existing issue, but I noticed a potential out-of-bounds write
in udma_mark_resource_ranges() in k3-udma-common.c:
void udma_mark_resource_ranges(struct udma_dev *ud, unsigned long *map,
struct ti_sci_resource_desc *rm_desc,
char *name)
{
bitmap_clear(map, rm_desc->start, rm_desc->num);
bitmap_clear(map, rm_desc->start_sec, rm_desc->num_sec);
...
}
Is it possible for firmware or device tree to provide a resource range where
rm_desc->start + rm_desc->num exceeds the allocated bitmap size? If this
happens, it seems it would silently corrupt adjacent memory on the heap.
Would it make sense to add bounds checking against the channel count before
clearing the bits?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260724102115.2854-1-s-adivi@ti.com?part=10
next prev parent reply other threads:[~2026-07-24 10:42 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-24 10:20 [PATCH v7 00/19] dmaengine: ti: Add support for BCDMA v2 and PKTDMA v2 Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 01/19] dmaengine: ti: k3-udma: Fix sporadic crash on AM62x Sai Sree Kartheek Adivi
2026-07-24 10:41 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 02/19] dmaengine: ti: k3-udma: move macros to header file Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 03/19] dmaengine: ti: k3-udma: move structs and enums " Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 04/19] dmaengine: ti: k3-udma: move static inline helper functions " Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 05/19] dmaengine: ti: k3-udma: move descriptor management to k3-udma-common.c Sai Sree Kartheek Adivi
2026-07-24 10:44 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 06/19] dmaengine: ti: k3-udma: move ring management functions " Sai Sree Kartheek Adivi
2026-07-24 10:33 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 07/19] dmaengine: ti: k3-udma: Add variant-specific function pointers to udma_dev Sai Sree Kartheek Adivi
2026-07-24 10:41 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 08/19] dmaengine: ti: k3-udma: move udma utility functions to k3-udma-common.c Sai Sree Kartheek Adivi
2026-07-24 10:42 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 09/19] dmaengine: ti: k3-udma: move resource management " Sai Sree Kartheek Adivi
2026-07-24 10:52 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 10/19] dmaengine: ti: k3-udma: refactor resource setup functions Sai Sree Kartheek Adivi
2026-07-24 10:42 ` sashiko-bot [this message]
2026-07-24 10:20 ` [PATCH v7 11/19] dmaengine: ti: k3-udma: move inclusion of k3-udma-private.c to k3-udma-common.c Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 12/19] drivers: soc: ti: k3-ringacc: handle absence of tisci Sai Sree Kartheek Adivi
2026-07-24 10:53 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 13/19] dt-bindings: dma: ti: Add K3 BCDMA V2 Sai Sree Kartheek Adivi
2026-07-24 10:20 ` [PATCH v7 14/19] dt-bindings: dma: ti: Add K3 PKTDMA V2 Sai Sree Kartheek Adivi
2026-07-24 10:46 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 15/19] dmaengine: ti: k3-psil-am62l: Add AM62Lx PSIL and PDMA data Sai Sree Kartheek Adivi
2026-07-24 10:48 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 16/19] dmaengine: ti: k3-udma-v2: New driver for K3 BCDMA_V2 Sai Sree Kartheek Adivi
2026-07-24 11:05 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 17/19] dmaengine: ti: k3-udma-v2: Add support for PKTDMA V2 Sai Sree Kartheek Adivi
2026-07-24 10:58 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 18/19] dmaengine: ti: k3-udma-v2: Update glue layer to support " Sai Sree Kartheek Adivi
2026-07-24 10:58 ` sashiko-bot
2026-07-24 10:20 ` [PATCH v7 19/19] dmaengine: ti: k3-udma: Validate resource ID and fix logging in reservation Sai Sree Kartheek Adivi
2026-07-24 11:00 ` 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=20260724104255.A04861F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=Frank.Li@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=robh@kernel.org \
--cc=s-adivi@ti.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox