CVE-2026-89535 (GCVE-0-2026-89535)
Vulnerability from cvelistv5
Published
2026-09-11 19:44
Modified
2026-10-19 08:48
Summary
In the Linux kernel, the following vulnerability has been resolved: svcrdma: Reorder rpcrdma_rn_unregister before rdma_destroy_id svc_rdma_free() caches rdma->sc_cm_id->device before teardown, then calls rdma_destroy_id(sc_cm_id) which frees the cm_id. rpcrdma_rn_unregister() follows, but between those two calls the transport's sc_rn entry is still installed in the device's rd_xa. A concurrent ib_unregister_device walk can dispatch svc_rdma_xprt_done() against the now-freed sc_cm_id. Move rpcrdma_rn_unregister() before rdma_destroy_id() so the transport's notification entry is removed from the xarray before the cm_id it references is destroyed. Also guard the sc_cm_id dereference with a NULL check: the following patches introduce paths that reach svc_rdma_free() with sc_cm_id == NULL (listener create failure, ADDR_CHANGE replacement failure).
Impacted products
Vendor Product Version
Linux Linux Version: c4de97f7c45434985e5dbf2d6ccc9eca676e37fe
Version: c4de97f7c45434985e5dbf2d6ccc9eca676e37fe
Version: c4de97f7c45434985e5dbf2d6ccc9eca676e37fe
Version: c4de97f7c45434985e5dbf2d6ccc9eca676e37fe
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/sunrpc/xprtrdma/svc_rdma_transport.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "fcd4a752ac840d39356f4d2a424d3aca4e39716b",
              "status": "affected",
              "version": "c4de97f7c45434985e5dbf2d6ccc9eca676e37fe",
              "versionType": "git"
            },
            {
              "lessThan": "9f2f5d0999364c7070306cd422d8babc2621070d",
              "status": "affected",
              "version": "c4de97f7c45434985e5dbf2d6ccc9eca676e37fe",
              "versionType": "git"
            },
            {
              "lessThan": "cfca6eb3345ba4a23cf9a1153ad09bf19faabfc9",
              "status": "affected",
              "version": "c4de97f7c45434985e5dbf2d6ccc9eca676e37fe",
              "versionType": "git"
            },
            {
              "lessThan": "4488e912973773d64368828acf3b8e39d93650ae",
              "status": "affected",
              "version": "c4de97f7c45434985e5dbf2d6ccc9eca676e37fe",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "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.12"
            },
            {
              "lessThan": "6.12",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.111",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.51",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.4",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.111",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.51",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.4",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.12",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nsvcrdma: Reorder rpcrdma_rn_unregister before rdma_destroy_id\n\nsvc_rdma_free() caches rdma-\u003esc_cm_id-\u003edevice before teardown,\nthen calls rdma_destroy_id(sc_cm_id) which frees the cm_id.\nrpcrdma_rn_unregister() follows, but between those two calls\nthe transport\u0027s sc_rn entry is still installed in the device\u0027s\nrd_xa. A concurrent ib_unregister_device walk can dispatch\nsvc_rdma_xprt_done() against the now-freed sc_cm_id.\n\nMove rpcrdma_rn_unregister() before rdma_destroy_id() so the\ntransport\u0027s notification entry is removed from the xarray before\nthe cm_id it references is destroyed.\n\nAlso guard the sc_cm_id dereference with a NULL check: the\nfollowing patches introduce paths that reach svc_rdma_free()\nwith sc_cm_id == NULL (listener create failure, ADDR_CHANGE\nreplacement failure)."
        }
      ],
      "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\u0027s RPC-over-RDMA server transport; a remote peer over routable RoCEv2 or iWARP reaches svc_rdma_free() by disconnecting an accepted connection or by forcing the post-rpcrdma_rn_register accept-error path after CONNECT_REQUEST.\nAC:H - The UAF exists only between rdma_destroy_id() and rpcrdma_rn_unregister(); triggering it requires a concurrent ib_unregister_device xarray walk (unbind, VF hot-unplug, or rxe/siw link delete) that a remote peer cannot initiate or reliably time.\nPR:N - RDMA CM CONNECT_REQUEST, accept, and DISCONNECT run before RPC or NFS authentication, and the CM handshake has no credential check, so an unauthenticated peer can drive the teardown path.\nUI:N - Opening and dropping RPC-over-RDMA connections against an already-listening NFS/RDMA service is sufficient; concurrent administrative device removal is attack complexity, not victim user interaction.\nS:U - The use-after-free of the rdma_cm_id and any double-put of the svcxprt_rdma remain in the host kernel; this is not a VM, IOMMU, or sandbox escape.\nC:H - A concurrent rpcrdma_remove_one() walk calls svc_rdma_xprt_done(), which reads the already-freed sc_cm_id (device name and route address); a reclaimable slab UAF is confidentiality High per kernel UAF guidance.\nI:H - On the accept-failure path the same callback can svc_xprt_close() a transport whose kref is already zero, calling rdma_disconnect() on the freed cm_id and dropping the kref again, yielding a double-free/UAF write primitive.\nA:H - Dereferencing the freed rdma_cm_id or double-freeing the svcxprt_rdma causes a kernel oops or panic; any use-after-free is availability High per kernel CVSS guidance."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T08:48:26.908Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/fcd4a752ac840d39356f4d2a424d3aca4e39716b"
        },
        {
          "url": "https://git.kernel.org/stable/c/9f2f5d0999364c7070306cd422d8babc2621070d"
        },
        {
          "url": "https://git.kernel.org/stable/c/cfca6eb3345ba4a23cf9a1153ad09bf19faabfc9"
        },
        {
          "url": "https://git.kernel.org/stable/c/4488e912973773d64368828acf3b8e39d93650ae"
        }
      ],
      "title": "svcrdma: Reorder rpcrdma_rn_unregister before rdma_destroy_id",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89535",
    "datePublished": "2026-09-11T19:44:13.733Z",
    "dateReserved": "2026-09-11T19:38:34.720Z",
    "dateUpdated": "2026-10-19T08:48:26.908Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…