{"id":"CVE-2026-64046","state":"PUBLISHED","title":"net: tls: prevent chain-after-chain in plain text SG","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tls: prevent chain-after-chain in plain text SG\n\nSashiko points out that if end = 0 (start != 0) the current\ncode will create a chain link to content type right after\nthe wrap link:\n\n  This would create a chain where the wrap link points directly\n  to another chain link. The scatterlist API sg_next iterator\n  does not recursively resolve consecutive chain links.\n\nmeaning this is illegal input to crypto.\n\nThe wrapping link is unnecessary if end = 0. end is the entry after\nthe last one used so end = 0 means there's nothing pushed after\nthe wrap:\n\n   end         start            i\n    v            v              v\n  [   ]...[   ][ d ][ d ][ d ][ d ][rsv for wrap]\n\nSkip the wrapping in this case.\n\nTLS 1.3 can use the \"wrapping slot\" for it's chaining if end = 0.\nThis avoids the chain-after-chain.\n\nMove the wrap chaining before marking END and chaining off content\ntype, that feels like more logical ordering to me, but should not\nmatter from functional perspective.","publishedAt":"2026-07-19T15:39:31.129Z","updatedAt":"2026-10-19T20:28:10.562Z","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":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"49a5faaa471ddcd37b6893970c9916eb836e7c31","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"91359966e247c0244c66d50bbb8e74aefa4321c3","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"410351158dfef2d67fea6603680b3a6013c6ed9d","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"acdc12b71c9aa4be5dcd2c8062753c6d2033e235","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"929b1548e63ac72e104c07d8ee8cbbeeba2fa89a","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"af855f4c966afafef74faf8390c7b86568c0d46d","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"b9c015ef1a7bf1e8dc67f21c6381f36deb2c3a36","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"ff26a0e8377dec07e4a7230db7675bed1b9a6d03","versionType":"git"},{"version":"d529d6c9f7e3aaeac13c4948f79799ccb825f29d","status":"affected","versionType":"git"},{"version":"5.4.14","status":"affected","lessThan":"5.5","versionType":"semver"}],"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":"5.5","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.258","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.209","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.175","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.142","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.92","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.34","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.11","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/tls/tls_sw.c"]}],"references":["https://git.kernel.org/stable/c/49a5faaa471ddcd37b6893970c9916eb836e7c31","https://git.kernel.org/stable/c/91359966e247c0244c66d50bbb8e74aefa4321c3","https://git.kernel.org/stable/c/410351158dfef2d67fea6603680b3a6013c6ed9d","https://git.kernel.org/stable/c/acdc12b71c9aa4be5dcd2c8062753c6d2033e235","https://git.kernel.org/stable/c/929b1548e63ac72e104c07d8ee8cbbeeba2fa89a","https://git.kernel.org/stable/c/af855f4c966afafef74faf8390c7b86568c0d46d","https://git.kernel.org/stable/c/b9c015ef1a7bf1e8dc67f21c6381f36deb2c3a36","https://git.kernel.org/stable/c/ff26a0e8377dec07e4a7230db7675bed1b9a6d03"],"weaknesses":["CWE-20"],"ingestedAt":"2026-10-29T20:12:41.951Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/64xxx/CVE-2026-64046.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-64046","state":"PUBLISHED","datePublished":"2026-07-19T15:39:31.129Z","dateUpdated":"2026-10-19T20:28:10.562Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-07-19T07:54:57.029Z"},"containers":{"cna":{"title":"net: tls: prevent chain-after-chain in plain text SG","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: tls: prevent chain-after-chain in plain text SG\n\nSashiko points out that if end = 0 (start != 0) the current\ncode will create a chain link to content type right after\nthe wrap link:\n\n  This would create a chain where the wrap link points directly\n  to another chain link. The scatterlist API sg_next iterator\n  does not recursively resolve consecutive chain links.\n\nmeaning this is illegal input to crypto.\n\nThe wrapping link is unnecessary if end = 0. end is the entry after\nthe last one used so end = 0 means there's nothing pushed after\nthe wrap:\n\n   end         start            i\n    v            v              v\n  [   ]...[   ][ d ][ d ][ d ][ d ][rsv for wrap]\n\nSkip the wrapping in this case.\n\nTLS 1.3 can use the \"wrapping slot\" for it's chaining if end = 0.\nThis avoids the chain-after-chain.\n\nMove the wrap chaining before marking END and chaining off content\ntype, that feels like more logical ordering to me, but should not\nmatter from functional perspective."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"49a5faaa471ddcd37b6893970c9916eb836e7c31","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"91359966e247c0244c66d50bbb8e74aefa4321c3","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"410351158dfef2d67fea6603680b3a6013c6ed9d","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"acdc12b71c9aa4be5dcd2c8062753c6d2033e235","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"929b1548e63ac72e104c07d8ee8cbbeeba2fa89a","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"af855f4c966afafef74faf8390c7b86568c0d46d","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"b9c015ef1a7bf1e8dc67f21c6381f36deb2c3a36","versionType":"git"},{"version":"9aaaa56845a06aeabdd597cbe19492dc01f281ec","status":"affected","lessThan":"ff26a0e8377dec07e4a7230db7675bed1b9a6d03","versionType":"git"},{"version":"d529d6c9f7e3aaeac13c4948f79799ccb825f29d","status":"affected","versionType":"git"},{"version":"5.4.14","status":"affected","lessThan":"5.5","versionType":"semver"}],"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":"5.5","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.5","versionType":"semver"},{"version":"5.10.258","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.209","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.175","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.142","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.92","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.34","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.0.11","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/tls/tls_sw.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/49a5faaa471ddcd37b6893970c9916eb836e7c31"},{"url":"https://git.kernel.org/stable/c/91359966e247c0244c66d50bbb8e74aefa4321c3"},{"url":"https://git.kernel.org/stable/c/410351158dfef2d67fea6603680b3a6013c6ed9d"},{"url":"https://git.kernel.org/stable/c/acdc12b71c9aa4be5dcd2c8062753c6d2033e235"},{"url":"https://git.kernel.org/stable/c/929b1548e63ac72e104c07d8ee8cbbeeba2fa89a"},{"url":"https://git.kernel.org/stable/c/af855f4c966afafef74faf8390c7b86568c0d46d"},{"url":"https://git.kernel.org/stable/c/b9c015ef1a7bf1e8dc67f21c6381f36deb2c3a36"},{"url":"https://git.kernel.org/stable/c/ff26a0e8377dec07e4a7230db7675bed1b9a6d03"}],"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 kTLS software TX (`tls_push_record` in `net/tls/tls_sw.c`), reached when encrypting outbound TLS 1.3 records on a connected socket; a remote TLS peer triggers this path on internet-facing servers and L7 proxies (kTLS+sockmap) by causing the host to send TLS responses.\nAC:L - The wrapped `sk_msg` ring state (`end=0`, `start!=0`) needed to hit the chain-after-chain bug is deterministically created via BPF `sk_msg` helpers (`bpf_msg_push_data`/`bpf_msg_pop_data`), which the attacker controls on the local path or can steer on servers whose sockmap programs manipulate messages based on connection traffic.\nPR:N - Exploitation does not require Linux capabilities on the attacking side when targeting a TLS service already running kTLS with sockmap; any unauthenticated remote client that completes a TLS 1.3 handshake and causes record transmission can reach the vulnerable encrypt path.\nUI:N - No victim user action beyond normal automated TLS server/client operation is required; triggering the bug is achieved through crafted network traffic and/or syscall-driven sends on an already-established kTLS socket.\nS:U - Impact is confined to kernel memory corruption and privilege escalation within the same host/kernel security boundary, not a cross-boundary escape such as VM guest-to-host or IOMMU bypass.\nC:H - Passing a scatterlist with consecutive chain links to `crypto_aead_encrypt` is illegal; the crypto scatterwalk treats chain entries as data pages, causing out-of-bounds kernel memory reads and information disclosure primitives.\nI:H - The malformed scatterlist fed to AEAD encryption can cause the crypto layer to write ciphertext to incorrect kernel addresses, providing a memory corruption primitive that can be developed into arbitrary kernel write or code execution.\nA:H - Invalid scatterlist traversal in the crypto path can dereference bogus page pointers and kernel-oops the system; encryption failure also invokes `tls_err_abort`, reliably disrupting the affected TLS connection and potentially the hosting service."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:38:38.201Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"5.10.258"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"5.15.209"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.1.175"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.6.142"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.12.92"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"6.18.34"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"7.0.11"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.5","versionEndExcluding":"7.1"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.4.14"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-64046","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"yes"},{"Technical Impact":"total"}],"version":"2.0.3","timestamp":"2026-10-16T15:35:52.163580Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-20","lang":"en","type":"CWE","description":"CWE-20 Improper Input Validation"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T20:28:10.562Z"}}]}}}