Skip to content
OpenAdvisories
High · 8.2 CVE-2025-21710 EUVD-2025-5241GHSA-q383-xwj3-rcf5

tcp: correct handling of extreme memory squeeze

Published Feb 27, 2025 · Updated Aug 5, 2026 · Assigned by Linux

Vendor: Linux Product: Linux Package: linux Package: linux Package: linux-allwinner-5.19 Package: linux-aws Package: linux-aws-5.0 Package: linux-aws-5.11 Package: linux-aws-5.13 Package: linux-aws-5.19 Package: linux-aws-5.3 Package: linux-aws-5.8 Package: linux-aws-6.2 Package: linux-aws-6.5 Package: linux-aws-6.8 Package: linux-azure Package: linux-azure-5.11 Package: linux-azure-5.13 Package: linux-azure-5.19 Package: linux-azure-5.3 Package: linux-azure-5.8 Package: linux-azure-6.11 Package: linux-azure-6.2 Package: linux-azure-6.5 Package: linux-azure-6.8 Package: linux-azure-edge Package: linux-azure-fde Package: linux-azure-fde-5.19 Package: linux-azure-fde-6.2 Package: linux-azure-nvidia Package: linux-fips Package: linux-gcp Package: linux-gcp-5.11 Package: linux-gcp-5.13 Package: linux-gcp-5.19 Package: linux-gcp-5.3 Package: linux-gcp-5.8 Package: linux-gcp-6.11 Package: linux-gcp-6.2 Package: linux-gcp-6.5 Package: linux-gcp-6.8 Package: linux-gke Package: linux-gke-4.15 Package: linux-gke-5.15 Package: linux-gke-5.4 Package: linux-gkeop Package: linux-gkeop-5.15 Package: linux-gkeop-5.4 Package: linux-hwe Package: linux-hwe-5.11 Package: linux-hwe-5.13 Package: linux-hwe-5.19 Package: linux-hwe-5.8 Package: linux-hwe-6.11 Package: linux-hwe-6.2 Package: linux-hwe-6.5 Package: linux-hwe-6.8 Package: linux-hwe-edge Package: linux-ibm Package: linux-ibm-6.8 Package: linux-intel-5.13 Package: linux-intel-iot-realtime Package: linux-lowlatency Package: linux-lowlatency-hwe-5.19 Package: linux-lowlatency-hwe-6.11 Package: linux-lowlatency-hwe-6.2 Package: linux-lowlatency-hwe-6.5 Package: linux-lowlatency-hwe-6.8 Package: linux-nvidia Package: linux-nvidia-6.11 Package: linux-nvidia-6.2 Package: linux-nvidia-6.5 Package: linux-nvidia-6.8 Package: linux-nvidia-lowlatency Package: linux-nvidia-tegra Package: linux-oem Package: linux-oem-5.10 Package: linux-oem-5.13 Package: linux-oem-5.14 Package: linux-oem-5.17 Package: linux-oem-5.6 Package: linux-oem-6.0 Package: linux-oem-6.1 Package: linux-oem-6.11 Package: linux-oem-6.5 Package: linux-oem-6.8 Package: linux-oracle Package: linux-oracle-5.0 Package: linux-oracle-5.11 Package: linux-oracle-5.13 Package: linux-oracle-5.3 Package: linux-oracle-5.8 Package: linux-oracle-6.5 Package: linux-oracle-6.8 Package: linux-raspi Package: linux-raspi-realtime Package: linux-raspi2 Package: linux-realtime Package: linux-realtime-6.8 Package: linux-riscv Package: linux-riscv-5.11 Package: linux-riscv-5.19 Package: linux-riscv-5.8 Package: linux-riscv-6.5 Package: linux-riscv-6.8 Package: linux-starfive-5.19 Package: linux-starfive-6.2 Package: linux-starfive-6.5 Package: linux-xilinx Platform: Linux Ecosystem: Debian Ecosystem: Ubuntu

Description

In the Linux kernel, the following vulnerability has been resolved:

tcp: correct handling of extreme memory squeeze

Testing with iperf3 using the "pasta" protocol splicer has revealed
a problem in the way tcp handles window advertising in extreme memory
squeeze situations.

Under memory pressure, a socket endpoint may temporarily advertise
a zero-sized window, but this is not stored as part of the socket data.
The reasoning behind this is that it is considered a temporary setting
which shouldn't influence any further calculations.

However, if we happen to stall at an unfortunate value of the current
window size, the algorithm selecting a new value will consistently fail
to advertise a non-zero window once we have freed up enough memory.
This means that this side's notion of the current window size is
different from the one last advertised to the peer, causing the latter
to not send any data to resolve the sitution.

The problem occurs on the iperf3 server side, and the socket in question
is a completely regular socket with the default settings for the
fedora40 kernel. We do not use SO_PEEK or SO_RCVBUF on the socket.

The following excerpt of a logging session, with own comments added,
shows more in detail what is happening:

// tcp_v4_rcv(->)
// tcp_rcv_established(->)
[5201<->39222]: ==== Activating log @ net/ipv4/tcp_input.c/tcp_data_queue()/5257 ====
[5201<->39222]: tcp_data_queue(->)
[5201<->39222]: DROPPING skb [265600160..265665640], reason: SKB_DROP_REASON_PROTO_MEM
[rcv_nxt 265600160, rcv_wnd 262144, snt_ack 265469200, win_now 131184]
[copied_seq 259909392->260034360 (124968), unread 5565800, qlen 85, ofoq 0]
[OFO queue: gap: 65480, len: 0]
[5201<->39222]: tcp_data_queue(<-)
[5201<->39222]: __tcp_transmit_skb(->)
[tp->rcv_wup: 265469200, tp->rcv_wnd: 262144, tp->rcv_nxt 265600160]
[5201<->39222]: tcp_select_window(->)
[5201<->39222]: (inet_csk(sk)->icsk_ack.pending & ICSK_ACK_NOMEM) ? --> TRUE
[tp->rcv_wup: 265469200, tp->rcv_wnd: 262144, tp->rcv_nxt 265600160]
returning 0
[5201<->39222]: tcp_select_window(<-)
[5201<->39222]: ADVERTISING WIN 0, ACK_SEQ: 265600160
[5201<->39222]: [__tcp_transmit_skb(<-)
[5201<->39222]: tcp_rcv_established(<-)
[5201<->39222]: tcp_v4_rcv(<-)

// Receive queue is at 85 buffers and we are out of memory.
// We drop the incoming buffer, although it is in sequence, and decide
// to send an advertisement with a window of zero.
// We don't update tp->rcv_wnd and tp->rcv_wup accordingly, which means
// we unconditionally shrink the window.

[5201<->39222]: tcp_recvmsg_locked(->)
[5201<->39222]: __tcp_cleanup_rbuf(->) tp->rcv_wup: 265469200, tp->rcv_wnd: 262144, tp->rcv_nxt 265600160
[5201<->39222]: [new_win = 0, win_now = 131184, 2 * win_now = 262368]
[5201<->39222]: [new_win >= (2 * win_now) ? --> time_to_ack = 0]
[5201<->39222]: NOT calling tcp_send_ack()
[tp->rcv_wup: 265469200, tp->rcv_wnd: 262144, tp->rcv_nxt 265600160]
[5201<->39222]: __tcp_cleanup_rbuf(<-)
[rcv_nxt 265600160, rcv_wnd 262144, snt_ack 265469200, win_now 131184]
[copied_seq 260040464->260040464 (0), unread 5559696, qlen 85, ofoq 0]
returning 6104 bytes
[5201<->39222]: tcp_recvmsg_locked(<-)

// After each read, the algorithm for calculating the new receive
// window in __tcp_cleanup_rbuf() finds it is too small to advertise
// or to update tp->rcv_wnd.
// Meanwhile, the peer thinks the window is zero, and will not send
// any more data to trigger an update from the interrupt mode side.

[5201<->39222]: tcp_recvmsg_locked(->)
[5201<->39222]: __tcp_cleanup_rbuf(->) tp->rcv_wup: 265469200, tp->rcv_wnd: 262144, tp->rcv_nxt 265600160
[5201<->39222]: [new_win = 262144, win_now = 131184, 2 * win_n
---truncated---

Affected products

VendorProductAffectedFixed
Linux Linux 6.6 6.6.76

Fixed in Linux distributions

Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.

ReleasePackageFixed inAdvisory
Debian 14 linux 6.12.13-1 —
Debian 13 linux 6.12.13-1 —
ReleasePackageFixed inAdvisory
Ubuntu 24.04 LTS linux 6.8.0-64.67 USN-7651-1
Ubuntu 24.04 LTS linux-aws 6.8.0-1032.34 USN-7651-1
Ubuntu 24.04 LTS linux-azure 6.8.0-1034.39 USN-7737-1
Ubuntu 24.04 LTS linux-azure-nvidia 6.8.0-1022.23 USN-7737-1
Ubuntu 24.04 LTS linux-gcp 6.8.0-1033.35 USN-7651-4
Ubuntu 24.04 LTS linux-gcp-6.11 +1 6.11.0-1015.15~24.04.1 USN-7521-1
Ubuntu 24.04 LTS linux-gke 6.8.0-1028.32 USN-7651-3
Ubuntu 24.04 LTS linux-gkeop 6.8.0-1015.17 USN-7651-3
Ubuntu 24.04 LTS linux-hwe-6.11 6.11.0-26.26~24.04.1 USN-7521-1
Ubuntu 24.04 LTS linux-ibm 6.8.0-1029.29 USN-7651-2
Ubuntu 24.04 LTS linux-lowlatency 6.8.0-64.67.1 USN-7651-2
Ubuntu 24.04 LTS linux-lowlatency-hwe-6.11 6.11.0-1014.15~24.04.1 USN-7521-3
Ubuntu 24.04 LTS linux-nvidia 6.8.0-1031.34 USN-7651-3
Ubuntu 24.04 LTS linux-nvidia-6.11 6.11.0-1010.10 —
Ubuntu 24.04 LTS linux-nvidia-lowlatency 6.8.0-1031.34.1 USN-7651-3
Ubuntu 24.04 LTS linux-nvidia-tegra 6.8.0-1008.8 —
Ubuntu 24.04 LTS linux-oem-6.11 6.11.0-1022.22 USN-7521-1
Ubuntu 24.04 LTS linux-oem-6.8 6.8.0-1031.31 USN-7651-1
Ubuntu 24.04 LTS linux-oracle 6.8.0-1029.30 USN-7651-3
Ubuntu 24.04 LTS linux-raspi 6.8.0-1031.35 USN-7651-6
Ubuntu 24.04 LTS linux-riscv +2 No fix yet —
Ubuntu 24.04 LTS linux-xilinx 6.8.0-1017.18 —
Ubuntu 22.04 LTS linux-aws-6.8 6.8.0-1032.34~22.04.1 USN-7651-3
Ubuntu 22.04 LTS linux-azure-6.8 6.8.0-1034.39~22.04.1 USN-7737-1
Ubuntu 22.04 LTS linux-gcp-6.8 6.8.0-1033.35~22.04.1 USN-7651-4
Ubuntu 22.04 LTS linux-hwe-6.8 +1 6.8.0-64.67~22.04.1 USN-7653-1
Ubuntu 22.04 LTS linux-ibm-6.8 6.8.0-1029.29~22.04.1 USN-7651-2
Ubuntu 22.04 LTS linux-lowlatency-hwe-6.8 6.8.0-64.67.1~22.04.1 USN-7651-2
Ubuntu 22.04 LTS linux-nvidia-6.8 6.8.0-1031.34~22.04.1 USN-7651-3
Ubuntu 22.04 LTS linux-oracle-6.8 6.8.0-1029.30~22.04.1 USN-7651-3
Ubuntu 22.04 LTS linux-riscv +32 No fix yet —
Ubuntu 20.04 LTS linux-gke +28 No fix yet —
Ubuntu 18.04 LTS linux-gcp +14 No fix yet —
Ubuntu 16.04 LTS linux-hwe-edge No fix yet —
Show 3 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
Ubuntu Pro Realtime 24.04 LTS linux-raspi-realtime 6.8.0-2026.27 USN-7651-5
Ubuntu Pro Realtime 24.04 LTS linux-realtime 6.8.1-1025.26 USN-7652-1
Ubuntu Pro Realtime 22.04 LTS linux-realtime-6.8 6.8.1-1025.26~22.04.1 —
Ubuntu Pro FIPS-updates 24.04 LTS linux-fips 6.8.0-78.78+fips1 —
ReleasePackageFixed inAdvisory
SLES 15 SP7 kernel-64kb +5 6.4.0-150700.53.25.1 SUSE-SU-2025:4393-1
SLES 15 SP7 kernel-azure +2 6.4.0-150700.20.21.1 SUSE-SU-2025:4517-1
SLES 15 SP7 kernel-default-base 6.4.0-150700.53.25.1.150700.17.17.1 SUSE-SU-2025:4393-1
SLES 15 SP7 kernel-docs 6.4.0-150700.53.25.2 SUSE-SU-2025:4393-1
SLES 15 SP6 kernel-64kb +3 6.4.0-150600.23.81.3 SUSE-SU-2025:4422-1
SLES 15 SP6 kernel-azure +2 6.4.0-150600.8.58.1 SUSE-SU-2025:4505-1
SLES 15 SP6 kernel-default-base 6.4.0-150600.23.81.3.150600.12.36.3 SUSE-SU-2025:4422-1
SLES 15 SP6 kernel-docs +1 6.4.0-150600.23.81.1 SUSE-SU-2025:4422-1
SLES 15 SP6 kernel-source 6.4.0-150600.23.81.2 SUSE-SU-2025:4422-1
SLES 15 SP5 kernel-64kb +6 5.14.21-150500.55.182.1 SUSE-SU-2026:3595-1
SLES 15 SP5 kernel-default-base 5.14.21-150500.55.182.1.150500.6.85.2 SUSE-SU-2026:3595-1
SLES 15 SP4 kernel-64kb +6 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLES 15 SP4 kernel-default-base 5.14.21-150400.24.235.1.150400.24.118.3 SUSE-SU-2026:3593-1
Show 15 more (older releases, extended support, other products)
ReleasePackageFixed inAdvisory
SLES for SAP 15 SP5 kernel-default-base 5.14.21-150500.55.182.1.150500.6.85.2 SUSE-SU-2026:3595-1
SLES for SAP 15 SP5 kernel-docs +4 5.14.21-150500.55.182.1 SUSE-SU-2026:3595-1
SLES for SAP 15 SP4 kernel-default-base 5.14.21-150400.24.235.1.150400.24.118.3 SUSE-SU-2026:3593-1
SLES for SAP 15 SP4 kernel-docs +4 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLE Micro 6.1 kernel-default-base 6.4.0-38.1.21.15 SUSE-SU-2026:20496-1
SLE Micro 6.1 kernel-rt +1 6.4.0-39.1 SUSE-SU-2026:20059-1
SLE Micro 6.1 kernel-source +2 6.4.0-38.1 SUSE-SU-2026:20496-1
SLE Micro 6.0 kernel-default-base 6.4.0-38.1.21.15 SUSE-SU-2026:20473-1
SLE Micro 6.0 kernel-rt +1 6.4.0-39.1 SUSE-SU-2026:20039-1
SLE Micro 6.0 kernel-source +2 6.4.0-38.1 SUSE-SU-2026:20473-1
SLE Micro 5.5 kernel-default-base 5.14.21-150500.55.182.1.150500.6.85.2 SUSE-SU-2026:3595-1
SLE Micro 5.5 kernel-rt +1 5.14.21-150500.13.156.1 SUSE-SU-2026:3617-1
SLE Micro 5.5 kernel-source +1 5.14.21-150500.55.182.1 SUSE-SU-2026:3595-1
SLE Micro 5.4 kernel-default-base 5.14.21-150400.24.235.1.150400.24.118.3 SUSE-SU-2026:3593-1
SLE Micro 5.4 kernel-rt +1 5.14.21-150400.15.181.1 SUSE-SU-2026:3616-1
SLE Micro 5.4 kernel-source +1 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLE Micro 5.3 kernel-default-base 5.14.21-150400.24.235.1.150400.24.118.3 SUSE-SU-2026:3593-1
SLE Micro 5.3 kernel-rt +1 5.14.21-150400.15.181.1 SUSE-SU-2026:3616-1
SLE Micro 5.3 kernel-source +1 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLE Live Patching 15 SP7 kernel-default 6.4.0-150700.53.25.1 SUSE-SU-2025:4393-1
SLE Live Patching 15 SP7 kernel-livepatch-SLE15-SP7-RT_Update_7 1-150700.1.3.1 SUSE-SU-2025:4516-1
SLE Live Patching 15 SP7 kernel-livepatch-SLE15-SP7_Update_7 1-150700.15.3.1 SUSE-SU-2025:4393-1
SLE Live Patching 15 SP6 kernel-default 6.4.0-150600.23.81.3 SUSE-SU-2025:4422-1
SLE Live Patching 15 SP6 kernel-livepatch-SLE15-SP6-RT_Update_18 1-150600.1.3.1 SUSE-SU-2025:4521-1
SLE Live Patching 15 SP6 kernel-livepatch-SLE15-SP6_Update_18 1-150600.13.3.3 SUSE-SU-2025:4422-1
SLE Live Patching 15 SP5 kernel-default 5.14.21-150500.55.182.1 SUSE-SU-2026:3595-1
SLE Live Patching 15 SP5 kernel-livepatch-SLE15-SP5_Update_44 1-150500.11.5.1 SUSE-SU-2026:3595-1
SLE Live Patching 15 SP4 kernel-default 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLE Live Patching 15 SP4 kernel-livepatch-SLE15-SP4_Update_58 1-150400.9.7.1 SUSE-SU-2026:3593-1
SLE HPC 15 SP5 kernel-64kb +5 5.14.21-150500.55.182.1 SUSE-SU-2026:3595-1
SLE HPC 15 SP5 kernel-default-base 5.14.21-150500.55.182.1.150500.6.85.2 SUSE-SU-2026:3595-1
SLE HPC 15 SP4 kernel-64kb +5 5.14.21-150400.24.235.1 SUSE-SU-2026:3593-1
SLE HPC 15 SP4 kernel-default-base 5.14.21-150400.24.235.1.150400.24.118.3 SUSE-SU-2026:3593-1
SUSE Real Time Module 15 SP7 kernel-rt +2 6.4.0-150700.7.25.1 SUSE-SU-2025:4516-1
SUSE Real Time Module 15 SP6 kernel-rt +3 6.4.0-150600.10.61.1 SUSE-SU-2025:4521-1
ReleasePackageFixed inAdvisory
openSUSE Leap 15.6 dtb-aarch64 +3 6.4.0-150600.23.81.1 SUSE-SU-2025:4422-1
openSUSE Leap 15.6 kernel-64kb +5 6.4.0-150600.23.81.3 SUSE-SU-2025:4422-1
openSUSE Leap 15.6 kernel-azure +2 6.4.0-150600.8.58.1 SUSE-SU-2025:4505-1
openSUSE Leap 15.6 kernel-default-base 6.4.0-150600.23.81.3.150600.12.36.3 SUSE-SU-2025:4422-1
openSUSE Leap 15.6 kernel-rt +3 6.4.0-150600.10.61.1 SUSE-SU-2025:4521-1
openSUSE Leap 15.6 kernel-source 6.4.0-150600.23.81.2 SUSE-SU-2025:4422-1

Oracle Linux

ReleasePackageFixed inAdvisory
Oracle Linux 9 kernel-uek +34 6.12.0-101.33.4.3.el10uek ELSA-2025-20530, ELSA-2025-20480

Advisories 28

References