CVE-2026-89535: svcrdma: Reorder rpcrdma_rn_unregister before rdma_destroy_id

Published Sep 11, 2026
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

svcrdma: Reorder rpcrdmarnunregister before rdmadestroyid

svcrdmafree() caches rdma->sccmid->device before teardown, then calls rdmadestroyid(sccmid) which frees the cmid. rpcrdmarnunregister() follows, but between those two calls the transport's scrn entry is still installed in the device's rdxa. A concurrent ibunregisterdevice walk can dispatch svcrdmaxprtdone() against the now-freed sccmid.

Move rpcrdmarnunregister() before rdmadestroyid() so the transport's notification entry is removed from the xarray before the cmid it references is destroyed.

Also guard the sccmid dereference with a NULL check: the following patches introduce paths that reach svcrdmafree() with sccmid == NULL (listener create failure, ADDRCHANGE replacement failure).

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Reorder cleanup calls so that rpcrdma_rn_unregister() is executed before rdma_destroy_id(), preventing svc_rdma_free() from using a cached rdma->sc_cm_id->device after sc_cm_id has been destroyed.

    Linux kernel (svcrdma / rpcrdma_rn_unregister) Function call order in svcrdma = rpcrdma_rn_unregister() before rdma_destroy_id()
  2. Compensating control

    Guard the sc_cm_id dereference with a NULL check so that sc_cm_id is tested for NULL before accessing it (as described: “Also guard the sc_cm_id dereference with a NULL check”).

Event History

Sep 11, 2026
CVE Published
via MITRE·07:44 PM
Data Sourced
via MITRE·07:44 PM
Description

Frequently Asked Questions

1

What condition is required to trigger the race?

A concurrent RDMA device-unregistration walk must occur after rdma_destroy_id() frees the transport's cm_id but before the transport's notification entry is removed from the device xarray. That walk can then invoke svc_rdma_xprt_done() with a reference to the freed sc_cm_id.

2

What failure modes are additionally handled by the fix?

The fix adds a NULL check before dereferencing sc_cm_id in svc_rdma_free(). This covers paths where listener creation fails or an ADDR_CHANGE replacement fails and svc_rdma_free() is reached with sc_cm_id set to NULL.

3

How does the fix prevent the use-after-free?

It unregisters the transport notification entry with rpcrdma_rn_unregister() before calling rdma_destroy_id(). Removing the entry first prevents device-unregistration notification processing from finding a transport whose cm_id has already been destroyed.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203