CVE-2026-31749Linux内核中的COMEDI子系统ni_atmio16d驱动存在一处资源清理逻辑缺陷。当设备初始化过程发生错误时,系统会调用detach函数进行回滚。然而,detach函数未对设备初始化状态进行检查,直接调用了重置函数。此时,若设备私有数据指针尚未分配或IO端口基址未设置,将导致内核空指针解引用或非法I/O端口写入,进而引发系统崩溃或拒绝服务。
该漏洞位于Linux内核驱动ni_atmio16d.c中。漏洞的触发始于atmio16d_attach()函数执行失败。根据COMEDI框架的机制,attach失败会自动触发atmio16d_detach()以释放已分配资源。关键问题在于atmio16d_detach()无条件调用了reset_atmio16d()。reset_atmio16d()依赖dev->iobase作为I/O端口地址,并访问dev->private指向的数据结构。如果attach失败发生在devpriv(私有数据)分配之前,dev->private为NULL,导致空指针解引用。如果失败发生在iobase设置之前,其为0,导致向低位I/O端口(如0x0000)写入指令,这可能导致硬件冲突或系统不稳定。修复方案是在调用reset_atmio16d()前检查dev->private是否有效。