CVE-2026-98619 in Linux
요약
\~에 의해 VulDB • 2026. 10. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: ethtool: ioctl 셀프 테스트 중 rtnl_lock 유지
인터페이스를 내렸다가 다시 올리는 오프라인(self) 테스트는 netif_close() 및 netif_open()을 사용할 때 둘 모두에 대해 rtnl_lock이 필요합니다. ethtool IOCTL 경로가 ops-locked 드라이버의 경우 rtnl 선택적(rtnl-optional)이 되었으므로, ETHTOOL_TEST ioctl은 netdev 인스턴스 잠금만 유지한 채로 실행됩니다. 따라서 ops-locked 드라이버에서는 셀프 테스트 시 rtnl_lock 없이 장치가 다운되는 상황이 발생합니다.
lockdep를 사용하면 이러한 조건에서 오프라인 셀프 테스트가 결정론적으로 재현됩니다; 여기서 유일한 잠금은 instance lock이며, rtnl은 아닙니다:
WARNING: suspicious RCU usage net/core/netpoll.c:207 suspicious rcu_dereference_protected() usage! 1 lock held by ethtool/107: #0: (&dev->lock){+.+.}, at: dev_ethtool
Call Trace: netpoll_poll_disable __dev_close_many netif_close_many netif_close fbnic_self_test dev_ethtool_locked dev_ethtool dev_ioctl sock_ioctl __x64_sys_ioctl
lockdep가 없는 경우에도 동일한 조건이 __dev_close_many() / __dev_open() 내의 ASSERT_RTNL()를 트리거합니다. 이 체크는 전역 rtnl 상태만 샘플링하므로, 동시에 rtnl을 보유하는 다른 프로세스에 의해 가려질 수 있지만, 장치는 여전히 필요한 잠금 없이 재구성되고 있습니다.
ethtool self_test는 레거시 ioctl 전용 명령이므로, ETHTOOL_TEST 케이스는 ioctl 경로에서만 필요합니다. 셀프 테스트에 rtnl_lock이 필요한 드라이버를 위한 opt-in 비트를 추가하고, 오프라인 셀프 테스트가 인터페이스를 내렸다가 다시 올리는 ops-locked 드라이버에 해당 비트를 설정합니다:
- fbnic (queue_mgmt_ops를 통해 ops-locked): fbnic_self_test()의 오프라인 경로는 netif_close() / netif_open()을 사용합니다. - bnxt (queue_mgmt_ops를 통해 ops-locked): bnxt_self_test()의 오프라인 경로는 bnxt_close_nic() / bnxt_half_open_nic() / bnxt_half_close_nic() / bnxt_open_nic()을 거치며, 이는 장치를 닫고 다시 엽니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.