CVE-2026-23306Linux内核中的pm8001驱动存在双重释放漏洞。该漏洞源于pm8001_queue_command函数在设备离线时的处理逻辑错误。当检测到phy down或device gone状态时,函数内部已释放SAS任务并标记完成,但错误返回-ENODEV。导致上层调用者误判任务未处理而再次释放内存,引发内核崩溃或潜在权限提升。
该漏洞由Linux内核SCSI子系统pm8001驱动的重构引入。在pm8001_queue_command函数中,当物理链路断开或设备不可用时,驱动程序会调用task_done(t)释放SAS任务结构体,随后返回-ENODEV错误码。然而,上层函数sas_ata_qc_issue在接收到-ENODEV时,认为底层驱动未接管该任务,因此执行清理流程并再次调用kfree释放同一任务指针。这种重复释放同一内存区域的行为破坏了内核堆管理,可能导致Use-After-Free,本地低权限攻击者可利用此漏洞提升权限或造成系统拒绝服务。