v2
2026-08-14
SLUB 保留重用前对象调试信息 · v2
为 SLAB_STORE_USER 新增 SLUB 调试选项,在对象被重用后保留上一次 alloc/free 记录,便于分析 free-after-reuse 中陈旧指针来源。
原始补丁链接
子 Patch(4)
1/4
mm/slub: use a track count for user metadata sizing
在 mm/slub.c 中新增 TRACK_NR 枚举,统一 SLAB_STORE_USER 元数据初始化、对象偏移、padding 和 cache sizing 中的跟踪计数,行为不变,为扩展历史跟踪做准备。
2/4
mm/slub: preserve one previous object lifetime
记录新分配前,将当前 alloc/free 对复制到 previous 槽,保留上次完整生命周期;仅在两条记录都存在时复制,并输出 previous 对供诊断,避免 stale free 覆盖丢失信息。
3/4
mm/slub: test previous lifetime tracking
新增 KUnit 测试验证 SLAB_STORE_USER 重用后保留前一次完整 alloc/free 对;使用不可合并 cache 并固定任务迁移,同时排除 KASAN 以防止 quarantine 阻止立即重用。
4/4
Documentation/mm: describe SLUB previous lifetime tracking
更新 slub 文档,说明 SLAB_STORE_USER 会保留一个 previous 分配/释放对,在报告中展示新增的 previous 段,并强调地址历史仅作诊断证据,不表示语义归属。