CVE-2026-31585Linux内核中的vidtv驱动存在一个内存泄漏漏洞。当vidtv_start_streaming函数在vidtv_start_feed内部调用失败时,nfeeds计数器被错误地保留为递增状态,导致驱动状态损坏。这可能导致后续的start_feed调用跳过启动多路复用器,而stop_feed调用尝试停止不存在的流。此外,由于部分分配的资源未被清理,可能引发内存泄漏问题。该漏洞需要本地低权限用户交互即可触发,影响系统可用性。
该漏洞源于Linux内核媒体子系统中vidtv测试驱动程序的逻辑错误。具体而言,在vidtv_start_feed函数执行期间,当调用vidtv_start_streaming尝试启动数据流时,如果发生初始化失败,代码未能正确执行异常恢复逻辑。此时,代表活跃feed数量的nfeeds计数器已被递增,但在错误处理路径中未被相应地递减回滚。这种状态不一致导致驱动程序误认为系统中存在活跃的流。后果是,后续的start_feed调用因为检测到nfeeds大于0而跳过多路复用器的启动,而stop_feed调用则尝试停止一个实际上并不存在的流。此外,由于在失败的start_streaming过程中可能分配了部分mux和channel资源,而停止路径因错误状态提前返回,导致这些资源永远不会被释放。syzbot捕获的堆栈跟踪证实了在vidtv_psi_service_desc_init等函数中存在未引用对象的泄漏。本地低权限攻击者可利用此漏洞反复触发错误路径,耗尽内核内存,导致系统拒绝服务。