{"id":14878,"date":"2026-09-04T19:02:16","date_gmt":"2026-09-04T11:02:16","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63801"},"modified":"2026-09-04T19:02:16","modified_gmt":"2026-09-04T11:02:16","slug":"cve-2026-63801","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63801","title":{"rendered":"CVE-2026-63801 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ntipc: fix slab-use-af"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tipc: fix slab-use-after-free Read in tipc_aead_decrypt_done<\/p>\n<p>tipc_aead_decrypt() goes straight from tipc_bearer_hold(b) to<br \/>\ncrypto_aead_decrypt(req) without taking a reference on the netns, unlike<br \/>\nthe encrypt path. When crypto_aead_decrypt() is offloaded asynchronously<br \/>\n(e.g. the SIMD aead wrapper queuing to cryptd), the cryptd worker runs<br \/>\ntipc_aead_decrypt_done() later. If the bearer&#8217;s netns is torn down in the<br \/>\nmeantime, cleanup_net() -&gt; tipc_exit_net() -&gt; tipc_crypto_stop() frees the<br \/>\nper-netns tipc_crypto, and the completion then reads it:<br \/>\ntipc_aead_decrypt_done() dereferences aead-&gt;crypto-&gt;stats and<br \/>\naead-&gt;crypto-&gt;net, and tipc_crypto_rcv_complete() dereferences<br \/>\naead-&gt;crypto-&gt;aead[] and the node table &#8212; reading freed memory.<\/p>\n<p>Decoded KASAN splat (v7.1-rc7, CONFIG_KASAN_INLINE + TIPC + TIPC_CRYPTO):<\/p>\n<p>  BUG: KASAN: slab-use-after-free in tipc_aead_decrypt_done (net\/tipc\/crypto.c:999)<br \/>\n  Read of size 8 at addr ffff8881056258a8 by task kworker\/u16:2\/51<br \/>\n  Workqueue: events_unbound<br \/>\n  Call Trace:<br \/>\n   tipc_aead_decrypt_done (net\/tipc\/crypto.c:999)<br \/>\n   process_one_work (kernel\/workqueue.c:3314)<br \/>\n   worker_thread (kernel\/workqueue.c:3397 kernel\/workqueue.c:3478)<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<p>  Allocated by task 169:<br \/>\n   __kasan_kmalloc (mm\/kasan\/common.c:398 mm\/kasan\/common.c:415)<br \/>\n   tipc_crypto_start (net\/tipc\/crypto.c:1502)<br \/>\n   tipc_init_net (net\/tipc\/core.c:72)<br \/>\n   ops_init (net\/core\/net_namespace.c:137)<br \/>\n   setup_net (net\/core\/net_namespace.c:446)<br \/>\n   copy_net_ns (net\/core\/net_namespace.c:579)<br \/>\n   create_new_namespaces (kernel\/nsproxy.c:132)<br \/>\n   __x64_sys_unshare (kernel\/fork.c:3316)<br \/>\n   do_syscall_64 (arch\/x86\/entry\/syscall_64.c:63)<br \/>\n   entry_SYSCALL_64_after_hwframe (arch\/x86\/entry\/entry_64.S:121)<\/p>\n<p>  Freed by task 8:<br \/>\n   kfree (mm\/slub.c:6566)<br \/>\n   tipc_exit_net (net\/tipc\/core.c:119)<br \/>\n   cleanup_net (net\/core\/net_namespace.c:704)<br \/>\n   process_one_work (kernel\/workqueue.c:3314)<br \/>\n   kthread (kernel\/kthread.c:436)<\/p>\n<p>This is the same class of bug that commit e279024617134 (&#8220;net\/tipc: fix<br \/>\nslab-use-after-free Read in tipc_aead_encrypt_done&#8221;) fixed for the encrypt<br \/>\nside. The encrypt path takes maybe_get_net(aead-&gt;crypto-&gt;net) before<br \/>\ncrypto_aead_encrypt() and drops it with put_net() on the synchronous<br \/>\nreturn paths and in tipc_aead_encrypt_done(); the -EINPROGRESS\/-EBUSY<br \/>\nreturn keeps the reference for the async callback to release. The decrypt<br \/>\npath was left without the equivalent guard.<\/p>\n<p>Mirror the encrypt-side fix on the decrypt path: take a net reference<br \/>\nbefore crypto_aead_decrypt() (failing with -ENODEV and the matching<br \/>\nbearer put if it cannot be acquired), keep it across the<br \/>\n-EINPROGRESS\/-EBUSY async return, and drop it with put_net() on the<br \/>\nsynchronous success\/error return and at the end of<br \/>\ntipc_aead_decrypt_done().<\/p>\n<p>Reproduced under KASAN on v7.1-rc7: a UDP bearer with a cluster key is<br \/>\nflooded with crafted encrypted frames from an unknown peer (driving the<br \/>\ncluster-key decrypt path) while the bearer&#8217;s netns is repeatedly torn<br \/>\ndown. The completion must run asynchronously to outlive<br \/>\ntipc_crypto_stop(); on x86 the stock aesni gcm(aes) now decrypts<br \/>\nsynchronously, so the async path was exercised via cryptd offload. The<br \/>\nunguarded aead-&gt;crypto dereference in tipc_aead_decrypt_done() is the<br \/>\nunpatched upstream path; tipc_aead_decrypt() still lacks<br \/>\nmaybe_get_net(aead-&gt;crypto-&gt;net), so the completion can outlive the free<br \/>\non any config where crypto_aead_decrypt() goes async.<\/p>\n<p>Found by 0sec automated security-research tooling (https:\/\/0sec.ai).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>tipc: fix slab-use-after-free Read in tipc_aead_decrypt_done<\/p>\n<p>tipc_aead_decrypt() goes straight from tipc_bearer_hold(b) to<br \/>\ncrypto_<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-14878","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/14878","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=14878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}