CVE-2026-23450: net/smc: fix NULL dereference and UAF in smc_tcp_syn_recv_sock()
In the Linux kernel, the following vulnerability has been resolved:
net/smc: fix NULL dereference and UAF in smc_tcp_syn_recv_sock()
Syzkaller reported a panic in smc_tcp_syn_recv_sock() [1].
smc_tcp_syn_recv_sock() is called in the TCP receive path
(softirq) via icsk_af_ops->syn_recv_sock on the clcsock (TCP
listening socket). It reads sk_user_data to get the smc_sock
pointer. However, when the SMC listen socket is being closed
concurrently, smc_close_active() sets clcsock->sk_user_data
to NULL under sk_callback_lock, and then the smc_sock itself
can be freed via sock_put() in smc_release().
This leads to two issues:
1) NULL pointer dereference: sk_user_data is NULL when
accessed.
2) Use-after-free: sk_user_data is read as non-NULL, but the
smc_sock is freed before its fields (e.g., queued_smc_hs,
ori_af_ops) are accessed.
The race window looks like this (the syzkaller crash [1]
triggers via the SYN cookie path: tcp_get_cookie_sock() ->
smc_tcp_syn_recv_sock(), but the normal tcp_check_req() path
has the same race):
CPU A (softirq) CPU B (process ctx)
tcp_v4_rcv()
TCP_NEW_SYN_RECV:
sk = req->rsk_listener
sock_hold(sk)
/* No lock on listener */
smc_close_active():
write_lock_bh(cb_lock)
sk_user_data = NULL
write_unlock_bh(cb_lock)
...
smc_clcsock_release()
sock_put(smc->sk) x2
-> smc_sock freed!
tcp_check_req()
smc_tcp_syn_recv_sock():
smc = user_data(sk)
-> NULL or dangling
smc->queued_smc_hs
-> crash!
Note that the clcsock and smc_sock are two independent objects
with separate refcounts. TCP stack holds a reference on the
clcsock, which keeps it alive, but this does NOT prevent the
smc_sock from being freed.
Fix this by using RCU and refcount_inc_not_zero() to safely
access smc_sock. Since smc_tcp_syn_recv_sock() is called in
the TCP three-way handshake path, taking read_lock_bh on
sk_callback_lock is too heavy and would not survive a SYN
flood attack. Using rcu_read_lock() is much more lightweight.
- Set SOCK_RCU_FREE on the SMC listen socket so that
smc_sock freeing is deferred until after the RCU grace
period. This guarantees the memory is still valid when
accessed inside rcu_read_lock().
- Use rcu_read_lock() to protect reading sk_user_data.
- Use refcount_inc_not_zero(&smc->sk.sk_refcnt) to pin the
smc_sock. If the refcount has already reached zero (close
path completed), it returns false and we bail out safely.
Note: smc_hs_congested() has a similar lockless read of
sk_user_data without rcu_read_lock(), but it only checks for
NULL and accesses the global smc_hs_wq, never dereferencing
any smc_sock field, so it is not affected.
Reproducer was verified with mdelay injection and smc_run,
the issue no longer occurs with this patch applied.
[1] https://syzkaller.appspot.com/bug?extid=827ae2bfb3a3529333e9
Security readout for executives and security teams
Plain-English summary
A race condition in Linux SMC networking can access an object while it is being closed, causing a kernel crash or use-after-free. The supplied record rates it critical at CVSS 9.8. Confirmed evidence demonstrates a panic; it does not establish data theft, system takeover, or real-world attacks.
Executive priority
Treat this as an urgent patch-validation issue for network-facing or business-critical Linux systems using SMC. Expedite inventory and vendor confirmation, then patch exposed systems through normal emergency-change procedures. Avoid assuming compromise solely from the 9.8 score: available evidence confirms a serious kernel memory-safety failure, but not active exploitation.
Technical view
During TCP SYN processing, smc_tcp_syn_recv_sock() can read clcsock->sk_user_data while another context clears and frees the referenced smc_sock. This creates NULL dereference and use-after-free conditions in both SYN-cookie and normal request paths. The fix uses RCU-delayed freeing, rcu_read_lock(), and refcount_inc_not_zero() to safely pin the object.
Likely exposure
Practical exposure centers on Linux systems using a reachable SMC listening socket. The bundle lists affected identifiers from 5.18 through 7.0, but includes ambiguous version data and commit hashes. Distribution kernels may contain backports, so version strings alone are insufficient; confirm the running build against vendor advisories and referenced stable fixes.
Exploitation context
The race was found by Syzkaller and reproduced under test conditions, including forced delay injection. The CVSS vector describes network access without privileges or user interaction. However, the bundle reports KEV as false and provides no evidence of active exploitation or a public weaponized exploit. Reliability outside testing is not established.
Researcher notes
The core safety failure is lifetime separation: TCP retains the clcsock, but that reference does not retain smc_sock. RCU prevents immediate reclamation while the refcount increment conditionally establishes ownership. The source says smc_hs_congested() is not affected because it does not dereference smc_sock fields. Exact affected ranges and demonstrated security impact beyond panic remain insufficiently resolved in the bundle.
Mitigation direction
Apply a vendor-supported kernel update containing the applicable referenced stable fix.
Prioritize reachable systems that enable or use SMC listening services.
Map distribution kernel builds to vendor backports rather than relying only on upstream version numbers.
If immediate updating is impossible, obtain supported interim guidance from the Linux distribution or appliance vendor.
Review the cited Siemens advisories for any applicable managed products or vendor-specific remediation.
Validation and detection
Inventory running kernel releases, distribution build identifiers, and affected systems' SMC usage.
Confirm the installed kernel changelog includes the applicable upstream fix or an equivalent vendor backport.
Check whether SMC listening sockets are enabled and network reachable on each candidate host.
Review kernel logs for panics, NULL dereferences, or use-after-free reports involving smc_tcp_syn_recv_sock().
Run vendor-approved regression testing for SMC connection handling and listener shutdown after updating.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-23450 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
1ADP providers
10Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.