From: Dave Jiang <dave.jiang@intel.com>
To: Arnd Bergmann <arnd@kernel.org>, Jon Mason <jdmason@kudzu.us>,
Allen Hubbe <allenbh@gmail.com>
Cc: Arnd Bergmann <arnd@arndb.de>, kernel test robot <lkp@intel.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Damien Le Moal <dlemoal@kernel.org>,
zhang jiao <zhangjiao2@cmss.chinamobile.com>,
Philipp Stanner <pstanner@redhat.com>,
ntb@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] ntb: reduce stack usage in idt_scan_mws
Date: Fri, 21 Feb 2025 08:47:47 -0700 [thread overview]
Message-ID: <0e7e6ce7-7d7b-49cc-90eb-a07e831441d8@intel.com> (raw)
In-Reply-To: <20250221085748.2298463-1-arnd@kernel.org>
On 2/21/25 1:57 AM, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> idt_scan_mws() puts a large fixed-size array on the stack and copies
> it into a smaller dynamically allocated array at the end. On 32-bit
> targets, the fixed size can easily exceed the warning limit for
> possible stack overflow:
>
> drivers/ntb/hw/idt/ntb_hw_idt.c:1041:27: error: stack frame size (1032) exceeds limit (1024) in 'idt_scan_mws' [-Werror,-Wframe-larger-than]
>
> Change it to instead just always use dynamic allocation for the
> array from the start. It's too big for the stack, but not actually
> all that much for a permanent allocation.
>
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/all/202205111109.PiKTruEj-lkp@intel.com/
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
LGTM. Old code didn't make sense to declare on stack, allocate later and memcpy.
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
> ---
> A number of users have reported this in the past, but I couldn't
> find any other patch for it so far.
> ---
> drivers/ntb/hw/idt/ntb_hw_idt.c | 18 +++++++-----------
> 1 file changed, 7 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/ntb/hw/idt/ntb_hw_idt.c b/drivers/ntb/hw/idt/ntb_hw_idt.c
> index 544d8a4d2af5..f27df8d7f3b9 100644
> --- a/drivers/ntb/hw/idt/ntb_hw_idt.c
> +++ b/drivers/ntb/hw/idt/ntb_hw_idt.c
> @@ -1041,7 +1041,7 @@ static inline char *idt_get_mw_name(enum idt_mw_type mw_type)
> static struct idt_mw_cfg *idt_scan_mws(struct idt_ntb_dev *ndev, int port,
> unsigned char *mw_cnt)
> {
> - struct idt_mw_cfg mws[IDT_MAX_NR_MWS], *ret_mws;
> + struct idt_mw_cfg *mws;
> const struct idt_ntb_bar *bars;
> enum idt_mw_type mw_type;
> unsigned char widx, bidx, en_cnt;
> @@ -1049,6 +1049,11 @@ static struct idt_mw_cfg *idt_scan_mws(struct idt_ntb_dev *ndev, int port,
> int aprt_size;
> u32 data;
>
> + mws = devm_kcalloc(&ndev->ntb.pdev->dev, IDT_MAX_NR_MWS,
> + sizeof(*mws), GFP_KERNEL);
> + if (!mws)
> + return ERR_PTR(-ENOMEM);
> +
> /* Retrieve the array of the BARs registers */
> bars = portdata_tbl[port].bars;
>
> @@ -1103,16 +1108,7 @@ static struct idt_mw_cfg *idt_scan_mws(struct idt_ntb_dev *ndev, int port,
> }
> }
>
> - /* Allocate memory for memory window descriptors */
> - ret_mws = devm_kcalloc(&ndev->ntb.pdev->dev, *mw_cnt, sizeof(*ret_mws),
> - GFP_KERNEL);
> - if (!ret_mws)
> - return ERR_PTR(-ENOMEM);
> -
> - /* Copy the info of detected memory windows */
> - memcpy(ret_mws, mws, (*mw_cnt)*sizeof(*ret_mws));
> -
> - return ret_mws;
> + return mws;
> }
>
> /*
prev parent reply other threads:[~2025-02-21 15:47 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-21 8:57 [PATCH] ntb: reduce stack usage in idt_scan_mws Arnd Bergmann
2025-02-21 13:17 ` Damien Le Moal
2025-02-21 15:47 ` Dave Jiang [this message]
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=0e7e6ce7-7d7b-49cc-90eb-a07e831441d8@intel.com \
--to=dave.jiang@intel.com \
--cc=allenbh@gmail.com \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=bhelgaas@google.com \
--cc=dlemoal@kernel.org \
--cc=jdmason@kudzu.us \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
--cc=ntb@lists.linux.dev \
--cc=pstanner@redhat.com \
--cc=zhangjiao2@cmss.chinamobile.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 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.