In the Linux kernel, the following vulnerability has been resolved:
USB: ldusb: fix use-after-free on disconnect race
mutex_unlock() may access the mutex structure after releasing the lock and therefore cannot be used to manage lifetime of objects directly (unlike spinlocks and refcounts). [1][2]
Use a kref to release the driver data to avoid use-after-free in mutex_unlock() when release() races with disconnect().
[1] a51749ab34d9 (locking/mutex: Document that mutex_unlock() is non-atomic) [2] 2b9d9e0a9ba0 (locking/mutex: Clarify that mutex_unlock(), and most other sleeping locks, can still use the lock object after its unlocked)