CVE-2026-31576Linux内核中的hackrf驱动存在严重的竞态条件漏洞。在hackrf_probe函数的错误处理路径中,当设备注册成功后若发生错误,驱动会直接调用kfree释放设备内存。然而,此时已打开的设备文件描述符尚未释放,仍可进行I/O操作。攻击者可利用这一时间差,通过ioctl或close操作访问已被释放的内存,导致释放后重用(UAF)和双重释放(DFB),进而可能导致本地权限提升或系统内核崩溃。
该漏洞的核心在于Linux内核hackrf驱动程序在设备探测阶段的资源管理不当。漏洞发生在一个典型的多核竞态场景中:CPU0执行hackrf_probe时,在v4l2_device_register成功后,若遇到错误会调用v4l2_device_unregister并紧接着kfree释放hackrf_dev结构体。与此同时,CPU1可能已经通过sys_open获取了该设备的文件描述符。由于内核设计保证已打开的文件描述符在release调用前保持有效,CPU1随后调用sys_ioctl或sys_close时,会尝试访问已被CPU0释放的内存空间,从而触发UAF。此外,当CPU1最终调用hackrf_video_release时,会再次尝试释放同一块内存,导致Double Free。攻击者可通过多线程程序高频触发竞态窗口,破坏内核内存管理结构。