CVE-2025-38616 (GCVE-0-2025-38616)
Vulnerability from cvelistv5
Published
2025-08-22 13:01
Modified
2025-08-28 14:44
Severity ?
VLAI Severity ?
EPSS score ?
Summary
In the Linux kernel, the following vulnerability has been resolved:
tls: handle data disappearing from under the TLS ULP
TLS expects that it owns the receive queue of the TCP socket.
This cannot be guaranteed in case the reader of the TCP socket
entered before the TLS ULP was installed, or uses some non-standard
read API (eg. zerocopy ones). Replace the WARN_ON() and a buggy
early exit (which leaves anchor pointing to a freed skb) with real
error handling. Wipe the parsing state and tell the reader to retry.
We already reload the anchor every time we (re)acquire the socket lock,
so the only condition we need to avoid is an out of bounds read
(not having enough bytes in the socket for previously parsed record len).
If some data was read from under TLS but there's enough in the queue
we'll reload and decrypt what is most likely not a valid TLS record.
Leading to some undefined behavior from TLS perspective (corrupting
a stream? missing an alert? missing an attack?) but no kernel crash
should take place.
References
Impacted products
Vendor | Product | Version | |||||||
---|---|---|---|---|---|---|---|---|---|
▼ | Linux | Linux |
Version: 84c61fe1a75b4255df1e1e7c054c9e6d048da417 Version: 84c61fe1a75b4255df1e1e7c054c9e6d048da417 Version: 84c61fe1a75b4255df1e1e7c054c9e6d048da417 Version: 84c61fe1a75b4255df1e1e7c054c9e6d048da417 Version: 84c61fe1a75b4255df1e1e7c054c9e6d048da417 |
||||||
|
{ "containers": { "cna": { "affected": [ { "defaultStatus": "unaffected", "product": "Linux", "programFiles": [ "net/tls/tls.h", "net/tls/tls_strp.c", "net/tls/tls_sw.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "lessThan": "f1fe99919f629f980d0b8a7ff16950bffe06a859", "status": "affected", "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417", "versionType": "git" }, { "lessThan": "eb0336f213fe88bbdb7d2b19c9c9ec19245a3155", "status": "affected", "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417", "versionType": "git" }, { "lessThan": "db3658a12d5ec4db7185ae7476151a50521b7207", "status": "affected", "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417", "versionType": "git" }, { "lessThan": "2fb97ed9e2672b4f6e24ce206ac1a875ce4bcb38", "status": "affected", "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417", "versionType": "git" }, { "lessThan": "6db015fc4b5d5f63a64a193f65d98da3a7fc811d", "status": "affected", "version": "84c61fe1a75b4255df1e1e7c054c9e6d048da417", "versionType": "git" } ] }, { "defaultStatus": "affected", "product": "Linux", "programFiles": [ "net/tls/tls.h", "net/tls/tls_strp.c", "net/tls/tls_sw.c" ], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [ { "status": "affected", "version": "6.0" }, { "lessThan": "6.0", "status": "unaffected", "version": "0", "versionType": "semver" }, { "lessThanOrEqual": "6.6.*", "status": "unaffected", "version": "6.6.103", "versionType": "semver" }, { "lessThanOrEqual": "6.12.*", "status": "unaffected", "version": "6.12.43", "versionType": "semver" }, { "lessThanOrEqual": "6.15.*", "status": "unaffected", "version": "6.15.11", "versionType": "semver" }, { "lessThanOrEqual": "6.16.*", "status": "unaffected", "version": "6.16.2", "versionType": "semver" }, { "lessThanOrEqual": "*", "status": "unaffected", "version": "6.17-rc2", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "cpeMatch": [ { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.6.103", "versionStartIncluding": "6.0", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.12.43", "versionStartIncluding": "6.0", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.15.11", "versionStartIncluding": "6.0", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.16.2", "versionStartIncluding": "6.0", "vulnerable": true }, { "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.17-rc2", "versionStartIncluding": "6.0", "vulnerable": true } ], "negate": false, "operator": "OR" } ] } ], "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\u0027s enough in the queue\nwe\u0027ll 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." } ], "providerMetadata": { "dateUpdated": "2025-08-28T14:44:12.916Z", "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux" }, "references": [ { "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" } } }, "cveMetadata": { "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "assignerShortName": "Linux", "cveId": "CVE-2025-38616", "datePublished": "2025-08-22T13:01:23.217Z", "dateReserved": "2025-04-16T04:51:24.029Z", "dateUpdated": "2025-08-28T14:44:12.916Z", "state": "PUBLISHED" }, "dataType": "CVE_RECORD", "dataVersion": "5.1", "vulnerability-lookup:meta": { "nvd": "{\"cve\":{\"id\":\"CVE-2025-38616\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-08-22T14:15:46.017\",\"lastModified\":\"2025-08-28T15:15:55.793\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"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\u0027s enough in the queue\\nwe\u0027ll 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.\"},{\"lang\":\"es\",\"value\":\"En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: tls: gestionar la desaparici\u00f3n de datos bajo el ULP de TLS TLS espera poseer la cola de recepci\u00f3n del socket TCP. Esto no se puede garantizar en caso de que el lector del socket TCP haya entrado antes de que se instalara el ULP de TLS o utilice alguna API de lectura no est\u00e1ndar (p. ej., las de copia cero). Reemplace WARN_ON() y una salida temprana con errores (que deja el ancla apuntando a un skb liberado) con un manejo de errores real. Limpie el estado de an\u00e1lisis y d\u00edgale al lector que lo vuelva a intentar. Ya recargamos el ancla cada vez que (re)adquirimos el bloqueo del socket, por lo que la \u00fanica condici\u00f3n que debemos evitar es una lectura fuera de los l\u00edmites (no tener suficientes bytes en el socket para la longitud del registro analizado previamente). Si se leyeron algunos datos bajo TLS pero hay suficientes en la cola, recargaremos y descifraremos lo que probablemente no sea un registro TLS v\u00e1lido. Esto genera un comportamiento indefinido desde la perspectiva de TLS (\u00bfcorromper una transmisi\u00f3n? \u00bfperder una alerta? \u00bfperder un ataque?) pero no deber\u00eda producirse ninguna falla del kernel.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/2fb97ed9e2672b4f6e24ce206ac1a875ce4bcb38\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/6db015fc4b5d5f63a64a193f65d98da3a7fc811d\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/db3658a12d5ec4db7185ae7476151a50521b7207\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/eb0336f213fe88bbdb7d2b19c9c9ec19245a3155\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/f1fe99919f629f980d0b8a7ff16950bffe06a859\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}" } }
Loading…
Loading…
Sightings
Author | Source | Type | Date |
---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.
Loading…