CVE-2023-54321CVE-2023-54321是Linux内核driver core中的一个空指针解引用漏洞。该漏洞存在于device_add()函数中,当设备添加过程中某个步骤失败时(如dpm_sysfs_add()失败),系统会调用bus_remove_device()进行错误处理。然而,此时dev->driver指针已经被设置为w1_master_driver,但device_bind_driver()尚未被调用,导致klist_remove()在访问dev->p->knode_driver时触发空指针解引用。该漏洞的CVSS评分为5.5,属于中危级别,攻击向量为本地攻击,需要低权限用户即可触发。攻击成功将导致系统崩溃(拒绝服务),但不会造成机密性或完整性影响。漏洞主要影响使用1-Wire总线和ds2482驱动的系统。
漏洞根源在于device_add()函数的错误处理路径设计缺陷。具体来说,当w1_alloc_dev()分配新设备时,会将dev->driver设置为w1_master_driver,然后调用device_add()将设备添加到系统中。在device_add()执行过程中,bus_add_device()成功将设备添加到总线,但随后的dpm_sysfs_add()失败。此时进入错误处理路径,调用bus_remove_device()移除设备。在bus_remove_device()内部,__device_release_driver()被调用,由于dev->driver非空,系统认为设备已绑定驱动,因此调用klist_remove(&dev->p->knode_driver)尝试从驱动列表中移除设备。然而,device_bind_driver()从未被调用,knode_driver结构未被正确初始化,导致访问地址0x58时触发空指针解引用。修复方案是在调用bus_remove_device()之前将dev->driver设置为NULL,确保错误路径不会误认为设备已绑定驱动。