CVE-2026-23387Linux内核中的pinctrl子系统cirrus cs42l43驱动存在双重释放漏洞。在cs42l43_pin_probe()函数中,由于devm_add_action_or_reset()在失败时已经会执行清理操作,代码中显式调用put导致了对同一资源的双重释放。该漏洞可能引发内存损坏,本地低权限攻击者可利用此漏洞提升权限或导致系统崩溃。
该漏洞位于Linux内核的`drivers/pinctrl/cirrus/pinctrl-cs42l43.c`文件中的`cs42l43_pin_probe()`函数。在初始化过程中,代码使用了`devm_add_action_or_reset()`辅助函数来注册资源的自动释放回调。该机制的设计允许在设备探测失败或驱动卸载时自动执行清理逻辑。然而,漏洞代码在注册该回调后,若后续步骤失败,错误处理路径中仍然显式调用了资源释放函数(如put_device)。由于`devm_add_action_or_reset`在检测到错误返回时已经执行了注册的清理动作,后续的显式调用导致了同一个设备对象引用计数被减少两次,即“Double Put”。这种引用计数错误会进一步导致Use-After-Free(释放后重用)或内核堆内存破坏。鉴于CVSS评分为7.8,属于本地高危漏洞,具备低权限的本地攻击者可通过特定操作触发该驱动探测失败,从而利用内存破坏漏洞实现本地权限提升(LPE)或造成系统拒绝服务。