CVE-2026-80981
Critical · 9.8CVSS
9.8
EPSS
0.6%
Published
Sep 11, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel’s high-speed shared-memory networking can let a remote system crash or corrupt the machine if that networking feature is turned on.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- High
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
A use-after-free in the Linux kernel Shared Memory Communications (SMC) LLC server add-link path. smc_llc_srv_add_link() retains a pointer into an LLC queue entry, frees that entry with smc_llc_flow_qentry_del(), then later reads the dangling pointer in smc_llc_save_add_link_rkeys() when the link has no shared v2 receive buffer. The result is a kernel slab UAF that can panic the host or corrupt kernel heap, with confidentiality, integrity, and availability all theoretically at risk.
Why it matters to the business
Hosts that use SMC (RDMA/RoCE or SMC-R/SMC-D low-latency networking) can suffer kernel panics, lost connections, and unexpected downtime of high-performance fabric paths. The issue is rated critical (CVSS 9.8) because a network-reachable UAF in kernel networking can, in principle, fully compromise a host. Practical urgency is tempered by low current exploitation likelihood (EPSS about 0.63% with a flat 30-day trend, not listed in CISA KEV, no known ransomware use, exploit maturity none, published about 20 days ago), but organizations that enable SMC should still patch promptly because a kernel networking UAF is an availability and host-integrity event, not just an application bug.
How an attack unfolds
An unauthenticated network peer that can complete or induce an SMC handshake against a listening host causes the kernel SMC workqueue (smc_hs_wq / smc_listen_work) to process an LLC add-link message. The server path saves a pointer into the queued LLC message, deletes and frees the queue entry, then—on links without a shared v2 RX buffer—reuses that freed pointer while copying rkeys. Heap reuse of the freed object can turn the UAF into a crash or further kernel-memory corruption. No named threat actors, KEV campaigns, or ransomware families are associated with this issue at publication time.
How to fix it
Apply the upstream Linux kernel fix for net/smc that stops using the LLC qentry pointer after smc_llc_flow_qentry_del() (copy needed fields first or always use the shared v2 RX buffer path). Upgrade to a vendor or distro kernel that includes that net/smc patch; no specific package versions were supplied with this record, so map CVE-2026-80981 via your kernel changelog, stable-tree commit, or vendor advisory. If SMC is not required, mitigate by not loading the smc module, disabling SMC offload/handshake on sockets, and restricting RDMA/RoCE exposure until patched kernels are deployed.
How to confirm the fix worked
Confirm the running kernel changelog or distro advisory lists this CVE or the net/smc LLC qentry UAF fix. On patched kernels, smc_llc_srv_add_link() must not pass a pointer into a freed qentry into smc_llc_save_add_link_rkeys(). Inventory hosts with the smc module loaded, RDMA/RoCE devices present, or SMC-enabled listeners. After upgrade, verify uname/kernel package version, that smc still loads only where intended, and that no KASAN/oops traces reference smc_llc_save_add_link_rkeys or smc_llc_srv_add_link during SMC bring-up.
Typical attack path
- Identify a Linux host with the SMC subsystem loaded and listening for SMC connections.
- Reach the host over the network and participate in the SMC connection/LLC add-link flow as a peer.
- Cause smc_llc_srv_add_link() to enqueue, then free, the LLC queue entry while a pointer into that entry remains live.
- Trigger the post-free read in smc_llc_save_add_link_rkeys() on a link that does not use a shared v2 receive buffer.
- Convert the resulting kernel slab use-after-free into a denial of service (oops/panic) or attempt further heap corruption for privilege impact.
How to detect it
Hunt historical kernel logs, kdump/vmcore, and KASAN/KFENCE reports for use-after-free in the SMC LLC add-link path. Primary artifacts are oops or KASAN reports in smc_llc_save_add_link_rkeys and smc_llc_srv_add_link, often on workqueue smc_hs_wq running smc_listen_work (kworker). Also review dmesg around SMC listen/handshake and any slab-use-after-free against the LLC qentry allocation site (smc_llc_enqueue / smc_wr_rx_tasklet_fn). Absence of these traces does not prove non-exploitation on non-debug kernels; a panic in SMC listen work during add-link is still suspicious. There are no public threat-actor TTPs or ransomware IOCs tied to this CVE.
- BUG: KASAN: slab-use-after-free in smc_llc_save_add_link_rkeys
- smc_llc_save_add_link_rkeys
- smc_llc_srv_add_link
- Workqueue: smc_hs_wq smc_listen_work
- smc_listen_work
- smc_llc_flow_qentry_del
- smc_llc_enqueue
- smc_wr_rx_tasklet_fn
What your security team should do
- Patch Linux kernels that include net/smc as a high priority on any host where SMC or RDMA is enabled, despite low EPSS and no KEV listing.
- Inventory and reduce SMC/RDMA attack surface: unload smc where unused, restrict who can initiate SMC, and segment RoCE/RDMA fabrics.
- Watch kernel logs and panic dumps for SMC LLC UAF/oops signatures until fleets are confirmed patched.
- Track distro stable kernels and vendor advisories for the exact package that contains the net/smc fix, then validate rollout.
- Do not wait for in-the-wild exploitation; treat kernel networking UAFs as crash and potential privilege-escalation risk on exposed listeners.
The record
In the Linux kernel, the following vulnerability has been resolved: net/smc: fix use-after-free of the LLC qentry in smc_llc_srv_add_link() smc_llc_srv_add_link() keeps add_llc pointing into the queue entry: add_llc = &qentry->msg.add_link; smc_llc.c:1482 ... smc_llc_save_add_link_info(link_new, add_llc); smc_llc.c:1494 smc_llc_flow_qentry_del(&lgr->llc_flow_lcl); smc_llc.c:1495 ... u8 *llc_msg = smc_link_shared_v2_rxbuf(link) ? (u8 *)lgr->wr_rx_buf_v2 : (u8 *)add_llc; smc_llc.c:1504 smc_llc_save_add_link_rkeys(link, link_new, llc_msg); smc_llc.c:1506 smc_llc_flow_qentry_del() kfree()s the entry, so on a link without a shared v2 receive buffer the pointer handed to smc_llc_save_add_link_rkeys() is already freed. Before the Fixes: commit that branch always used lgr->wr_rx_buf_v2 and add_llc was not used after the free. Reproduced on an unpatched tree over rxe, with KASAN, kasan_multi_shot and a link forced to max_recv_sge == 1: the entry is freed and read by the same call, and the freeing frame is smc_llc_srv_add_link() itself. [ 2.523161] BUG: KASAN: slab-use-after-free in smc_llc_save_add_link_rkeys+0x333/0x350 [ 2.523499] Read of size 2 at addr ffff8880052194de by task kworker/0:1/11 [ 2.523789] [ 2.523862] CPU: 0 UID: 0 PID: 11 Comm: kworker/0:1 Not tainted 7.2.0-rc5-p0-g2c9dd296545d #35 PREEMPT(lazy) [ 2.523865] Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 [ 2.523866] Workqueue: smc_hs_wq smc_listen_work [ 2.523869] Call Trace: [ 2.523870] <TASK> [ 2.523871] dump_stack_lvl+0x53/0x70 [ 2.523872] print_report+0xd0/0x630 [ 2.523874] ? __pfx__raw_spin_lock_irqsave+0x10/0x10 [ 2.523876] ? smc_llc_save_add_link_rkeys+0x333/0x350 [ 2.523878] kasan_report+0xce/0x100 [ 2.523879] ? smc_llc_save_add_link_rkeys+0x333/0x350 [ 2.523881] smc_llc_save_add_link_rkeys+0x333/0x350 [ 2.523883] ? smcr_buf_reg_lgr+0x2a4/0x660 [ 2.523885] smc_llc_srv_add_link+0xaa2/0x1e50 [ 2.523888] ? _printk+0xba/0xf0 [ 2.523897] ? __pfx_smc_llc_srv_add_link+0x10/0x10 [ 2.523899] ? down_write+0xb0/0x130 [ 2.523903] ? __pfx_down_write+0x10/0x10 [ 2.523905] smc_listen_work+0x489e/0x4d00 [ 2.523907] ? kmem_cache_free+0x1c6/0x3a0 [ 2.523911] ? __pfx_smc_listen_work+0x10/0x10 [ 2.523913] ? release_sock+0x148/0x1d0 [ 2.523915] ? smc_tcp_listen_work+0xb4f/0xfc0 [ 2.523917] ? _raw_spin_lock_irq+0x80/0xe0 [ 2.523918] ? __pfx__raw_spin_lock_irq+0x10/0x10 [ 2.523920] process_one_work+0x633/0x1030 [ 2.523922] ? assign_work+0x11d/0x370 [ 2.523924] worker_thread+0x45b/0xd10 [ 2.523926] ? __pfx_worker_thread+0x10/0x10 [ 2.523928] ? __pfx_worker_thread+0x10/0x10 [ 2.523929] kthread+0x2c6/0x3b0 [ 2.523931] ? recalc_sigpending+0x15c/0x1e0 [ 2.523934] ? __pfx_kthread+0x10/0x10 [ 2.523935] ret_from_fork+0x36e/0x5a0 [ 2.523937] ? __pfx_ret_from_fork+0x10/0x10 [ 2.523938] ? __switch_to+0x572/0xdd0 [ 2.523943] ? __pfx_kthread+0x10/0x10 [ 2.523944] ret_from_fork_asm+0x1a/0x30 [ 2.523947] </TASK> [ 2.523948] [ 2.531253] Allocated by task 48: [ 2.531399] kasan_save_stack+0x33/0x60 [ 2.531570] kasan_save_track+0x14/0x30 [ 2.531737] __kasan_kmalloc+0x8f/0xa0 [ 2.531905] __kmalloc_cache_noprof+0x158/0x370 [ 2.532100] smc_llc_enqueue+0x72/0x560 [ 2.532268] smc_wr_rx_tasklet_fn+0x474/0xa80 [ 2.532491] tasklet_action_common+0x20f/0x8a0 [ 2.532714] handle_softirqs+0x18e/0x590 [ 2.532886] do_softirq+0x3b/0x60 [ 2.533036] __local_bh_enable_ip+0x61/0x70 [ 2.533221] __alloc_skb+0x732/0x890 [ 2.533384] rxe_init_packet+0x16b/0x4f0 [ 2.533567] prepare_ack_packet+0xb8/0x830 [ 2.533760] rxe_receiver+0x495/0x96e0 [ 2.533933] do_work+0x144/0x470 [ 2 ---truncated---
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|