summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorMartin Schiller <ms@dev.tdt.de>2026-03-31 10:43:18 +0300
committerPaolo Abeni <pabeni@redhat.com>2026-04-02 14:36:08 +0300
commita1822cb524e89b4cd2cf0b82e484a2335496a6d9 (patch)
tree2848b3b99fd5a54942cadc15c619b73e0f16f358 /net
parentd10a26aa4d072320530e6968ef945c8c575edf61 (diff)
downloadlinux-a1822cb524e89b4cd2cf0b82e484a2335496a6d9.tar.xz
net/x25: Fix overflow when accumulating packets
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>
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;
}