Description
In the Linux kernel, the following vulnerability has been resolved: xprtrdma: Initialize re_id before removal registration rpcrdma_create_id() registers ep->re_rn with the rpcrdma ib_client before returning the new rdma_cm_id to rpcrdma_ep_create(). However rpcrdma_ep_create() currently stores that pointer in ep->re_id only after rpcrdma_create_id() returns. A local administrator can race an NFS/RDMA mount against RDMA device removal. If rpcrdma_remove_one() observes the just-registered notification before rpcrdma_ep_create() assigns ep->re_id, rpcrdma_ep_removal_done() calls trace_xprtrdma_device_removal(NULL). The tracepoint dereferences id->device->name and copies id->route.addr.dst_addr, so the callback can crash the kernel with a NULL pointer dereference. Store the rdma_cm_id in ep->re_id immediately before publishing ep->re_rn. The existing error path still destroys the id directly if registration fails; ep is then freed by the caller without using ep->re_id. Remove the later duplicate assignment in rpcrdma_ep_create().
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
3f4eb9ff923413cdb4c7e171c06d3564f6286712 to < 51248d877bbc6e604e38aeaf776c2781cb4f0dbdaffected3f4eb9ff923413cdb4c7e171c06d3564f6286712 to < 28743571c17b58c21a7216fc9faaf8028df5869baffected3f4eb9ff923413cdb4c7e171c06d3564f6286712 to < 264ccd7871915749bee55fe0c39467a7f08d5479affected3f4eb9ff923413cdb4c7e171c06d3564f6286712 to < bb7caa63e1db22fd03e8dc591b12169e99169dffaffected
Linux Linux
Default version status: affected
6.11affected0 to < 6.11unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.5 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected