关键词:
静态分析
Linux内核定时器
并发错误
操作系统安全
摘要:
定时器是操作系统延迟任务调度与执行的驱动器,具有运行在原子上下文和异步执行的特性,可以在任何时刻与不同的线程并发执行,如果开发人员不能考虑到所有多线程交错的场景,则可能引入多种类型的并发错误,对操作系统安全产生严重威胁.定时器并发错误不仅涉及多线程交错,还涉及定时器处理程序的延迟执行与重复调度,比普通的并发错误更难发现,目前还没有工具可以有效地检测此类错误.总结3种定时器并发错误类型,即定时器睡眠错误、定时器死锁错误和僵尸定时器错误.为有效地对错误进行检测,首先通过指针分析,提取内核中所有与定时器有关的功能模块,避免对无关代码进行分析提高检测效率;然后构建上下文敏感、路径敏感和流敏感的过程间控制流图,为后续分析奠定基础;最后综合应用函数调用图遍历、锁集分析、指向分析、控制流分析等静态分析技术,设计针对3种定时器并发错误的检测算法.为评估算法的有效性,在Linux 5.15内核中共发现了328个真实定时器并发错误,向Linux内核社区提交了个56个补丁,截至目前, 49个补丁已经合并到Linux内核主线, 295个错误被确认和修复,申请了14个CVE编号,说明了所提方法的有效性.最后通过对比实验对算法的性能、漏报与误报情况进行了系统分析,并总结3种定时器并发错误的修复方法.