内核内存泄漏检测与修复实战

📚 共计 30 章节
第01章
内存泄漏概述
什么是内核内存泄漏 · 常见危害 · 为何比用户态更危险 · 课程知识体系
概念入门
第02章
内核内存管理基础
物理/虚拟内存 · 页框页表 · 伙伴系统 · SLUB分配器
原理BuddySLUB
第03章
内存分配与释放API
kmalloc/kfree · vmalloc/vfree · kmem_cache · get_free_page
API编程
第04章
内存泄漏典型场景
分配未释放 · 错误分支 · 引用计数泄漏 · 对象未销毁
场景模式
第05章
静态检测工具
Sparse · Smatch · Coccinelle · 语义补丁编写
静态分析工具
第06章
动态检测工具:KASAN
原理与配置 · 检测实战 · 优缺点分析
KASAN动态
第07章
动态检测工具:kmemleak
原理配置 · 扫描报告解读 · 实战案例分析
kmemleak扫描
第08章
Kmemcheck/KMSAN/KCSAN
废弃工具简介 · KMSAN · KCSAN · 如何选择检测工具
KMSANKCSAN
第09章
内核调试文件系统
/proc/meminfo · /sys/kernel/slab/ · /proc/slabinfo
调试proc
第10章
ftrace与内存跟踪
ftrace基础 · 跟踪分配路径 · trace_printk技巧
ftrace跟踪
第11章
eBPF与内存泄漏检测
eBPF基础 · bpftrace跟踪kmalloc/kfree · eBPF监控
eBPFbpftrace
第12章
内存泄漏复现策略
最小复现用例 · syzkaller模糊测试 · 压力/长时间测试
复现syzkaller
第13章
内核模块内存泄漏
模块加载/卸载 · 常见原因 · module_exit正确释放
模块驱动
第14章
驱动开发中的内存泄漏
字符设备 · 网络sk_buff泄漏 · 块设备bio泄漏
驱动sk_buff
第15章
文件系统内存泄漏
inode/dentry缓存 · page cache · 私有数据泄漏
文件系统缓存
第16章
网络协议栈内存泄漏
socket结构体 · sk_buff · 网络命名空间泄漏
网络协议栈
第17章
内存泄漏修复原则
谁分配谁释放 · 错误路径 · 引用计数 · 自动释放
原则最佳实践
第18章
修复技巧
goto统一处理 · 辅助函数封装 · 内核自动清理
技巧goto
第19章
内核自动清理机制
__attribute__((cleanup)) · kfree自动包装 · scope资源管理
cleanupRAII
第20章
引用计数管理
kref · kobject · get/put配对 · 循环引用检测
kref引用计数
第21章
内存池与对象池
mempool · kmem_cache复用 · 减少碎片与泄漏
内存池对象池
第22章
案例分析1:CVE-2021-XXXX
真实案例 · 根因分析 · 补丁解读与修复过程
CVE实战
第23章
案例分析2:CVE-2022-YYYY
真实案例 · 根因分析 · 补丁解读与修复过程
CVE实战
第24章
案例分析3:社区经典泄漏
邮件列表经典泄漏 · bug报告到补丁提交全流程
社区流程
第25章
编写内核测试用例
kunit框架 · 分配释放单元测试 · 自动化集成
kunit测试
第26章
代码审查中的内存泄漏
审查checklist · 常见泄漏模式 · 实战演练
审查checklist
第27章
生产环境排查
内存持续下降 · /proc和sysfs定位 · 在线诊断技巧
生产诊断
第28章
监控与告警
监控脚本 · 内存阈值 · 基于eBPF实时告警
监控告警
第29章
修复挑战与验证
并发竞态 · 内存排序屏障 · 修复后验证
并发验证
第30章
课程总结与进阶
知识体系回顾 · 推荐阅读 · 社区参与 · 专家路径
总结进阶