Executive brief
The Linux kernel's TLS (Transport Layer Security) implementation contains a flaw in how it processes empty data records, which are legitimately used in TLS 1.3 for privacy protection. When a zero-length TLS record is received, the affected code enters an infinite loop, blocking all subsequent data on that connection. This can be exploited by a remote attacker to disable encrypted connections, causing a denial of service.
Technical details
The vulnerability is a logic error in the tls_sw_read_sock() function in net/tls/tls_sw.c. When an empty TLS application_data record (full_len == 0) is decrypted, the read_actor callback returns zero. The code incorrectly treats this zero return as consumer backpressure and requeues the empty record at the head of the rx_list, blocking all later records. The fix recognizes empty data records before invoking the actor, consumes them immediately (as tls_sw_recvmsg() does), and continues processing. The vulnerability is network-reachable and requires no authentication or user interaction; a peer can send a crafted zero-length TLS record to trigger the stall. Patches are available in upstream kernel commits 3be28e2c9cd0230cb51fd4967df095273afd3848 and later.
Affected products
- Linux Linux kernel All versions with tls_sw_read_sock() implementation (approximately 4.16+)
Timeline
- 2026-08-15: disclosed
- 2026-07-07: patched: Upstream fix committed