CVE-2026-93224
📛 CVE Title
svcrdma: Fix unmatched rn_unregister on failed accept
Description
In the Linux kernel, the following vulnerability has been resolved: svcrdma: Fix unmatched rn_unregister on failed accept When svc_rdma_accept() takes the errout path before rpcrdma_rn_register() has succeeded, the existing cleanup block calls rpcrdma_rn_unregister(dev, &newxprt->sc_rn) unconditionally. svcxprt_rdma is kzalloc'd, so on that path sc_rn.rn_index is 0 and sc_rn.rn_done is NULL; the unregister therefore xa_erase()s another caller's slot 0 and performs an unmatched kref_put() on the rpcrdma_device's rd_kref. The same errout also brackets the cleanup with svc_xprt_get()/ svc_xprt_put() around the kref_init() birth reference. The kref goes 1 -> 2 -> 1 and never reaches 0, so the svcxprt_rdma (and the net/ns_tracker it pinned) is leaked on every failed accept. rpcrdma_rn_register() writes rn->rn_done last, only after xa_alloc() and kref_get() have both succeeded, so rn_done == NULL is a natural "never registered" sentinel. Guard rpcrdma_rn_unregister() with an early return when rn_done is NULL, and clear rn_done before the matching xa_erase() so a repeated unregister is also a no-op. With that guard in place, the accept errout drops the kref_init() birth reference via svc_xprt_put(), which dispatches svc_rdma_free(). Teardown of sc_qp, sc_sq_cq, sc_rq_cq, and sc_pd runs under existing IS_ERR/NULL guards in svc_rdma_free(); sc_rn is covered by the new rn_done sentinel; sc_cm_id is non-NULL on every errout path because svc_rdma_accept() dereferences it above the first goto errout. svc_xprt_free() drops the module reference associated with the freed transport, and svc_handle_xprt() drops its pre-acquired reference when ->xpo_accept() returns NULL. Take a replacement module reference before svc_xprt_put() so the two module_put()s remain balanced. The rn_done guard also covers svc_rdma_free()'s non-listener call to rpcrdma_rn_unregister() for transports whose register attempt failed or never ran.
Overview
- State
- PUBLISHED
- Assigner (CNA)
- Linux
- CVSS severity
- HIGH
- CVSS score
- 8.1 / 10
- CVSS vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H- Effective score
- 8.1 / 10 HIGH source: CNA overview
- CWE(s)
- —
- Reserved
- 2026-09-17
- Published
- 2026-09-24 15:21 UTC
- Last updated
- 2026-09-25 05:09 UTC
- Source
- https://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/93xxx/CVE-2026-93224.json
- Linked Threat
- CVE-2026-93224 — svcrdma: Fix unmatched rn_unregister on failed accept
NVD triage scoring NVD CVE 2.0
Layer NVD adds on top of the CNA's CVE record — published / last-modified timestamps, exploitability / impact subscores, and the FIRST.org EPSS probability that this CVE will be exploited in the wild in the next 30 days.
- NVD published
- 2026-09-24 16:17:17 UTC
- NVD last modified
- 2026-09-24 16:17:17 UTC
NVD / KEV / EPSS data refreshed 2026-09-25 04:32 UTC. Re-run the 🛰 Backfill from NVD button above to refresh.
European Union Vulnerability Database ENISA EUVD
ENISA's official EU repository for curated vulnerability intelligence. Carries a separate identifier (EUVD-YYYY-NNNN) and frequently exposes an earlier-published description + CVSS than NVD does.
- EUVD ID
-
EUVD-2026-86227 - Assigner
- Linux
- Published
- Sep 24, 2026, 3:21:10 PM
- Updated
- Sep 25, 2026, 5:09:45 AM
- EUVD base score (CVSS 3.1)
-
8.1 / 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H - EUVD-reported EPSS
- 0.0000
- Vendors
- Linux
- Products
-
Linux (6.16)Linux (6.15.4 <6.16)Linux (patch: 0)Linux (6.12.35 <6.12.109)Linux (cb3cba0ec372fa7c5f5f5c12990bef02e458ab86 <0335800071a6dfdf7d21d729b5e7d8fa98936211)Linux (d310955106c358c8e1ea682defd8e21af44a6cba)Linux (8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 <5aabe070c00e5bdf4ab150fb5f72ad5f266d6241)Linux (patch: 6.18.50)Linux (patch: 7.3-rc1)Linux (patch: 6.12.109)Linux (patch: 7.2.4)Linux (8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 <45a444a17240f4fa2235f0dfd4a96fc80f1eb2c2)Linux (8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 <26190394c64c9429481fc88a4738f70bb92fb352)
- Aliases
-
GHSA-g4hj-w3xr-5rr3
ENISA description: In the Linux kernel, the following vulnerability has been resolved: svcrdma: Fix unmatched rn_unregister on failed accept When svc_rdma_accept() takes the errout path before rpcrdma_rn_register() has succeeded, the existing cleanup block calls rpcrdma_rn_unregister(dev, &newxprt->sc_rn) unconditionally. svcxprt_rdma is kzalloc'd, so on that path sc_rn.rn_index is 0 and sc_rn.rn_done is NULL; the unregister therefore xa_erase()s another caller's slot 0 and performs an unmatched kref_put() on the rpcrdma_device's rd_kref. The same errout also brackets the cleanup with svc_xprt_get()/ svc_xprt_put() around the kref_init() birth reference. The kref goes 1 -> 2 -> 1 and never reaches 0, so the svcxprt_rdma (and the net/ns_tracker it pinned) is leaked on every failed accept. rpcrdma_rn_register() writes rn->rn_done last, only after xa_alloc() and kref_get() have both succeeded, so rn_done == NULL is a natural "never registered" sentinel. Guard rpcrdma_rn_unregister() with an early return when rn_done is NULL, and clear rn_done before the matching xa_erase() so a repeated unregister is also a no-op. With that guard in place, the accept errout drops the kref_init() birth reference via svc_xprt_put(), which dispatches svc_rdma_free(). Teardown of sc_qp, sc_sq_cq, sc_rq_cq, and sc_pd runs under existing IS_ERR/NULL guards in svc_rdma_free(); sc_rn is covered by the new rn_done sentinel; sc_cm_id is non-NULL on every errout path because svc_rdma_accept() dereferences it above the first goto errout. svc_xprt_free() drops the module reference associated with the freed transport, and svc_handle_xprt() drops its pre-acquired reference when ->xpo_accept() returns NULL. Take a replacement module reference before svc_xprt_put() so the two module_put()s remain balanced. The rn_done guard also covers svc_rdma_free()'s non-listener call to rpcrdma_rn_unregister() for transports whose register attempt failed or never ran.
EUVD references (4)
Affected products (2)
| Vendor | Product | Versions | Platforms |
|---|---|---|---|
| Linux | Linux |
cb3cba0ec372fa7c5f5f5c12990bef02e458ab86 (affected),
8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 (affected),
8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 (affected),
8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932 (affected),
d310955106c358c8e1ea682defd8e21af44a6cba (affected),
6.12.35 (affected),
6.15.4 (affected)
|
— |
| Linux | Linux |
6.16 (affected),
0 (unaffected),
6.12.109 (unaffected),
6.18.50 (unaffected),
7.2.4 (unaffected),
7.3-rc1 (unaffected)
|
— |
Vendor references (4)
References embedded in the original CVE record by the assigning CNA.
Web references (0)
DuckDuckGo results ranked by threat-intel / vendor advisory domains. Generated by the 🔎 Find references (web) button above — same flow as the Remediations search.
No web references attached yet.
NVD-tagged references (4)
Reference list NVD curates from the CNA record, vendor advisories, and third-party reports. The tag chips below are NVD's analyst-assigned categories.
- https://git.kernel.org/stable/c/0335800071a6dfdf7d21d729b5e7d8fa98936211 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/26190394c64c9429481fc88a4738f70bb92fb352 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/45a444a17240f4fa2235f0dfd4a96fc80f1eb2c2 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/5aabe070c00e5bdf4ab150fb5f72ad5f266d6241 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Remediations (14)
Remediations are stored against the linked Threat row; the list below is deduplicated across both pages.
-
web:helpx.adobe.com
This page contains important information regarding security vulnerabilities that could affect specific versions of Adobe products. Use this information to take the prescribed corrective actions.
2026-09-25 10:45 UTC -
web:sec.cloudapps.cisco.com
On September 16, 2026 , the Cisco Product Security Incident Response Team (PSIRT) published the advisories that are listed in the following tables. To remediate these vulnerabilities, Cisco strongly recommends that customers upgrade to the fixed software that is indicated in the advisories. For more information about changes in Cisco PSIRT vulnerability disclosure, see Strengthening the ...
2026-09-25 10:45 UTC -
web:securityonline.info
SolarWinds Observability vulnerabilities allow RCE via CVE - 2026 -28324. Update to version 2026.2.3 to secure your monitoring infrastructure today.
2026-09-25 10:45 UTC -
web:support.sap.com
SAP security Patch Day Bulletin This post shares the information on security notes that remediate vulnerabilities discovered in SAP products. SAP strongly recommends that the customer visits the support portal and applies patches on priority to protect their SAP landscape. On 9th of June 2026 , SAP security patch day saw the release of 15 new security notes.
2026-09-25 10:45 UTC -
web:support.sap.com
SAP security Patch Day Bulletin This post shares the information on security notes that remediate vulnerabilities discovered in SAP products. SAP strongly recommends that the customer visits the support portal and applies patches on priority to protect their SAP landscape. On 12 th of May 2026 , SAP security patch day saw the release of 15 new security notes.
2026-09-25 10:45 UTC -
web:www.cisa.gov
BOD 26-04 further establishes basic expectations for when agencies must check whether threat actors compromised the system before the patch was applied. While BOD 26-04 applies only to FCEB agencies, CISA encourages all organizations to adopt risk-based vulnerability management and prioritize remediation of KEV Catalog vulnerabilities.
2026-09-25 10:45 UTC -
web:www.cve.org
At cve .org, we provide the authoritative reference method for publicly known information-security vulnerabilities and exposures
2026-09-25 10:45 UTC -
web:www.oracle.com
This Critical Patch Update contains 481 new security patches across the product families listed below. Please note that an MOS note summarizing the content of this Critical Patch Update and other Oracle Software Security Assurance activities is located at April 2026 Critical Patch Update: Executive Summary and Analysis.
2026-09-25 10:45 UTC -
web:www.oracle.com
This Critical Patch Update contains 1448 new security patches across the product families listed below. Please note that a My Oracle Support (MOS) note summarizing the content of this Critical Patch Update and other Oracle Software Security Assurance activities is located at July 2026 Critical Patch Update: Executive Summary and Analysis.
2026-09-25 10:45 UTC -
web:www.tenable.com
CISA confirmed exploitation of three SharePoint Server CVEs . Patches, AMSI IoCs, and details on CVE - 2026 -32201, CVE - 2026 -45659, CVE - 2026 -56164.
2026-09-25 10:45 UTC -
web:blogs.oracle.com
This Critical Patch Update contains 481 new security patches across the product families listed below. Please note that an MOS note summarizing the content of this Critical Patch Update and other Oracle Software Security Assurance activities is located at April 2026 Critical Patch Update: Executive Summary and Analysis.
2026-09-25 15:07 UTC -
web:blogs.oracle.com
For more information about the Critical Patch Update program, see the security vulnerability remediation practices page located on the Oracle Trust Center.
2026-09-25 15:07 UTC -
web:cvetodo.com
CVE-2026-93224 vulnerability details and analysis. Full technical analysis, mitigations , and exploit status — updated in real time.
2026-09-25 15:07 UTC -
web:msrc.microsoft.com
The Microsoft Security Response Center (MSRC) investigates all reports of security vulnerabilities affecting Microsoft products and services, and provides the information here as part of the ongoing effort to help you manage security risks and help keep your systems protected.
2026-09-25 15:07 UTC
AI Forensic Analysis
Only Available for Registered Users. Sign in to view.
Raw JSON
The full cvelistV5 record. Download as CVE-2026-93224.json.
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"net/sunrpc/xprtrdma/ib_client.c",
"net/sunrpc/xprtrdma/svc_rdma_transport.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "0335800071a6dfdf7d21d729b5e7d8fa98936211",
"status": "affected",
"version": "cb3cba0ec372fa7c5f5f5c12990bef02e458ab86",
"versionType": "git"
},
{
"lessThan": "5aabe070c00e5bdf4ab150fb5f72ad5f266d6241",
"status": "affected",
"version": "8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932",
"versionType": "git"
},
{
"lessThan": "45a444a17240f4fa2235f0dfd4a96fc80f1eb2c2",
"status": "affected",
"version": "8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932",
"versionType": "git"
},
{
"lessThan": "26190394c64c9429481fc88a4738f70bb92fb352",
"status": "affected",
"version": "8ac6fcae5dc0e801f1c82a83f5ae2c0a4db19932",
"versionType": "git"
},
{
"status": "affected",
"version": "d310955106c358c8e1ea682defd8e21af44a6cba",
"versionType": "git"
},
{
"lessThan": "6.12.109",
"status": "affected",
"version": "6.12.35",
"versionType": "semver"
},
{
"lessThan": "6.16",
"status": "affected",
"version": "6.15.4",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"net/sunrpc/xprtrdma/ib_client.c",
"net/sunrpc/xprtrdma/svc_rdma_transport.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.16"
},
{
"lessThan": "6.16",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.109",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.50",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.4",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3-rc1",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.109",
"versionStartIncluding": "6.12.35",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.50",
"versionStartIncluding": "6.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.4",
"versionStartIncluding": "6.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3-rc1",
"versionStartIncluding": "6.16",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "6.15.4",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsvcrdma: Fix unmatched rn_unregister on failed accept\n\nWhen svc_rdma_accept() takes the errout path before\nrpcrdma_rn_register() has succeeded, the existing cleanup block\ncalls rpcrdma_rn_unregister(dev, &newxprt->sc_rn) unconditionally.\nsvcxprt_rdma is kzalloc'd, so on that path sc_rn.rn_index is 0 and\nsc_rn.rn_done is NULL; the unregister therefore xa_erase()s another\ncaller's slot 0 and performs an unmatched kref_put() on the\nrpcrdma_device's rd_kref.\n\nThe same errout also brackets the cleanup with svc_xprt_get()/\nsvc_xprt_put() around the kref_init() birth reference. The kref\ngoes 1 -> 2 -> 1 and never reaches 0, so the svcxprt_rdma (and the\nnet/ns_tracker it pinned) is leaked on every failed accept.\n\nrpcrdma_rn_register() writes rn->rn_done last, only after xa_alloc()\nand kref_get() have both succeeded, so rn_done == NULL is a natural\n\"never registered\" sentinel. Guard rpcrdma_rn_unregister() with an\nearly return when rn_done is NULL, and clear rn_done before the\nmatching xa_erase() so a repeated unregister is also a no-op.\n\nWith that guard in place, the accept errout drops the kref_init()\nbirth reference via svc_xprt_put(), which dispatches svc_rdma_free().\nTeardown of sc_qp, sc_sq_cq, sc_rq_cq, and sc_pd runs under existing\nIS_ERR/NULL guards in svc_rdma_free(); sc_rn is covered by the new\nrn_done sentinel; sc_cm_id is non-NULL on every errout path because\nsvc_rdma_accept() dereferences it above the first goto errout.\n\nsvc_xprt_free() drops the module reference associated with the freed\ntransport, and svc_handle_xprt() drops its pre-acquired reference\nwhen ->xpo_accept() returns NULL. Take a replacement module reference\nbefore svc_xprt_put() so the two module_put()s remain balanced.\n\nThe rn_done guard also covers svc_rdma_free()'s non-listener call\nto rpcrdma_rn_unregister() for transports whose register attempt\nfailed or never ran."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 8.1,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - svcrdma is nfsd's RPC-over-RDMA server; a remote peer over routable RoCEv2 or iWARP sends RDMA_CM CONNECT_REQUEST to svc_rdma_listen_handler/handle_connect_req, which queues newxprt so svc_handle_xprt calls svc_rdma_accept, whose errout invokes the unguarded rpcrdma_rn_unregister.\nAC:H - The unmatched rpcrdma_rn_unregister in svc_rdma_accept errout runs only if rpcrdma_rn_register failed (RPCRDMA_RD_F_REMOVING or xa_alloc ENOMEM); a remote peer can send CONNECT_REQUEST but cannot unbind the IB device or force that GFP_KERNEL failure, and the UAF needs that in-progress rpcrdma_remove_one.\nPR:N - RDMA_CM CONNECT_REQUEST handling in svc_rdma_listen_handler, handle_connect_req, and svc_rdma_accept runs before svc_process/svc_authenticate; the CM handshake has no RPC or NFS credential check, so an unauthenticated peer can drive the failed-accept errout.\nUI:N - Sending CONNECT_REQUEST to an NFS/RDMA listener already created via nfsd portlist is enough to reach svc_rdma_accept; racing ib_unregister_device is attack complexity, not a victim mount, click, or other user action.\nS:U - The wrong-slot rd_xa erase, unmatched rd_kref put, and any use-after-free of rpcrdma_device or the victim svcxprt_rdma's IB objects stay in the host kernel that runs nfsd/svcrdma; this is not a VM, IOMMU, or sandbox escape.\nC:H - On pre-register errout, rpcrdma_rn_unregister xa_erase()s rd_xa index 0 (kzalloc'd sc_rn.rn_index) of another transport and kref_put()s rd_kref while rpcrdma_remove_one may walk the same xarray; that transport's sc_cm_id/QP and the kfree'd rpcrdma_device become reclaimable slab UAF reads.\nI:H - The extra kref_put can make rpcrdma_remove_one's refcount_dec_and_test skip wait_for_completion and kfree(rd) while a live transport later xa_erase/kref_put or QP/CM ops write through the freed rpcrdma_device or un-notified IB objects, a UAF write primitive.\nA:H - A concurrent rpcrdma_remove_one that proceeds after the unmatched kref_put, or later QP/CM use of a transport whose slot-0 notification was erased, dereferences freed IB or rpcrdma_device memory and oopses or panics; any UAF is availability High per kernel CVSS guidance."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-25T05:09:45.728Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/0335800071a6dfdf7d21d729b5e7d8fa98936211"
},
{
"url": "https://git.kernel.org/stable/c/5aabe070c00e5bdf4ab150fb5f72ad5f266d6241"
},
{
"url": "https://git.kernel.org/stable/c/45a444a17240f4fa2235f0dfd4a96fc80f1eb2c2"
},
{
"url": "https://git.kernel.org/stable/c/26190394c64c9429481fc88a4738f70bb92fb352"
}
],
"title": "svcrdma: Fix unmatched rn_unregister on failed accept",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-93224",
"datePublished": "2026-09-24T15:21:10.542Z",
"dateReserved": "2026-09-17T16:02:15.094Z",
"dateUpdated": "2026-09-25T05:09:45.728Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}