KernelScan.io

HIGH Introduced in 6.18

ucma WriteEvent Race

CVE-2026-89507

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI6.9MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: RDMA/ucma: Lock the handler in ucma_write_cm_event() ctx->file may only be changed under the handler lock and the xa_lock, which is what stops uevents being queued for a ctx while ucma_migrate_id() moves it to another file. The CM core takes that lock before invoking ucma_event_handler(), but the write() paths that queue uevents themselves do not. ucma_write_cm_event() re-reads ctx->file for each of its four dereferences, so ucma_migrate_id() can swap it mid-sequence: mutex_lock(&ctx->file->mut); /* file A */ list_add_tail(&uevent->list, &ctx->file->event_list); /* file B */ mutex_unlock(&ctx->file->mut); /* file B */ wake_up_interruptible(&ctx->file->poll_wait); /* file B */ The window is the mutex_lock() itself: the writer sleeps in it while the migration reassigns ctx->file. The list_add_tail() then runs on file B's event_list holding only file A's mutex: list_add corruption. prev->next should be next (ffff888101320f30), but was ffff88814a08c418. (prev=ffff88814a075c18). kernel BUG at lib/list_debug.c:32! Call Trace: ucma_write_cm_event+0x36e/0x5e0 and file A's mut is left held forever, wedging its next writer in D state. The uevent is also stranded on a list ucma_cleanup_ctx_events() will not walk, so it outlives its context. /dev/infiniband/rdma_cm is 0666 and no RDMA device is involved, so an unprivileged user reaches all of this. Take the handler lock, as ucma_cleanup_mc_events() does; ctx->cm_id is pinned by the ucma_get_ctx() reference.

02

Engine v0.6.0

Risk summary

An unprivileged local user can trigger a race condition in the RDMA UCMA subsystem through the world-accessible /dev/infiniband/rdma_cm device, causing list corruption, permanent mutex lockup, and use-after-free of event objects. The bug requires no RDMA hardware and no special privileges, making it reachable by any local account on systems where the device node is present.

Affecteddrivers/infiniband/core/ucma.c (RDMA UCMA)

Vulnerability analysis

A race condition exists in the UCMA event write path: the code re-reads the context's file pointer across multiple dereferences without holding the handler lock, so a concurrent migration call can swap the file pointer mid-sequence. This causes list corruption when an event is added to one file's list while holding another file's mutex, leaving the mutex permanently held and stranding the event object on a list that cleanup will not walk. The fix takes the handler lock around the entire event-queuing sequence and validates the context is still valid, preventing the file pointer from changing during the operation. The vulnerable path is reachable by any unprivileged local user via the world-accessible RDMA CM device node, with no RDMA hardware required.

03

BranchIntroducedFixed inPatch commit
6.186.186.18.504f8bb11dd2ff
7.26.187.2.40be1955040a2
mainline6.187.3f4cc21c6a8e9