CVE-2025-39758 in the critical feed json
RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages
published 2025-09-11 13 mo ago modified 2026-10-19 20 d ago also EUVD-2025-28954
- cvss
- 9.8
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 36%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages
Ever since commit c2ff29e99a76 ("siw: Inline do_tcp_sendpages()"), we have been doing this:
static int siw_tcp_sendpages(struct socket *s, struct page **page, int offset, size_t size) [...] /* Calculate the number of bytes we need to push, for this page * specifically */ size_t bytes = min_t(size_t, PAGE_SIZE - offset, size); /* If we can't splice it, then copy it in, as normal */ if (!sendpage_ok(page[i])) msg.msg_flags &= ~MSG_SPLICE_PAGES; /* Set the bvec pointing to the page, with len $bytes */ bvec_set_page(&bvec, page[i], bytes, offset); /* Set the iter to $size, aka the size of the whole sendpages (!!!) */ iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, size); try_page_again: lock_sock(sk); /* Sendmsg with $size size (!!!) */ rv = tcp_sendmsg_locked(sk, &msg, size);
This means we've been sending oversized iov_iters and tcp_sendmsg calls for a while. This has a been a benign bug because sendpage_ok() always returned true. With the recent slab allocator changes being slowly introduced into next (that disallow sendpage on large kmalloc allocations), we have recently hit out-of-bounds crashes, due to slight differences in iov_iter behavior between the MSG_SPLICE_PAGES and "regular" copy paths:
(MSG_SPLICE_PAGES) skb_splice_from_iter iov_iter_extract_pages iov_iter_extract_bvec_pages uses i->nr_segs to correctly stop in its tracks before OoB'ing everywhere skb_splice_from_iter gets a "short" read
(!MSG_SPLICE_PAGES) skb_copy_to_page_nocache copy=iov_iter_count [...] copy_from_iter /* this doesn't help */ if (unlikely(iter->count < len)) len = iter->count; iterate_bvec ... and we run off the bvecs
Fix this by properly setting the iov_iter's byte count, plus sending the correct byte count to tcp_sendmsg_locked.
Patch / fix
- Linux Linux 6.6.103, 6.12.43, 6.15.11, 6.16.2, 6.17
- linux Debian 13 6.12.43-1
- linux Debian 14 6.16.3-1
debian advisories DEBIAN-CVE-2025-39758
- linux Ubuntu 24.04 LTS 6.8.0-100.100
- linux-aws Ubuntu 24.04 LTS 6.8.0-1046.49
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1047.50
- linux-gke Ubuntu 24.04 LTS 6.8.0-1043.48
- linux-ibm Ubuntu 24.04 LTS 6.8.0-1044.44
- linux-azure Ubuntu 24.04 LTS 6.8.0-1046.52
- linux-gkeop Ubuntu 24.04 LTS 6.8.0-1030.33
- linux-raspi Ubuntu 24.04 LTS 6.8.0-1047.51
ubuntu advisories UBUNTU-CVE-2025-39758
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-rt Linux Micro 6.2 6.12.0-160000.6.1
- kernel-64kb SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.6.1
- kernel-source SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.6.1
- kernel-default SLES 16.0, SLE High Availability Extension 16.0, Linux Micro 6.2 +1 more 6.12.0-160000.6.1
- kernel-default-base SLES 16.0, Linux Micro 6.2, SLES for SAP applications 16.0 6.12.0-160000.6.1.160000.2.4
- kernel-syms SLES 16.0, Linux Micro Extras 6.2, SLES for SAP applications 16.0 6.12.0-160000.6.1
- kernel-obs-qa SLES for SAP applications 16.0, SLES 16.0 6.12.0-160000.6.1
- kernel-kvmsmall SLES for SAP applications 16.0, SLES 16.0 6.12.0-160000.6.1
suse advisories SUSE-SU-2025:21074-1SUSE-SU-2025:21139-1SUSE-SU-2026:20560-1SUSE-SU-2025:21179-1SUSE-SU-2025:4141-1SUSE-SU-2025:4132-1
- kernel-rt openSUSE Leap 16.0 6.12.0-160000.6.1
- dtb-aarch64 openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-64kb openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-syms openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-obs-qa openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-source openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-default openSUSE Leap 16.0 6.12.0-160000.6.1
- kernel-kvmsmall openSUSE Leap 16.0 6.12.0-160000.6.1
opensuse advisories openSUSE-SU-2025:20081-1
- git.kernel.org/stable/c/b47c4b7cb78b6382c6d1af0bfc0d8218e4f445cc commit
- git.kernel.org/stable/c/5661fdd218c2799001b88c17acd19f4395e4488e commit
- git.kernel.org/stable/c/673cf582fd788af12cdacfb62a6a593083542481 commit
- git.kernel.org/stable/c/42ebc16d9d2563f1a1ce0f05b643ee68d54fabf8 commit
- git.kernel.org/stable/c/edf82bc8150570167a33a7d54627d66614cbf841 commit
- git.kernel.org/stable/c/c18646248fed07683d4cee8a8af933fc4fe83c0d commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2025-39758 updated
kernel: RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelnot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
Exploit prediction
0.42% chance of exploitation in the next 30 days, higher than 36% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 9.8 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Technology feeds
References
- git.kernel.org /stable/c/b47c4b7cb78b6382c6d1af0bfc0d8218e4f445cc
-
git.kernel.org
/stable/c/5661fdd218c2799001b88c17acd19f4395e4488e
patch
-
git.kernel.org
/stable/c/673cf582fd788af12cdacfb62a6a593083542481
patch
-
git.kernel.org
/stable/c/42ebc16d9d2563f1a1ce0f05b643ee68d54fabf8
patch
-
git.kernel.org
/stable/c/edf82bc8150570167a33a7d54627d66614cbf841
patch
-
git.kernel.org
/stable/c/c18646248fed07683d4cee8a8af933fc4fe83c0d
patch
Sources
- CVE List CVE-2025-39758
- NVD CVE-2025-39758
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.