CVE-2026-31509Linux内核NFC子系统中存在循环锁依赖漏洞。在nci_close_device函数中,代码在持有req_lock锁的情况下刷新工作队列,导致处理函数无法获取同一把锁,从而引发死锁,造成拒绝服务。
该漏洞存在于Linux内核的net/nfc/nci/core.c文件中。问题核心在于nci_close_device()函数在执行时,持有互斥锁req_lock的同时,调用了flush_workqueue()来清空rx_wq和tx_wq。然而,rx_wq上的工作项(如nci_rx_work)在执行过程中,会通过调用链nci_rx_work -> nci_rx_data_packet -> nci_data_exchange_complete -> __sk_destruct -> rawsock_destruct -> nfc_deactivate_target -> nci_request尝试再次获取req_lock。由于该锁已被主线程持有且未释放,工作队列线程将永久阻塞,导致nci_close_device也无法完成(因为它在等待workqueue清空),形成典型的死锁场景。本地攻击者可利用此逻辑缺陷使系统挂起。