In the Linux kernel, the following vulnerability has been resolved:
net: hns3: fix deadlock issue when externel_lb and reset are executed together
When externellb and reset are executed together, a deadlock may occur: [ 3147.217009] INFO: task kworker/u321:0:7 blocked for more than 120 seconds. [ 3147.230483] "echo 0 > /proc/sys/kernel/hungtasktimeoutsecs" disables this message. [ 3147.238999] task:kworker/u321:0 state:D stack: 0 pid: 7 ppid: 2 flags:0x00000008 [ 3147.248045] Workqueue: hclge hclgeservicetask [hclge] [ 3147.253957] Call trace: [ 3147.257093] __switch_to+0x7c/0xbc [ 3147.261183] __schedule+0x338/0x6f0 [ 3147.265357] schedule+0x50/0xe0 [ 3147.269185] schedulepreemptdisabled+0x18/0x24 [ 3147.274488] __mutex_lock.constprop.0+0x1d4/0x5dc [ 3147.279880] __mutexlockslowpath+0x1c/0x30 [ 3147.284839] mutexlock+0x50/0x60 [ 3147.288841] rtnllock+0x20/0x2c [ 3147.292759] hclgeresetprepare+0x68/0x90 [hclge] [ 3147.298239] hclgeresetsubtask+0x88/0xe0 [hclge] [ 3147.303718] hclgeresetservicetask+0x84/0x120 [hclge] [ 3147.309718] hclgeservicetask+0x2c/0x70 [hclge] [ 3147.315109] processonework+0x1d0/0x490 [ 3147.319805] workerthread+0x158/0x3d0 [ 3147.324240] kthread+0x108/0x13c [ 3147.328154] retfromfork+0x10/0x18
In externellb process, the hns3 driver call napidisable() first, then the reset happen, then the restore process of the externellb will fail, and will not call napienable(). When doing externellb again, napidisable() will be double call, cause a deadlock of rtnl_lock().
This patch use the HNS3NICSTATEDOWN state to protect the calling of napidisable() and napienable() in externellb process, just as the usage in ndostop() and ndostart().
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/54xxx/CVE-2023-54000.json"
}