linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] strparser: Fix signed/unsigned mismatch bug
@ 2025-11-04 17:42 Nate Karstens
  2025-11-04 23:28 ` Sabrina Dubroca
  2025-11-05 17:34 ` Nate Karstens
  0 siblings, 2 replies; 14+ messages in thread
From: Nate Karstens @ 2025-11-04 17:42 UTC (permalink / raw)
  To: netdev
  Cc: Nate Karstens, Nate Karstens, Tom Herbert, stable,
	David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Simon Horman, John Fastabend, Dr. David Alan Gilbert,
	Jiayuan Chen, linux-kernel

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. This change ensures both len values are
cast to `ssize_t`.

This appears to cause an issue with ktls when multiple TLS PDUs are
included in a single TCP segment.

Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
Cc: stable@vger.kernel.org
---
 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)
 				 */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread
* [PATCH net v2] strparser: Fix signed/unsigned mismatch bug
@ 2025-11-06 22:28 Nate Karstens
  2025-11-07  9:56 ` Jacob Keller
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Nate Karstens @ 2025-11-06 22:28 UTC (permalink / raw)
  To: netdev
  Cc: Nate Karstens, Nate Karstens, Tom Herbert, Sabrina Dubroca,
	Jacob Keller, stable, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Simon Horman, Martin KaFai Lau,
	Jakub Sitnicki, Jiayuan Chen, Dr. David Alan Gilbert, Tom Herbert,
	linux-kernel

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@garmin.com>
Cc: stable@vger.kernel.org
Fixes: 43a0c6751a32 ("strparser: Stream parser for messages")
---
 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)
 				 */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-11-08  2:30 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-04 17:42 [PATCH] strparser: Fix signed/unsigned mismatch bug Nate Karstens
2025-11-04 23:28 ` Sabrina Dubroca
2025-11-05 17:34 ` Nate Karstens
2025-11-05 22:29   ` Jacob Keller
2025-11-05 23:12     ` Nate Karstens
2025-11-05 23:47       ` Jacob Keller
2025-11-06 15:22         ` Sabrina Dubroca
2025-11-06 16:36           ` Nate Karstens
2025-11-06 16:51             ` [PATCH net v2] " Nate Karstens
2025-11-06 22:22               ` Jakub Kicinski
  -- strict thread matches above, loose matches on Subject: below --
2025-11-06 22:28 Nate Karstens
2025-11-07  9:56 ` Jacob Keller
2025-11-07 15:01 ` Sabrina Dubroca
2025-11-08  2:30 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).