HomeDefectsLIN1024-33196
Fixed

LIN1024-33196 : Security Advisory - linux - CVE-2026-98431

Created: Oct 15, 2026    Updated: Oct 20, 2026
Resolved Date: Oct 16, 2026
Found In Version: 10.24.33.2
Fix Version: 10.24.33.5
Severity: Standard
Applicable for: Wind River Linux LTS 24
Component/s: Kernel

Description

In the Linux kernel, the following vulnerability has been resolved:  RDMA/uverbs: Fix mmap_lock/disassociation_lock circular dependency  Commit 51976c6cd786 ("RDMA/core: Provide rdma_user_mmap_disassociate() to disassociate mmap pages") introduced disassociation_lock to protect new mmap registrations against uverbs_user_mmap_disassociate(), but created an ABBA deadlock:    Thread A (mmap / fork):     mmap_lock -> disassociation_lock    Thread B (disassociate):     disassociation_lock -> mmap_lock  Fix by removing disassociation_lock entirely and using the pre-existing hw_destroy_rwsem instead. hw_destroy_rwsem already provides the same protection: rdma_umap_open() and ib_uverbs_mmap() both use down_read_trylock() before registering a new VMA, so holding hw_destroy_rwsem in uverbs_user_mmap_disassociate() is sufficient to block new registrations. trylock is used in both mmap paths (not blocking down_read) because mmap_lock is already held on entry, and uverbs_user_mmap_disassociate() acquires mmap_lock internally — a blocking read would recreate the same deadlock.  The only caller that was not taking hw_destroy_rwsem for write was rdma_user_mmap_disassociate(). Fix it to take the rwsem per-ufile while iterating under lists_mutex.  This is safe because ib_uverbs_close() releases hw_destroy_rwsem entirely before acquiring lists_mutex, so the two locks are never held simultaneously.  lockdep warning:   [  776.654252] ======================================================  [  776.655214] WARNING: possible circular locking dependency detected  [  776.656167] 6.18.0for-upstream_debug_94e244d9ccab #1 Not tainted  [  776.657114] ------------------------------------------------------  [  776.658087] devlink/14824 is trying to acquire lock:  [  776.658879] ffff88811170c800 (&mm->mmap_lock){++++}-{4:4}, at: uverbs_user_mmap_disassociate+0x168/0x780 [ib_uverbs]  [  776.660479]  [  776.660479] but task is already holding lock:  [  776.661460] ffff888142d92b08 (&file->disassociation_lock){+.+.}-{4:4}, at: uverbs_user_mmap_disassociate+0x39/0x780 [ib_uverbs]  [  776.663177]  [  776.663177] which lock already depends on the new lock.  [  776.663177]  [  776.664525]  [  776.664525] the existing dependency chain (in reverse order) is:  [  776.665724]  [  776.665724] -> #2 (&file->disassociation_lock){+.+.}-{4:4}:  [  776.666887]        __mutex_lock+0x16d/0x2330  [  776.667633]        rdma_umap_open+0x129/0x280 [ib_uverbs]  [  776.668489]        dup_mmap+0xa40/0x1790  [  776.669170]        copy_process+0x5dd2/0x6170  [  776.669933]        kernel_clone+0xb6/0x610  [  776.670636]        __do_sys_clone+0xb5/0xf0  [  776.671354]        do_syscall_64+0x70/0x12e0  [  776.672083]        entry_SYSCALL_64_after_hwframe+0x4b/0x53  [  776.672940]  [  776.672940] -> #1 (&mm->mmap_lock/1){+.+.}-{4:4}:  [  776.673985]        down_write_nested+0x90/0x1e0  [  776.674751]        dup_mmap+0x201/0x1790  [  776.675448]        copy_process+0x5dd2/0x6170  [  776.676180]        kernel_clone+0xb6/0x610  [  776.676904]        __do_sys_clone+0xb5/0xf0  [  776.677615]        do_syscall_64+0x70/0x12e0  [  776.678351]        entry_SYSCALL_64_after_hwframe+0x4b/0x53  [  776.679239]  [  776.679239] -> #0 (&mm->mmap_lock){++++}-{4:4}:  [  776.680253]        __lock_acquire+0x18c6/0x2ec0  [  776.681018]        lock_acquire+0x10e/0x2e0  [  776.681742]        down_read+0x95/0x430  [  776.682395]        uverbs_user_mmap_disassociate+0x168/0x780 [ib_uverbs]  [  776.683436]        uverbs_destroy_ufile_hw+0x1ae/0x270 [ib_uverbs]  [  776.684416]        ib_uverbs_remove_one+0x22b/0x420 [ib_uverbs]  [  776.685371]        remove_client_context+0xa6/0xf0 [ib_core]  [  776.686342]        disable_device+0x12b/0x240 [ib_core]  [  776.687249]        __ib_unregister_device+0x269/0x460 [ib_core]  [  776.688233]        ib_unregister_device+0x21/0x30 [ib_core]  [  776.689140]        mlx5r_remove+0xd0/0x170 [mlx5_ib]  [  776.689999]        device_release_driver_internal+0x3b2/0x5 ---truncated---
Data source: kernel.org (416baaa9-dc9f-4396-8d5f-8c081fb06d67)