论文标题
通过反馈驱动的模糊,改进Linux-Kernel测试
Improving Linux-Kernel Tests for LockDoc with Feedback-driven Fuzzing
论文作者
论文摘要
LockDoc是一种从系统下降的动态执行跟踪中提取内核数据结构的锁定规则的方法。这些锁定规则可以例如用于定位同步错误。对于高规则的精度和彻底的错误查找,该方法在很大程度上取决于基准的选择:它们必须触发与目标数据结构相关的内核子系统中尽可能多的代码的执行。但是,现有的测试套件(例如Linux测试项目(LTP)提供的套件)仅在LTP的情况下实现了VFS子系统的35%基本块覆盖范围,这是针对文件系统相关数据相关数据结构的锁定规则时的相关子系统。 在本文中,我们将讨论如何补充LTP套件以改善LockDoc方案的代码覆盖范围。我们重新使用Syzkaller-一种覆盖范围引导的Fuzzer,其目标是验证内核API的鲁棒性 - 1)不针对内核崩溃,以及2)最大化特定内核子系统的代码覆盖率。因此,我们生成了新的基准计划,除LTP外还可以运行,并将VFS基本障碍覆盖率提高26.1%。
LockDoc is an approach to extract locking rules for kernel data structures from a dynamic execution trace recorded while the system is under a benchmark load. These locking rules can e.g. be used to locate synchronization bugs. For high rule precision and thorough bug finding, the approach heavily depends on the choice of benchmarks: They must trigger the execution of as much code as possible in the kernel subsystem relevant for the targeted data structures. However, existing test suites such as those provided by the Linux Test Project (LTP) only achieve -- in the case of LTP -- about 35 percent basic-block coverage for the VFS subsystem, which is the relevant subsystem when extracting locking rules for filesystem-related data structures. In this article, we discuss how to complement the LTP suites to improve the code coverage for our LockDoc scenario. We repurpose syzkaller -- a coverage-guided fuzzer with the goal to validate the robustness of kernel APIs -- to 1) not aim for kernel crashes, and to 2) maximize code coverage for a specific kernel subsystem. Thereby, we generate new benchmark programs that can be run in addition to the LTP, and increase VFS basic-block coverage by 26.1 percent.