v1
2026-08-13
修复 alloc_tag 关闭时竞态与泄漏 · v1
修复 shutdown_mem_profiling() 与模块加载器交互的 3 个问题:percpu 计数泄漏、layout/move TOCTOU 覆盖模块内存、模块加载与 /proc/allocinfo 读者 AB-BA 死锁,新增 CODETAG_MODULE_EXCLUDED 标记。
原始补丁链接
子 Patch(3)
1/3
alloc_tag: skip percpu counter allocation when profiling is disabled
关闭profiling后codetag section不进maple tree仍分配percpu counter致泄漏;load_module()返回EXCLUDED使init丢弃cmod且不分配counter,unload总释放section。
2/3
module: move codetag section placement decision to layout_sections()
codetag section决策在layout_sections()和move_module()中重复计算,mem_profiling_support可能中途变化导致section被覆盖;在layout时记录决策,move时直接使用。
3/3
alloc_tag: remove /proc/allocinfo outside of mod_lock
shutdown_mem_profiling()在mod_lock写锁下调用remove_proc_entry(),与allocinfo reader的读锁死锁,改为通过workqueue异步删除/proc/allocinfo。