summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorMartin Schiller <ms@dev.tdt.de>2026-03-31 09:43:18 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-04-11 14:29:34 +0200
commitf953f11ccf4afe6feb635c08145f4240d9a6b544 (patch)
treebf0224a71af28728b272e7da49c3609a1efab7a0 /net
parentc87dd137c0dad07cc55f98181ff380b0c23d2878 (diff)
net/x25: Fix overflow when accumulating packets
[ Upstream commit a1822cb524e89b4cd2cf0b82e484a2335496a6d9 ] Add a check to ensure that `x25_sock.fraglen` does not overflow. The `fraglen` also needs to be resetted when purging `fragment_queue` in `x25_clear_queues()`. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Suggested-by: Yiming Qian <yimingqian591@gmail.com> Signed-off-by: Martin Schiller <ms@dev.tdt.de> Link: https://patch.msgid.link/20260331-x25_fraglen-v4-2-3e69f18464b4@dev.tdt.de Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'net')
-rw-r--r--net/x25/x25_in.c4
-rw-r--r--net/x25/x25_subr.c1
2 files changed, 5 insertions, 0 deletions
diff --git a/net/x25/x25_in.c b/net/x25/x25_in.c
index 0dbc73efab1c..e47ebd8acd21 100644
--- a/net/x25/x25_in.c
+++ b/net/x25/x25_in.c
@@ -34,6 +34,10 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
struct sk_buff *skbo, *skbn = skb;
struct x25_sock *x25 = x25_sk(sk);
+ /* make sure we don't overflow */
+ if (x25->fraglen + skb->len > USHRT_MAX)
+ return 1;
+
if (more) {
x25->fraglen += skb->len;
skb_queue_tail(&x25->fragment_queue, skb);
diff --git a/net/x25/x25_subr.c b/net/x25/x25_subr.c
index 0285aaa1e93c..159708d9ad20 100644
--- a/net/x25/x25_subr.c
+++ b/net/x25/x25_subr.c
@@ -40,6 +40,7 @@ void x25_clear_queues(struct sock *sk)
skb_queue_purge(&x25->interrupt_in_queue);
skb_queue_purge(&x25->interrupt_out_queue);
skb_queue_purge(&x25->fragment_queue);
+ x25->fraglen = 0;
}