[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <98c774ea-943d-43f0-a29d-b540bf289939@intel.com>
Date: Fri, 7 Nov 2025 01:56:30 -0800
From: Jacob Keller <jacob.e.keller@...el.com>
To: Nate Karstens <nate.karstens@...min.com>, <netdev@...r.kernel.org>
CC: Nate Karstens <nate.karstens@...il.com>, Tom Herbert <tom@...ntonium.net>,
Sabrina Dubroca <sd@...asysnail.net>, <stable@...r.kernel.org>, "David S.
Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, "Jakub
Kicinski" <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>, Simon Horman
<horms@...nel.org>, Martin KaFai Lau <martin.lau@...nel.org>, Jakub Sitnicki
<jakub@...udflare.com>, Jiayuan Chen <mrpre@....com>, "Dr. David Alan
Gilbert" <linux@...blig.org>, Tom Herbert <tom@...bertland.com>,
<linux-kernel@...r.kernel.org>
Subject: Re: [PATCH net v2] strparser: Fix signed/unsigned mismatch bug
On 11/6/2025 2:28 PM, Nate Karstens wrote:
> The `len` member of the sk_buff is an unsigned int. This is cast to
> `ssize_t` (a signed type) for the first sk_buff in the comparison,
> but not the second sk_buff. On 32-bit systems, this can result in
> an integer underflow for certain values because unsigned arithmetic
> is being used.
>
> This appears to be an oversight: if the intention was to use unsigned
> arithmetic, then the first cast would have been omitted. The change
> ensures both len values are cast to `ssize_t`.
>
> The underflow causes an issue with ktls when multiple TLS PDUs are
> included in a single TCP segment. The mainline kernel does not use
> strparser for ktls anymore, but this is still useful for other
> features that still use strparser, and for backporting.
>
> Signed-off-by: Nate Karstens <nate.karstens@...min.com>
> Cc: stable@...r.kernel.org
> Fixes: 43a0c6751a32 ("strparser: Stream parser for messages")
> ---
Reviewed-by: Jacob Keller <jacob.e.keller@...el.com>
> net/strparser/strparser.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/strparser/strparser.c b/net/strparser/strparser.c
> index 43b1f558b33d..e659fea2da70 100644
> --- a/net/strparser/strparser.c
> +++ b/net/strparser/strparser.c
> @@ -238,7 +238,7 @@ static int __strp_recv(read_descriptor_t *desc, struct sk_buff *orig_skb,
> strp_parser_err(strp, -EMSGSIZE, desc);
> break;
> } else if (len <= (ssize_t)head->len -
> - skb->len - stm->strp.offset) {
> + (ssize_t)skb->len - stm->strp.offset) {
> /* Length must be into new skb (and also
> * greater than zero)
> */
Download attachment "OpenPGP_signature.asc" of type "application/pgp-signature" (237 bytes)
Powered by blists - more mailing lists