CVE-2026-31730Linux内核中的fastrpc组件存在一个双重释放漏洞。在`fastrpc_init_create_static_process()`函数的错误处理路径中,虽然释放了`cctx->remote_heap`,但未将指针置空。随后如果rpmsg设备被移除或解绑,`fastrpc_rpmsg_remove()`函数会检查该指针非空并再次释放同一内存,导致双重释放。该漏洞允许本地低权限攻击者利用此缺陷导致内核崩溃或潜在的提升权限。
该漏洞源于Linux内核驱动`drivers/misc/fastrpc.c`中资源管理逻辑的缺陷。具体而言,当`fastrpc_init_create_static_process`函数在处理`INIT_CREATE_STATIC` ioctl调用时,若进入错误处理标签`err_map`,会执行`kfree(cctx->remote_heap)`释放堆内存。然而,代码遗漏了将`cctx->remote_heap`指针设置为NULL的操作。在后续的设备生命周期中,如果rpmsg设备被移除,系统会调用`fastrpc_rpmsg_remove`进行清理。由于`cctx->remote_heap`仍持有已释放的地址,`fastrpc_rpmsg_remove`中的判空检查失效,从而对同一块内存执行第二次释放。这种双重释放会导致堆结构损坏,攻击者可利用此原语进行内核堆布局操控,进而实现拒绝服务或本地权限提升。