{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-89508","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.716Z","datePublished":"2026-09-11T19:43:54.682Z","dateUpdated":"2026-09-14T12:00:35.341Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-14T12:00:35.341Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nRDMA/ucma: Lock the handler in ucma_set_ib_path()\n\nucma_set_ib_path() calls ucma_event_handler() straight from the write()\npath, without the handler lock that keeps ctx->file stable while a uevent\nis queued.  The handler re-reads ctx->file for every dereference:\n\n\tmutex_lock(&ctx->file->mut);\t\t\t/* file A */\n\tlist_add_tail(&uevent->list, &ctx->file->event_list);\t/* file B */\n\tmutex_unlock(&ctx->file->mut);\t\t\t/* file B */\n\twake_up_interruptible(&ctx->file->poll_wait);\t/* file B */\n\nA concurrent ucma_migrate_id() reassigns ctx->file while the SET_OPTION\ncaller sleeps in mutex_lock(), so the list_add_tail() lands on file B's\nevent_list while only file A's mutex is held, racing every other user of\nthat list:\n\n  BUG: KASAN: slab-use-after-free in __list_add_valid_or_report+0x1aa/0x1c0\n  Read of size 8 at addr ffff888153c6a418 by task poc_corr/486\n  Call Trace:\n   __list_add_valid_or_report+0x1aa/0x1c0\n   ucma_event_handler+0x1be/0xc00\n   ucma_set_ib_path+0x45e/0x710\n   ucma_set_option+0x32e/0x590\n   ucma_write+0x1f9/0x330\n  Allocated by task 505:\n   ucma_write_cm_event+0x1a1/0x660\n  Freed by task 505:\n   kfree+0x1da/0x4c0\n   ucma_get_event+0x5d5/0x7e0\n\nThe freed object is a ucma_event that another thread dequeued from file B's\nlist under file B's mutex.  File A's mut is left held on top of that,\nwedging its next writer in uninterruptible sleep.\n\nThis path needs a bound and address-resolved cm_id, so it requires an RDMA\ndevice to be present.\n\nTake the handler lock around the call."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The bug is reached only via write() on /dev/infiniband/rdma_cm (SET_OPTION -> ucma_set_option -> ucma_set_ib_path). A remote RDMA peer cannot invoke this path; in-kernel CM event delivery already holds the handler lock that this write path omitted.\nAC:L - The attacker controls both sides of the race: one thread issues SET_OPTION (RDMA_OPTION_IB_PATH) while another MIGRATE_IDs the cm_id to a second fd and a third GET_EVENTs to free the uevent. The window is the mutex_lock() sleep in ucma_event_handler, which the attacker can widen, and it was reproduced by poc_corr.\nPR:L - ucma is a miscdevice with mode 0666 and ucma_write() has no capability check. Any unprivileged local user can open /dev/infiniband/rdma_cm, CREATE_ID, resolve an address on an existing RDMA device, then issue SET_OPTION and MIGRATE_ID.\nUI:N - The attacker opens rdma_cm, creates and migrates their own cm_id, and issues the concurrent SET_OPTION and GET_EVENT writes themselves; no other user or administrator action is required.\nS:U - The use-after-free and list corruption are confined to host-kernel objects (ucma_event and file event_list). This is a standard local kernel compromise and does not cross a VM, IOMMU, or sandbox boundary.\nC:H - The race is a slab use-after-free of struct ucma_event (KASAN in __list_add_valid_or_report after GET_EVENT kfree). Reclaiming the freed object gives the attacker control over list pointers and event contents, enabling disclosure of kernel memory.\nI:H - list_add_tail runs on file B's event_list while only file A's mutex is held, corrupting list pointers. Combined with UAF reclaim of ucma_event, this is a classic kernel list-unlink arbitrary-write primitive suitable for control-flow hijacking.\nA:H - The UAF and list_debug BUG can oops the kernel, and the mismatched mutex_unlock leaves file A's mut held so the next writer sleeps uninterruptibly in D state, hanging the system."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/infiniband/core/ucma.c"],"versions":[{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"3dd07b369371a2f29e1c3caf1ade85bb92b4c551","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"b2da0d488a1c72956ebb0a57015ee8ee6a2f7748","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"a7f8d26e653ee43b0b572984b8ec544d3b3b6f3c","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"71dc206f2e2a645dac78879768762451aa1799f7","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"764586f8f6180084c5a7d622120f526acc6ce0c9","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"28ac2dd416482d1c763c4af5d61af465b387fb50","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"43a7d8ae9f645dc00235cfa4bf57673c20b769f8","status":"affected","versionType":"git"},{"version":"09e328e47a695b0d346598f5d6593ee598e64885","lessThan":"ecbe7d36dc2de07e5dfbb4a8ff5b315ab43de820","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/infiniband/core/ucma.c"],"versions":[{"version":"5.10","status":"affected"},{"version":"0","lessThan":"5.10","status":"unaffected","versionType":"semver"},{"version":"5.10.270","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.221","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.188","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.157","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.109","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.50","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.4","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3-rc1","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"5.10.270"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"5.15.221"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"6.1.188"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"6.6.157"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"6.12.109"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"6.18.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.10","versionEndExcluding":"7.3-rc1"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/3dd07b369371a2f29e1c3caf1ade85bb92b4c551"},{"url":"https://git.kernel.org/stable/c/b2da0d488a1c72956ebb0a57015ee8ee6a2f7748"},{"url":"https://git.kernel.org/stable/c/a7f8d26e653ee43b0b572984b8ec544d3b3b6f3c"},{"url":"https://git.kernel.org/stable/c/71dc206f2e2a645dac78879768762451aa1799f7"},{"url":"https://git.kernel.org/stable/c/764586f8f6180084c5a7d622120f526acc6ce0c9"},{"url":"https://git.kernel.org/stable/c/28ac2dd416482d1c763c4af5d61af465b387fb50"},{"url":"https://git.kernel.org/stable/c/43a7d8ae9f645dc00235cfa4bf57673c20b769f8"},{"url":"https://git.kernel.org/stable/c/ecbe7d36dc2de07e5dfbb4a8ff5b315ab43de820"}],"title":"RDMA/ucma: Lock the handler in ucma_set_ib_path()","x_generator":{"engine":"bippy-1.2.0"}}}}