Metis: File System Model Checking via Versatile Input and State Exploration——论文泛读

FAST 2024 Paper 分布式元数据论文整理

问题

文件系统测试是发现漏洞[43]和提高整体系统可靠性[27]的重要技术。然而,由于文件系统固有的复杂性[4],包括许多角落案例[87]、无数功能[8]和一致性要求(例如,崩溃一致性[64,72]),文件系统的有效测试具有挑战性。

为了暴露文件系统错误,测试工具必须使用给定文件系统状态的特定输入执行特定的系统调用[52,53,87]。例如,识别Ext4错误[48]需要对用530字节数据段初始化的文件进行写操作。在这种情况下,写入操作是一种输入,具有特定大小的文件构成文件系统状态(的一部分)。

现有方法局限性

虽然现有的测试技术试图覆盖广泛的文件系统功能,但它们通常不会集成文件系统输入和状态的覆盖范围[12,43,59,85]。例如,像xfstests[71]这样的手写回归工具可以实现对特定文件系统功能的良好测试覆盖[4,58],但不能全面覆盖系统调用输入;模糊技术(例如,Syzkaller[25])被设计为最大化代码而非输入覆盖范围[40]。

但文件系统的输入空间和状态空间太大,无法完全探索和测试[10,21],因此最好关注最相关的输入和状态来利用有限的资源[52,86,88]。例如,在POSIX合规性测试中,更频繁地使用元数据更改操作,如链接和重命名,以及具有复杂目录结构的状态[67]。现有的测试技术也缺乏测试特定输入和状态的通用性[25,59,71]。因此,需要新的测试工具和技术[52,53]来避免测试不足(这可能会错过潜在的bug)或测试过度(这浪费了可以更好地部署在其他地方的资源)。

本文方法

本文提出了Metis,一个模型检查框架,旨在以输入和状态探索的形式进行通用、彻底、可配置的文件系统测试。Metis同时运行两个文件系统:一个是测试文件系统,另一个是参考文件系统。Metis发布文件系统操作(即,带有参数的系统调用)作为两个文件系统的输入,同时通过图搜索(例如,深度优先搜索[31])监视和探索状态空间。

为了比较文件系统状态的相关方面,对它们进行抽象后比较。抽象状态包括文件数据、目录结构和基本元数据,抽象状态构成了状态空间。Metis首先非决定性地选择一个操作,通过用户指定的加权方案填充系统调用参数。接下来,在两个文件系统中执行相同的操作,然后比较两个系统的抽象状态。任何差异都被标记为潜在的错误。Metis评估操作后的状态,以决定之前是否已经探索过状态;如果是这样,它会回溯到父状态,并选择一个新的状态进行探索[31]。Metis不断测试新的文件系统状态,直到没有其他未探索的状态,记录所有操作和访问的状态以供后续分析。Metis的回放程序可以用最少的时间和精力重现潜在的漏洞。

本文还开发了RefFS,一个小型、快速的文件系统作为参考文件系统,旨在加速模型检查和增强缺陷再现性。

实验结果表明,Metis可以灵活地生成测试输入,它探索文件系统状态的速率在多个节点之间几乎呈线性扩展。RefFS探索状态的速度是其他更成熟的文件系统的3–28倍。Metis协助开发了RefFS,报告了11个错误,我们随后修复了这些错误。Metis进一步从其他五个文件系统中发现了12个错误,其中五个已被确认,其中一个已修复并集成到Linux中。

实验

实验环境:在三台相同的机器上评估了Metis,每台机器都运行Ubuntu 22.04,双Intel Xeon X5650 CPU和128GB RAM,一个128GB NVMe SSD用于交换空间。

数据集:专门为测量文件系统测试中的输入覆盖率而设计的工具[52]

实验对比:输入覆盖计数,操作数

实验参数:开放标识,写大小

总结

针对文件系统测试工具,现有工具不会集成文件系统输入和状态的覆盖范围,只能针对部分文件系统或部分系统调用进行测试。本文提出Metis,一个模型检查框架,旨在以输入和状态探索的形式进行通用、彻底、可配置的文件系统测试。核心思想是同时运行两个文件系统:一个测试文件系统,一个参考文件系统。向两个系统发布操作(带有参数的系统调用),同时通过图搜索(深度优先搜索)监视和探索状态空间(文件数据、目录结构和基本元数据)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值