CVE-2026-80904: net/tls: Fail tls_sw_splice_read() after a failed async decrypt
In the Linux kernel, the following vulnerability has been resolved:
net/tls: Fail tlsswspliceread() after a failed async decrypt
When an async decrypt fails, tlsdecryptdone() records the error in ctx->asyncwait.err and calls tlserrabort(), which stores it in skerr. tlsswrecvmsg() and tlsswreadsock() each read asyncwait.err once they hold the reader lock and fail the call: a record that did not authenticate breaks the connection.
tlsswspliceread() has no such check, and skerr does not stand in for one. tlsrxrecwait() tests skerr only inside the loop it skips whenever a record is already parsed, and the first reader to reach sockerror() clears it, while asyncwait.err persists. A splice therefore keeps delivering records on a connection that recvmsg() and readsock() refuse to read.
Read asyncwait.err in tlsswspliceread() as the other two readers do.
Affected Software
Event History
Frequently Asked Questions
Which systems are exposed to this behavior?
Systems using the Linux kernel TLS software receive path are affected when data is consumed through tls_sw_splice_read() and an asynchronous TLS decrypt failure occurs. The issue concerns connections where a record has failed authentication.
What condition is required for exploitation or impact?
An asynchronous decrypt must fail, causing an authentication failure on a TLS record, and the connection must subsequently be read using the splice read path. Other reader paths, tls_sw_recvmsg() and tls_sw_read_sock(), already check the persistent async error and fail the read.
How can I tell whether a connection has encountered the affected state?
The affected state is indicated by an error recorded in ctx->async_wait.err after async decryption fails. sk_err alone is not reliable for detection because it can be cleared by the first reader that calls sock_error(), while async_wait.err persists.
What is the remediation?
Apply a Linux kernel update containing the fix that makes tls_sw_splice_read() check async_wait.err and fail after an asynchronous decrypt error. The provided stable kernel references identify commits containing the correction.