From: Lorenzo Bianconi <lorenzo.bianconi@oss.qualcomm.com>
To: Aldo Ariel Panzardo <qwe.aldo@gmail.com>
Cc: maxime.chevallier@bootlin.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
sashiko-bot@kernel.org
Subject: Re: [PATCH] net: stmmac: guard FCS stripping against runt frames
Date: Wed, 23 Sep 2026 22:37:09 +0200 [thread overview]
Message-ID: <arQ4dVkI9llhXCDx@lore-desk> (raw)
In-Reply-To: <20260923162339.1375698-1-qwe.aldo@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 2561 bytes --]
> stmmac_rx_zc() and stmmac_rx() strip the 4-byte FCS from the last
> buffer when ACS (Automatic Checksum Stripping) is disabled:
>
> buf1_len -= ETH_FCS_LEN;
> len -= ETH_FCS_LEN;
>
> Neither path checks that the buffer actually contains at least
> ETH_FCS_LEN bytes. A runt frame delivered by the hardware with a
> buf1_len or buf2_len smaller than 4 underflows the unsigned
> subtraction, producing a very large value. In the XDP zero-copy path
> this wraps data_end backwards:
>
> buf->xdp->data_end = buf->xdp->data + buf1_len;
>
> giving the XDP/BPF program an enormous data region that extends into
> adjacent kernel memory.
>
> Add the missing lower-bound checks so that undersized frames are
> silently passed through without stripping.
>
> Fixes: bba2556efad6 ("net: stmmac: Enable RX via AF_XDP zero-copy")
> Cc: stable@vger.kernel.org
> Reported-by: Sashiko <sashiko-bot@kernel.org>
> Signed-off-by: Aldo Ariel Panzardo <qwe.aldo@gmail.com>
> ---
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> index 1fb5f80..4526669 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
> @@ -5636,7 +5636,8 @@ static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
> len += buf1_len;
>
> /* ACS is disabled; strip manually. */
> - if (likely(!(status & rx_not_ls))) {
> + if (likely(!(status & rx_not_ls)) &&
> + likely(buf1_len >= ETH_FCS_LEN)) {
> buf1_len -= ETH_FCS_LEN;
> len -= ETH_FCS_LEN;
> }
> @@ -5808,10 +5809,10 @@ static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
>
> /* ACS is disabled; strip manually. */
> if (likely(!(status & rx_not_ls))) {
> - if (buf2_len) {
> + if (buf2_len >= ETH_FCS_LEN) {
I do not think this approach is correct since, at least theoretically, the FCS can be
splitted between buf1 and buf2.
Please note the non-XDP case is already fixed in the following patch:
https://lore.kernel.org/netdev/20260923-stmmac-rx-sg-fix-v3-1-ed26fea7180d@oss.qualcomm.com/
The XDP-case will be properly handled introducing XDP multi-buff support (I
have already posted v1 and I need to respin the v2).
Regards,
Lorenzo
> buf2_len -= ETH_FCS_LEN;
> len -= ETH_FCS_LEN;
> - } else if (buf1_len) {
> + } else if (buf1_len >= ETH_FCS_LEN) {
> buf1_len -= ETH_FCS_LEN;
> len -= ETH_FCS_LEN;
> }
> --
> 2.43.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
next prev parent reply other threads:[~2026-09-23 20:37 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-23 16:23 [PATCH] net: stmmac: guard FCS stripping against runt frames Aldo Ariel Panzardo
2026-09-23 19:03 ` Andrew Lunn
2026-09-23 19:33 ` Aldo Ariel Panzardo
2026-09-23 20:53 ` Andrew Lunn
2026-09-23 20:37 ` Lorenzo Bianconi [this message]
2026-09-24 2:16 ` Andrew Lunn
2026-09-24 7:57 ` Lorenzo Bianconi
2026-09-24 12:51 ` Andrew Lunn
2026-09-24 13:10 ` Lorenzo Bianconi
[not found] ` <CAP48HfvkCNb2_UnpvTvn_O3K+vgtDK55JjXPBF0cbBrmb_6oCA@mail.gmail.com>
2026-09-24 14:10 ` Andrew Lunn
2026-09-27 16:38 ` netdev-bot+sashiko
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=arQ4dVkI9llhXCDx@lore-desk \
--to=lorenzo.bianconi@oss.qualcomm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=qwe.aldo@gmail.com \
--cc=sashiko-bot@kernel.org \
--cc=stable@vger.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.