CVE-2026-80852 in Linux
Riassunto
di VulDB • 04/09/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
tls: device: correzione della scrittura fuori dai limiti in tls_append_frag()
Trovata con syzkaller e un'istanza locale di syzbot eseguita sopra l'emulazione dell'offload TLS su netdevsim; tls_device.c è altrimenti raggiungibile solo su una macchina dotata di NIC che implementa tale offload.
tls_push_data() verifica soltanto se il record aperto ha ancora spazio per un altro frag alla fine del suo ciclo, e la rottura anticipata (early break) MSG_MORE salta tale controllo. Il record sopravvive fino alla syscall successiva con il conteggio dei frag già presente, e tls_append_frag() non effettua alcun controllo; pertanto, con TLS_TX_ZEROCOPY_RO ogni splice(SPLICE_F_MORE) di un paio di byte aggiunge una pagina del pipe che non viene coalesciata e num_frags supera l'indice finale di tls_record_info.frags[MAX_SKB_FRAGS]. Una volta inviato il record, tls_push_record() esegue lo stesso indice su sg_tx_data[MAX_SKB_FRAGS] e le scritture di sg_set_page() finiscono sul destruct_work che segue, che successivamente viene chiamato dal workqueue.
Il limite in byte è corretto perché la copia scende a 0 e il ciclo prosegue fino allo stesso controllo; il conteggio dei frag non dispone di un feedback simile.
Si invia (push) il record anziché mantenerne uno pieno aperto, come fa una normale socket TCP: tcp_sendmsg_locked() utilizza tcp_mark_push() e new_segment sia nel percorso di copia che in quello MSG_SPLICE_PAGES, e tls_sw imposta già full_record quando l'anello sk_msg si riempie, indipendentemente dalla presenza di MSG_MORE.
BUG: KASAN: slab-out-of-bounds in tls_append_frag ( net/tls/tls_device.c:269) Write of size 8 at addr ffff8881104d1530 by task tls_oob/450
CPU: 2 UID: 0 PID: 450 Comm: tls_oob Not tainted 7.2.0-rc7+ #329 PREEMPT Call Trace: <TASK> dump_stack_lvl (lib/dump_stack.c:94 lib/dump_stack.c:120) print_report (mm/kasan/report.c:378 mm/kasan/report.c:482) kasan_report (mm/kasan/report.c:595) tls_append_frag (net/tls/tls_device.c:269) tls_push_data (net/tls/tls_device.c:518) tls_device_sendmsg (net/tls/tls_device.c:583) inet_sendmsg (net/ipv4/af_inet.c:865) sock_sendmsg (net/socket.c:775 net/socket.c:790 net/socket.c:813) splice_to_socket (fs/splice.c:884) do_splice (fs/splice.c:936 fs/splice.c:1349) __do_splice (fs/splice.c:1431) __x64_sys_splice (fs/splice.c:1634 fs/splice.c:1616) do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94) entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:121) </TASK>
e, una volta inviato il record:
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:300:24 index 18 is out of range for type 'skb_frag_t [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:301:41 index 18 is out of range for type 'scatterlist [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:302:39 index 18 is out of range for type 'scatterlist [17]'
UBSAN: array-index-out-of-bounds in net/tls/tls_device.c:307:38 index 26 is out of range for type 'scatterlist [17]'
kernel tried to execute NX-protected page - exploit attempt? (uid: 0) BUG: unable to handle page fault for address: ffffea000411a680 #PF: supervisor instruction fetch in kernel mode #PF: error_code(0x0011) - permissions violation Oops: Oops: 0011 [#1] SMP KASAN PTI
Workqueue: ktls_device_destruct 0xffffea000411a680 RIP: 0010:0xffffea000411a680 Call Trace: <TASK> worker_thread (kernel/workqueue.c:3405 kernel/workqueue.c:3486) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:158) ret_from_fork_asm (arch/x86/entry/entry_64.S:245) </TASK>
If you want to get best quality of vulnerability data, you may have to visit VulDB.