KernelScan.io

HIGH Introduced in 5.19

tls SpliceRead Bypass

CVE-2026-80904

CVSS 7.5 / 10.0 KernelScan AI

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N

01

In the Linux kernel, the following vulnerability has been resolved: net/tls: Fail tls_sw_splice_read() after a failed async decrypt When an async decrypt fails, tls_decrypt_done() records the error in ctx->async_wait.err and calls tls_err_abort(), which stores it in sk_err. tls_sw_recvmsg() and tls_sw_read_sock() each read async_wait.err once they hold the reader lock and fail the call: a record that did not authenticate breaks the connection. tls_sw_splice_read() has no such check, and sk_err does not stand in for one. tls_rx_rec_wait() tests sk_err only inside the loop it skips whenever a record is already parsed, and the first reader to reach sock_error() clears it, while async_wait.err persists. A splice therefore keeps delivering records on a connection that recvmsg() and read_sock() refuse to read. Read async_wait.err in tls_sw_splice_read() as the other two readers do.

02

Engine v0.6.0

Risk summary

A remote peer or man-in-the-middle on a kernel TLS connection can send a corrupted TLS record that fails async decryption. The splice read path does not check the resulting error and continues delivering data, bypassing TLS integrity guarantees. Any application using kTLS with splice reads on a network-exposed TCP socket is at risk of receiving unauthenticated data.

Affectednet/tls/tls_sw.c (kernel TLS software implementation)

Vulnerability analysis

When an asynchronous TLS record decryption fails, the error is recorded in a persistent connection-level field that the regular receive and read-sock paths check before delivering data. The splice read path omits this check, so it keeps delivering records on a connection that the other two readers refuse to touch. A remote peer or network-level attacker who sends a tampered TLS record can therefore inject unauthenticated data into an application that uses kernel TLS with splice reads, defeating the integrity guarantee TLS is supposed to provide. The fix adds the same error-status check to the splice path that the other readers already perform, causing splice to fail the call and break the connection when a decrypt error is pending.

03

BranchIntroducedFixed inPatch commit
6.15.196.1.184a808aadff634
6.125.196.12.10518ae1e95f208
6.185.196.18.4682d9269f01eb
6.65.196.6.15306c2a53604fa
7.15.197.1.104b177911eb9f
mainline5.197.2976df67f463d
cip/6.15.196.1.187-cip60a808aadff634
cip/6.1-rt5.196.1.189-cip61-rt32a808aadff634
cip/6.125.196.12.108-cip3118ae1e95f208

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.108-cip31
cip/6.1Fixed in 6.1.187-cip60
cip/6.1-rtFixed in 6.1.189-cip61-rt32