In the Linux kernel, the following vulnerability has been resolved: ublk: fix deadlock when reading partition table When one process(such as udev) opens ublk block device (e.g., to read the partition table via bdevopen()), a deadlock[1] can occur: 1. bdevopen() grabs disk->openmutex 2. The process issues read I/O to ublk backend to read partition table 3. In _ublkcompleterq(), blkupdaterequest() or blkmqendrequest() runs bio->biendio() callbacks 4. If this triggers fput() on file descriptor of ublk block device, the work may be deferred to current task's task work (see fput() implementation) 5. This eventually calls blkdevrelease() from the same context 6. blkdevrelease() tries to grab disk->openmutex again 7. Deadlock: same task waiting for a mutex it already holds The fix is to run blkupdaterequest() and blkmqendrequest() with bottom halves disabled. This forces blkdevrelease() to run in kernel work-queue context instead of current task work context, and allows ublk server to make forward progress, and avoids the deadlock. [axboe: rewrite comment in ublk]