{"id":17356,"date":"2026-09-05T02:31:01","date_gmt":"2026-09-04T18:31:01","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80852"},"modified":"2026-09-05T02:31:01","modified_gmt":"2026-09-04T18:31:01","slug":"cve-2026-80852","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80852","title":{"rendered":"CVE-2026-80852 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ntls: device: fix out-"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tls: device: fix out-of-bounds write in tls_append_frag()<\/p>\n<p>Found with syzkaller and a local syzbot instance running on top of a<br \/>\nnetdevsim TLS offload emulation; tls_device.c is otherwise only reachable<br \/>\non a machine with a NIC that implements the offload.<\/p>\n<p>tls_push_data() only checks whether the open record still has room for<br \/>\nanother frag at the bottom of its loop, and the MSG_MORE early break<br \/>\nskips that check.  The record survives to the next syscall with the frag<br \/>\ncount it already had, and tls_append_frag() does not check either, so<br \/>\nwith TLS_TX_ZEROCOPY_RO every splice(SPLICE_F_MORE) of a byte or two adds<br \/>\na non-coalescing pipe page and num_frags walks off the end of<br \/>\ntls_record_info.frags[MAX_SKB_FRAGS].  Once the record is pushed,<br \/>\ntls_push_record() runs the same index over sg_tx_data[MAX_SKB_FRAGS] and<br \/>\nthe sg_set_page() writes land on the destruct_work that follows it, which<br \/>\nthe workqueue then calls.<\/p>\n<p>The byte limit is fine because copy drops to 0 and the loop falls through<br \/>\nto the same check; the frag count has no such feedback.<\/p>\n<p>Push the record rather than keep a full one open, which is what a plain<br \/>\nTCP socket does &#8211; tcp_sendmsg_locked() uses tcp_mark_push() and<br \/>\nnew_segment in both the copy and the MSG_SPLICE_PAGES paths, and tls_sw<br \/>\nalready sets full_record when the sk_msg ring fills up, MSG_MORE or not.<\/p>\n<p>  BUG: KASAN: slab-out-of-bounds in tls_append_frag ( net\/tls\/tls_device.c:269)<br \/>\n  Write of size 8 at addr ffff8881104d1530 by task tls_oob\/450<\/p>\n<p>  CPU: 2 UID: 0 PID: 450 Comm: tls_oob Not tainted 7.2.0-rc7+ #329 PREEMPT<br \/>\n  Call Trace:<\/p>\n<p>   dump_stack_lvl (lib\/dump_stack.c:94 lib\/dump_stack.c:120)<br \/>\n   print_report (mm\/kasan\/report.c:378 mm\/kasan\/report.c:482)<br \/>\n   kasan_report (mm\/kasan\/report.c:595)<br \/>\n   tls_append_frag (net\/tls\/tls_device.c:269)<br \/>\n   tls_push_data (net\/tls\/tls_device.c:518)<br \/>\n   tls_device_sendmsg (net\/tls\/tls_device.c:583)<br \/>\n   inet_sendmsg (net\/ipv4\/af_inet.c:865)<br \/>\n   sock_sendmsg (net\/socket.c:775 net\/socket.c:790 net\/socket.c:813)<br \/>\n   splice_to_socket (fs\/splice.c:884)<br \/>\n   do_splice (fs\/splice.c:936 fs\/splice.c:1349)<br \/>\n   __do_splice (fs\/splice.c:1431)<br \/>\n   __x64_sys_splice (fs\/splice.c:1634 fs\/splice.c:1616)<br \/>\n   do_syscall_64 (arch\/x86\/entry\/syscall_64.c:63 arch\/x86\/entry\/syscall_64.c:94)<br \/>\n   entry_SYSCALL_64_after_hwframe (arch\/x86\/entry\/entry_64.S:121)<\/p>\n<p>and, once the record is pushed:<\/p>\n<p>  UBSAN: array-index-out-of-bounds in net\/tls\/tls_device.c:300:24<br \/>\n  index 18 is out of range for type &#8216;skb_frag_t [17]&#8217;<br \/>\n  UBSAN: array-index-out-of-bounds in net\/tls\/tls_device.c:301:41<br \/>\n  index 18 is out of range for type &#8216;scatterlist [17]&#8217;<br \/>\n  UBSAN: array-index-out-of-bounds in net\/tls\/tls_device.c:302:39<br \/>\n  index 18 is out of range for type &#8216;scatterlist [17]&#8217;<br \/>\n  UBSAN: array-index-out-of-bounds in net\/tls\/tls_device.c:307:38<br \/>\n  index 26 is out of range for type &#8216;scatterlist [17]&#8217;<\/p>\n<p>  kernel tried to execute NX-protected page &#8211; exploit attempt? (uid: 0)<br \/>\n  BUG: unable to handle page fault for address: ffffea000411a680<br \/>\n  #PF: supervisor instruction fetch in kernel mode<br \/>\n  #PF: error_code(0x0011) &#8211; permissions violation<br \/>\n  Oops: Oops: 0011 [#1] SMP KASAN PTI<br \/>\n  Workqueue: ktls_device_destruct 0xffffea000411a680<br \/>\n  RIP: 0010:0xffffea000411a680<br \/>\n  Call Trace:<\/p>\n<p>   worker_thread (kernel\/workqueue.c:3405 kernel\/workqueue.c:3486)<br \/>\n   kthread (kernel\/kthread.c:436)<br \/>\n   ret_from_fork (arch\/x86\/kernel\/process.c:158)<br \/>\n   ret_from_fork_asm (arch\/x86\/entry\/entry_64.S:245)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tls: device: fix out-of-bounds write in tls_append_frag()<\/p>\n<p>Found with syzkaller and a local syzbot instance running on top of a<br \/>\nnet<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17356","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}