{"id":"CVE-2024-26582","state":"PUBLISHED","title":"net: tls: fix use-after-free with partial reads and async decrypt","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tls: fix use-after-free with partial reads and async decrypt\n\ntls_decrypt_sg doesn't take a reference on the pages from clear_skb,\nso the put_page() in tls_decrypt_done releases them, and we trigger\na use-after-free in process_rx_list when we try to read from the\npartially-read skb.","publishedAt":"2024-02-21T14:59:11.229Z","updatedAt":"2026-08-05T11:26:01.134Z","severity":{"score":9.8,"label":"Critical","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/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":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"20b4ed034872b4d024b26e2bc1092c3f80e5db96","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"d684763534b969cca1022e2a28645c7cc91f7fa5","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"754c9bab77a1b895b97bd99d754403c505bc79df","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"32b55c5ff9103b8508c1e04bfa5a08c64e7a925f","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tls/tls_sw.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.0","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.0","versionType":"semver"},{"version":"6.1.79","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.18","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.7.6","status":"unaffected","lessThanOrEqual":"6.7.*","versionType":"semver"},{"version":"6.8","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tls/tls_sw.c"]}],"references":["https://git.kernel.org/stable/c/20b4ed034872b4d024b26e2bc1092c3f80e5db96","https://git.kernel.org/stable/c/d684763534b969cca1022e2a28645c7cc91f7fa5","https://git.kernel.org/stable/c/754c9bab77a1b895b97bd99d754403c505bc79df","https://git.kernel.org/stable/c/32b55c5ff9103b8508c1e04bfa5a08c64e7a925f","https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/EZOU3745CWCDZ7EMKMXB2OEEIB5Q3IWM/"],"weaknesses":[],"ingestedAt":"2026-10-29T20:07:10.607Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2024/26xxx/CVE-2024-26582.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2024-26582","state":"PUBLISHED","datePublished":"2024-02-21T14:59:11.229Z","dateUpdated":"2026-08-05T11:26:01.134Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2024-02-19T14:20:24.125Z"},"containers":{"cna":{"title":"net: tls: fix use-after-free with partial reads and async decrypt","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tls: fix use-after-free with partial reads and async decrypt\n\ntls_decrypt_sg doesn't take a reference on the pages from clear_skb,\nso the put_page() in tls_decrypt_done releases them, and we trigger\na use-after-free in process_rx_list when we try to read from the\npartially-read skb."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"20b4ed034872b4d024b26e2bc1092c3f80e5db96","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"d684763534b969cca1022e2a28645c7cc91f7fa5","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"754c9bab77a1b895b97bd99d754403c505bc79df","versionType":"git"},{"version":"fd31f3996af2627106e22a9f8072764fede51161","status":"affected","lessThan":"32b55c5ff9103b8508c1e04bfa5a08c64e7a925f","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tls/tls_sw.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"6.0","status":"affected"},{"version":"0","status":"unaffected","lessThan":"6.0","versionType":"semver"},{"version":"6.1.79","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.18","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.7.6","status":"unaffected","lessThanOrEqual":"6.7.*","versionType":"semver"},{"version":"6.8","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/tls/tls_sw.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/20b4ed034872b4d024b26e2bc1092c3f80e5db96"},{"url":"https://git.kernel.org/stable/c/d684763534b969cca1022e2a28645c7cc91f7fa5"},{"url":"https://git.kernel.org/stable/c/754c9bab77a1b895b97bd99d754403c505bc79df"},{"url":"https://git.kernel.org/stable/c/32b55c5ff9103b8508c1e04bfa5a08c64e7a925f"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":9.8,"baseSeverity":"CRITICAL"},"scenarios":[{"lang":"en","value":"AV:N - The bug is in the kTLS receive path (net/tls/tls_sw.c) processing data from a remote TLS peer over TCP; the triggering condition (a record larger than the receiver's buffer, forcing the non-zero-copy clear_skb path) is chosen by the remote peer. Per kernel scoring guidance, kTLS bugs triggered by remote peer data are Network.\nAC:L - There is no race to win — the async completion callback frees the pages before process_rx_list() reads them, deterministically. The required preconditions are the default on mainstream deployments (TLS 1.2 + generic-gcm-aesni, which the SIMD wrapper always registers with CRYPTO_ALG_ASYNC) and the remaining one, a partial read, is forced at will by the peer sending oversized records.\nPR:N - The attacker is the remote TLS peer, which holds no privileges or account on the target system — any client that completes an anonymous TLS handshake with a kTLS-offloading server (or any malicious server a kTLS client connects to) can drive the bug. No local credentials are involved anywhere on the path.\nUI:N - The only local behavior required is an application calling recvmsg() on its kTLS socket with a buffer smaller than the incoming record, which is ordinary, continuous operation of any TLS-consuming server or client. No victim performs any special action.\nS:U - The corruption is confined to kernel memory managed by the same security authority; there is no VM, IOMMU, or sandbox boundary crossed. This is a standard in-kernel memory-safety issue.\nC:H - process_rx_list() copies the contents of already-freed pages directly into the userspace receive buffer, and the partial-read nature leaves the stale skb on rx_list so the leak repeats on later recvmsg() calls with a wide reallocation window. Attacker-driven spraying can place other sockets' plaintext, page-cache data, or slab contents into those pages, yielding a repeatable kernel memory disclosure primitive.\nI:H - Beyond the read, skb_release_data() issues a second put_page() on pages that have since been reallocated, dropping a live page's refcount to zero and freeing memory owned by an unrelated allocation. This cross-owner page use-after-free is a well-established route to arbitrary write and control-flow hijack via reuse as slab or page-table memory.\nA:H - The page refcount underflow triggers bad_page()/VM_BUG_ON_PAGE and corrupts the buddy allocator, and reading or reusing freed pages oopses immediately under KASAN or page poisoning. A remote peer can trigger this repeatedly, reliably panicking the machine."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T11:26:01.134Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.0","versionEndExcluding":"6.1.79"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.0","versionEndExcluding":"6.6.18"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.0","versionEndExcluding":"6.7.6"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"6.0","versionEndExcluding":"6.8"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CVE Program Container","references":[{"url":"https://git.kernel.org/stable/c/20b4ed034872b4d024b26e2bc1092c3f80e5db96","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/d684763534b969cca1022e2a28645c7cc91f7fa5","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/754c9bab77a1b895b97bd99d754403c505bc79df","tags":["x_transferred"]},{"url":"https://git.kernel.org/stable/c/32b55c5ff9103b8508c1e04bfa5a08c64e7a925f","tags":["x_transferred"]},{"url":"https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/EZOU3745CWCDZ7EMKMXB2OEEIB5Q3IWM/"}],"providerMetadata":{"shortName":"CVE","orgId":"af854a3a-2127-422b-91ae-364da2661108","dateUpdated":"2025-11-04T18:29:45.171Z"}},{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"timestamp":"2024-08-08T19:39:21.408800Z","id":"CVE-2024-26582","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2024-08-08T19:39:35.386Z"}}]}}}