{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2025-38616",
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "state": "PUBLISHED",
        "assignerShortName": "Linux",
        "dateReserved": "2025-04-16T04:51:24.029Z",
        "datePublished": "2025-08-22T13:01:23.217Z",
        "dateUpdated": "2026-08-27T12:39:35.730Z"
    },
    "containers": {
        "cna": {
            "providerMetadata": {
                "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
                "shortName": "Linux",
                "dateUpdated": "2026-08-27T12:39:35.730Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntls: handle data disappearing from under the TLS ULP\n\nTLS expects that it owns the receive queue of the TCP socket.\nThis cannot be guaranteed in case the reader of the TCP socket\nentered before the TLS ULP was installed, or uses some non-standard\nread API (eg. zerocopy ones). Replace the WARN_ON() and a buggy\nearly exit (which leaves anchor pointing to a freed skb) with real\nerror handling. Wipe the parsing state and tell the reader to retry.\n\nWe already reload the anchor every time we (re)acquire the socket lock,\nso the only condition we need to avoid is an out of bounds read\n(not having enough bytes in the socket for previously parsed record len).\n\nIf some data was read from under TLS but there's enough in the queue\nwe'll reload and decrypt what is most likely not a valid TLS record.\nLeading to some undefined behavior from TLS perspective (corrupting\na stream? missing an alert? missing an attack?) but no kernel crash\nshould take place."
                }
            ],
            "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 vulnerability is triggered by a local out-of-band consumer of the TCP receive queue (e.g. TCP_ZEROCOPY_RECEIVE getsockopt or a reader active before the TLS ULP was installed); a remote peer only supplies encrypted bytes and cannot itself make data disappear from under the ULP, so it is reachable only via local syscalls on the attacker's own socket.\nAC:L - The attacker owns and sequences every step—install kTLS, feed data over loopback, consume the queue via zerocopy receive, then recvmsg—all serialized under their own socket lock, making the UAF/OOB read fire deterministically rather than depending on any uncontrolled condition.\nPR:L - Installing the TLS ULP, setting RX crypto keys, using TCP_ZEROCOPY_RECEIVE, and calling recvmsg require no capability whatsoever (tls_init only needs an ESTABLISHED TCP socket), so any basic unprivileged local user qualifies.\nUI:N - The attacking process performs the entire sequence itself on a socket it controls, requiring no action from any other user or victim.\nS:U - The freed/out-of-bounds skb memory read during decryption stays entirely within the kernel's own security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - The anchor is left pointing at a freed skb and the decrypt path reads up to a full record length (~16KB) beyond the valid data, a use-after-free/out-of-bounds read over attacker-groomable freed kernel memory that can disclose kernel contents.\nI:H - The use-after-free lets the attacker control the freed skb contents via heap spraying (a classic write-primitive enabler), and TLS can additionally be made to decrypt garbage—corrupting the stream or silently dropping alerts/attacks—so integrity is high.\nA:H - Dereferencing a freed skb's frag_list and reading past the available bytes readily triggers a kernel oops/panic, the very crash the fix was written to prevent."
                        }
                    ]
                }
            ],
            "affected": [
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "unaffected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "net/tls/tls.h",
                        "net/tls/tls_strp.c",
                        "net/tls/tls_sw.c"
                    ],
                    "versions": [
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "ef50eaab631f9bf519ddbdfa42ccb0528adc1fc8",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "f1fe99919f629f980d0b8a7ff16950bffe06a859",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "eb0336f213fe88bbdb7d2b19c9c9ec19245a3155",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "db3658a12d5ec4db7185ae7476151a50521b7207",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "2fb97ed9e2672b4f6e24ce206ac1a875ce4bcb38",
                            "status": "affected",
                            "versionType": "git"
                        },
                        {
                            "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417",
                            "lessThan": "6db015fc4b5d5f63a64a193f65d98da3a7fc811d",
                            "status": "affected",
                            "versionType": "git"
                        }
                    ]
                },
                {
                    "product": "Linux",
                    "vendor": "Linux",
                    "defaultStatus": "affected",
                    "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                    "programFiles": [
                        "net/tls/tls.h",
                        "net/tls/tls_strp.c",
                        "net/tls/tls_sw.c"
                    ],
                    "versions": [
                        {
                            "version": "6.0",
                            "status": "affected"
                        },
                        {
                            "version": "0",
                            "lessThan": "6.0",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.1.185",
                            "lessThanOrEqual": "6.1.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.6.103",
                            "lessThanOrEqual": "6.6.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.12.43",
                            "lessThanOrEqual": "6.12.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.15.11",
                            "lessThanOrEqual": "6.15.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.16.2",
                            "lessThanOrEqual": "6.16.*",
                            "status": "unaffected",
                            "versionType": "semver"
                        },
                        {
                            "version": "6.17",
                            "lessThanOrEqual": "*",
                            "status": "unaffected",
                            "versionType": "original_commit_for_fix"
                        }
                    ]
                }
            ],
            "cpeApplicability": [
                {
                    "nodes": [
                        {
                            "operator": "OR",
                            "negate": false,
                            "cpeMatch": [
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.1.185"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.6.103"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.12.43"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.15.11"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.16.2"
                                },
                                {
                                    "vulnerable": true,
                                    "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                                    "versionStartIncluding": "6.0",
                                    "versionEndExcluding": "6.17"
                                }
                            ]
                        }
                    ]
                }
            ],
            "references": [
                {
                    "url": "https://git.kernel.org/stable/c/ef50eaab631f9bf519ddbdfa42ccb0528adc1fc8"
                },
                {
                    "url": "https://git.kernel.org/stable/c/f1fe99919f629f980d0b8a7ff16950bffe06a859"
                },
                {
                    "url": "https://git.kernel.org/stable/c/eb0336f213fe88bbdb7d2b19c9c9ec19245a3155"
                },
                {
                    "url": "https://git.kernel.org/stable/c/db3658a12d5ec4db7185ae7476151a50521b7207"
                },
                {
                    "url": "https://git.kernel.org/stable/c/2fb97ed9e2672b4f6e24ce206ac1a875ce4bcb38"
                },
                {
                    "url": "https://git.kernel.org/stable/c/6db015fc4b5d5f63a64a193f65d98da3a7fc811d"
                }
            ],
            "title": "tls: handle data disappearing from under the TLS ULP",
            "x_generator": {
                "engine": "bippy-1.2.0"
            }
        },
        "adp": [
            {
                "metrics": [
                    {
                        "other": {
                            "type": "ssvc",
                            "content": {
                                "id": "CVE-2025-38616",
                                "role": "CISA Coordinator",
                                "options": [
                                    {
                                        "Exploitation": "none"
                                    },
                                    {
                                        "Automatable": "no"
                                    },
                                    {
                                        "Technical Impact": "partial"
                                    }
                                ],
                                "version": "2.0.3",
                                "timestamp": "2026-06-10T20:40:59.907591Z"
                            }
                        }
                    }
                ],
                "title": "CISA ADP Vulnrichment",
                "providerMetadata": {
                    "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
                    "shortName": "CISA-ADP",
                    "dateUpdated": "2026-06-11T18:44:07.792Z"
                }
            }
        ]
    }
}