{"id":"CVE-2026-52935","state":"PUBLISHED","title":"xfrm: espintcp: do not reuse an in-progress partial send","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: espintcp: do not reuse an in-progress partial send\n\nespintcp keeps a single in-flight transmit in ctx->partial.\nBefore building a new sk_msg, espintcp_sendmsg() first tries to flush\nthat state through espintcp_push_msgs().\n\nFor blocking callers, espintcp_push_msgs() may return success even when\nthe previous partial send is still pending. espintcp_sendmsg() would\nthen reinitialize emsg->skmsg and reuse ctx->partial while the old\ntransfer still owns that state.\n\nDo not rebuild the send message when ctx->partial is still in progress.\nIf espintcp_push_msgs() returns with emsg->len still set, fail the new\nsend instead of overwriting the live partial state.\n\nThis is a memory-safety fix: reusing the live partial-send state can\nleave a stale offset attached to a new sk_msg and lead to an out-of-\nbounds read in the send path.\n\ntcp_sendmsg_locked() already handles waiting for send buffer memory, so\nthe fix here is just to preserve espintcp's one-message-at-a-time\ntransmit state.","publishedAt":"2026-06-24T07:14:25.988Z","updatedAt":"2026-10-19T19:47:08.440Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"6564e9c7af7e1dc7bfe7f3093b728abe484d7630","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"1777ceac4bea5e568a5ad44b7f9bb219c1db21b6","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"8c6c691bf062dc0753a139a4ab8cb92a70fcf8f3","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"aa82a078f70f7ff88ba7d1017134e79d1ac140f2","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"ba21439302db9a82fe4edbed1e38a97271529421","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"f9b38a8fbfa07f1deaf7ee1eb38fa8b21ea13990","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"37487d55bf3300e3d2c1368da5c2bd3e3834ea4f","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"c381039ade2e161ab08c0eda73c4f8b9a7115928","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/xfrm/espintcp.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.6","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.6","versionType":"semver"},{"version":"5.10.259","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.210","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.176","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.143","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.94","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.36","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.13","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/xfrm/espintcp.c"]}],"references":["https://git.kernel.org/stable/c/6564e9c7af7e1dc7bfe7f3093b728abe484d7630","https://git.kernel.org/stable/c/1777ceac4bea5e568a5ad44b7f9bb219c1db21b6","https://git.kernel.org/stable/c/8c6c691bf062dc0753a139a4ab8cb92a70fcf8f3","https://git.kernel.org/stable/c/aa82a078f70f7ff88ba7d1017134e79d1ac140f2","https://git.kernel.org/stable/c/ba21439302db9a82fe4edbed1e38a97271529421","https://git.kernel.org/stable/c/f9b38a8fbfa07f1deaf7ee1eb38fa8b21ea13990","https://git.kernel.org/stable/c/37487d55bf3300e3d2c1368da5c2bd3e3834ea4f","https://git.kernel.org/stable/c/c381039ade2e161ab08c0eda73c4f8b9a7115928"],"weaknesses":["CWE-362"],"ingestedAt":"2026-10-29T20:12:16.098Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/52xxx/CVE-2026-52935.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-52935","state":"PUBLISHED","datePublished":"2026-06-24T07:14:25.988Z","dateUpdated":"2026-10-19T19:47:08.440Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-06-09T07:44:35.369Z"},"containers":{"cna":{"title":"xfrm: espintcp: do not reuse an in-progress partial send","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nxfrm: espintcp: do not reuse an in-progress partial send\n\nespintcp keeps a single in-flight transmit in ctx->partial.\nBefore building a new sk_msg, espintcp_sendmsg() first tries to flush\nthat state through espintcp_push_msgs().\n\nFor blocking callers, espintcp_push_msgs() may return success even when\nthe previous partial send is still pending. espintcp_sendmsg() would\nthen reinitialize emsg->skmsg and reuse ctx->partial while the old\ntransfer still owns that state.\n\nDo not rebuild the send message when ctx->partial is still in progress.\nIf espintcp_push_msgs() returns with emsg->len still set, fail the new\nsend instead of overwriting the live partial state.\n\nThis is a memory-safety fix: reusing the live partial-send state can\nleave a stale offset attached to a new sk_msg and lead to an out-of-\nbounds read in the send path.\n\ntcp_sendmsg_locked() already handles waiting for send buffer memory, so\nthe fix here is just to preserve espintcp's one-message-at-a-time\ntransmit state."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"6564e9c7af7e1dc7bfe7f3093b728abe484d7630","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"1777ceac4bea5e568a5ad44b7f9bb219c1db21b6","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"8c6c691bf062dc0753a139a4ab8cb92a70fcf8f3","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"aa82a078f70f7ff88ba7d1017134e79d1ac140f2","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"ba21439302db9a82fe4edbed1e38a97271529421","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"f9b38a8fbfa07f1deaf7ee1eb38fa8b21ea13990","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"37487d55bf3300e3d2c1368da5c2bd3e3834ea4f","versionType":"git"},{"version":"e27cca96cd68fa2c6814c90f9a1cfd36bb68c593","status":"affected","lessThan":"c381039ade2e161ab08c0eda73c4f8b9a7115928","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/xfrm/espintcp.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.6","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.6","versionType":"semver"},{"version":"5.10.259","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.210","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.176","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.143","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.94","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.36","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.13","status":"unaffected","lessThanOrEqual":"7.0.*","versionType":"semver"},{"version":"7.1","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/xfrm/espintcp.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/6564e9c7af7e1dc7bfe7f3093b728abe484d7630"},{"url":"https://git.kernel.org/stable/c/1777ceac4bea5e568a5ad44b7f9bb219c1db21b6"},{"url":"https://git.kernel.org/stable/c/8c6c691bf062dc0753a139a4ab8cb92a70fcf8f3"},{"url":"https://git.kernel.org/stable/c/aa82a078f70f7ff88ba7d1017134e79d1ac140f2"},{"url":"https://git.kernel.org/stable/c/ba21439302db9a82fe4edbed1e38a97271529421"},{"url":"https://git.kernel.org/stable/c/f9b38a8fbfa07f1deaf7ee1eb38fa8b21ea13990"},{"url":"https://git.kernel.org/stable/c/37487d55bf3300e3d2c1368da5c2bd3e3834ea4f"},{"url":"https://git.kernel.org/stable/c/c381039ade2e161ab08c0eda73c4f8b9a7115928"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The vulnerable code is reached through local socket syscalls: an attacker creates/uses a TCP socket, sets `TCP_ULP` to `espintcp`, and calls send/sendmsg. It is not directly triggerable by unauthenticated network packets alone.\nAC:L - The attacker can create the needed partial-send condition by controlling the TCP peer or receiver behavior and filling the send buffer, then issuing another send. No race or condition outside attacker control is required.\nPR:L - Setting an already-registered TCP ULP does not require CAP_NET_ADMIN, and ordinary local users can create TCP sockets and call setsockopt/sendmsg. XFRM administration is privileged, but it is not required for this lowest-privilege path to `espintcp_sendmsg`.\nUI:N - Exploitation does not require any victim user action after the attacker has local code execution. The attacker directly drives the socket operations.\nS:U - The impact remains within the kernel and its managed resources on the same host. This is not a VM escape, IOMMU bypass, or cross-authority boundary violation.\nC:H - The stale partial-send offset can produce an out-of-bounds read in the TCP send path, potentially exposing kernel memory through transmitted data. Because the read is not strictly bounded to a small fixed disclosure, high confidentiality impact is appropriate.\nI:H - The corrupted espintcp/sk_msg state can build invalid bvec/socket-buffer references and disturb page or send-buffer accounting, which is a plausible kernel memory integrity primitive. Under the required higher-severity rule for uncertainty, this is scored as high integrity impact.\nA:H - The invalid scatterlist/bvec state can lead to kernel warnings, invalid page references, refcount/accounting corruption, or crashes in the send/cleanup path. A local attacker can repeat the trigger, so availability impact is high."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:31:53.368Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.10.259"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"5.15.210"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.1.176"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.6.143"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.12.94"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"6.18.36"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"7.0.13"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.6","versionEndExcluding":"7.1"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-52935","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"version":"2.0.3","timestamp":"2026-10-16T15:23:01.117587Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-362","lang":"en","type":"CWE","description":"CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T19:47:08.440Z"}}]}}}