In the Linux kernel, the following vulnerability has been resolved:
scsi: storvsc: Remove WQMEMRECLAIM from storvscerrorwq
storvscerrorwq workqueue should not be marked as WQMEMRECLAIM as it doesn't need to make forward progress under memory pressure. Marking this workqueue as WQMEMRECLAIM may cause deadlock while flushing a non-WQMEMRECLAIM workqueue. In the current state it causes the following warning:
[ 14.506347] ------------[ cut here ]------------ [ 14.506354] workqueue: WQMEMRECLAIM storvscerrorwq0:storvscremovelun is flushing !WQMEMRECLAIM eventsfreezablepower:diskeventsworkfn [ 14.506360] WARNING: CPU: 0 PID: 8 at <-snip->kernel/workqueue.c:2623 checkflushdependency+0xb5/0x130 [ 14.506390] CPU: 0 PID: 8 Comm: kworker/u4:0 Not tainted 5.4.0-1086-azure #91~18.04.1-Ubuntu [ 14.506391] Hardware name: Microsoft Corporation Virtual Machine/Virtual Machine, BIOS Hyper-V UEFI Release v4.1 05/09/2022 [ 14.506393] Workqueue: storvscerrorwq0 storvscremovelun [ 14.506395] RIP: 0010:checkflushdependency+0xb5/0x130 <-snip-> [ 14.506408] Call Trace: [ 14.506412] _flushwork+0xf1/0x1c0 [ 14.506414] _cancelworktimer+0x12f/0x1b0 [ 14.506417] ? kernfsput+0xf0/0x190 [ 14.506418] canceldelayedworksync+0x13/0x20 [ 14.506420] diskblockevents+0x78/0x80 [ 14.506421] delgendisk+0x3d/0x2f0 [ 14.506423] srremove+0x28/0x70 [ 14.506427] devicereleasedriverinternal+0xef/0x1c0 [ 14.506428] devicereleasedriver+0x12/0x20 [ 14.506429] busremovedevice+0xe1/0x150 [ 14.506431] devicedel+0x167/0x380 [ 14.506432] _scsiremovedevice+0x11d/0x150 [ 14.506433] scsiremovedevice+0x26/0x40 [ 14.506434] storvscremovelun+0x40/0x60 [ 14.506436] processonework+0x209/0x400 [ 14.506437] workerthread+0x34/0x400 [ 14.506439] kthread+0x121/0x140 [ 14.506440] ? processonework+0x400/0x400 [ 14.506441] ? kthreadpark+0x90/0x90 [ 14.506443] retfrom_fork+0x35/0x40 [ 14.506445] ---[ end trace 2d9633159fdc6ee7 ]---