v1
2026-10-26
KFENCE池分配失败修复 · v1
修正 late KFENCE 初始化失败时池清理地址和页复用窗口,并在 RISC-V 早期池保留失败时继续启动,避免错误释放或启动失败。
原始补丁链接
子 Patch(3)
1/3
kfence: fix pool cleanup on metadata allocation failure
kfence_init_late() 改为在 pool 分配成功后再把地址存入 addr,确保 metadata 分配失败走清理路径时能释放已分配的 pool,而不是用 NULL 地址释放。
2/3
kfence: clear the pool pointer before freeing pages
late init 失败释放 pool 前先清空 __kfence_pool,并用保存地址清理,防止页面被 slab 复用后 is_kfence_address() 误判为 KFENCE 对象。
3/3
riscv: keep booting if KFENCE pool reservation fails
RISC-V 在 KFENCE pool 保留失败时不再 BUG_ON 停机,而是继续建立线性映射并禁用 KFENCE;同时拒绝后续 pool 初始化,避免大页映射下 kfence_protect_page() 无法处理。