1
1
---
2
- status : translated
2
+ status : proofread
3
3
title : " syz-verifier"
4
4
author : Syzkaller Community
5
5
collector : jxlpzqc
6
6
collected_date : 20240314
7
7
translator : Kozmosa
8
8
translated_date : 20250718
9
+ proofreader : yinchunyuan
10
+ proofread_date : 20250909
9
11
priority : 10
10
12
link : https://github.com/google/syzkaller/blob/master/docs/syz_verifier.md
11
13
---
@@ -21,19 +23,19 @@ link: https://github.com/google/syzkaller/blob/master/docs/syz_verifier.md
21
23
许多测试套件旨在检测回归问题,但创建和维护测试用例,以及覆盖新功能都需要大量的工程投入。
22
24
23
25
* 差分模糊测试* 是一种自动化检测语义错误的方法,它将相同的输入提供给同一系统的不同实现,然后交叉比对由此产生的行为以确定它们是否一致。
24
- 如果系统之间出现分歧,那么至少其中一个被认为是错误的 。
26
+ 如果系统之间出现分歧,那么其中至少有一个将被认为是错误的 。
25
27
26
28
` syz-verifier ` 是一款差分模糊测试工具,它通过交叉比对程序在不同版本的 Linux 内核上的执行情况来检测语义错误。
27
29
28
30
` syz-verifier ` 的架构如下图所示。
29
31
30
32
![ Architecture overview] ( syz_verifier_structure.png )
31
33
32
- ` syz-verifier ` 进程负责启动并管理带有待比对内核的虚拟机实例。它还会在这些虚拟机上启动 ` syz-runner ` 进程。主机和客户机之间的通信通过 RPC 完成。
34
+ ` syz-verifier ` 进程负责启动并管理带有待比对内核的虚拟机实例。它还会在这些虚拟机上启动 ` syz-runner ` 进程。主机和客户机之间的通信由 RPC 完成。
33
35
34
36
` syz-verifier ` 生成程序流并通过 RPC 持续发送给 ` syz-runner ` ,而 ` syz-runner ` 负责启动 ` syz-executor ` 进程,并将程序转换为后者的输入。` syz-executor ` 处理输入,这会在内核中触发一系列系统调用。然后,` syz-runner ` 收集结果并将其发送回主机。
35
37
36
- 目前 ,结果包含了每个系统调用返回的错误码 (errno)。当 ` syz-verifier ` 收到来自所有内核针对特定程序的结果后,它会验证这些结果以确保它们完全相同。如果发现不一致,该程序会在所有内核上重新运行,以确保这种不一致不是偶发性的(例如,不是由某些后台活动或外部状态引起的)。如果这种不一致在所有重试中都出现,` syz-verifier ` 会为该程序创建一份报告并将其写入持久化存储。
38
+ 现在 ,结果包含了每个系统调用返回的错误码 (errno)。当 ` syz-verifier ` 收到来自所有内核针对特定程序的结果后,它会验证这些结果以确保它们完全相同。如果发现不一致,该程序会在所有内核上重新运行,以确保这种不一致不是偶发性的(例如,不是由某些后台活动或外部状态引起的)。如果这种不一致在所有重试中都出现,` syz-verifier ` 会为该程序创建一份报告并将其写入持久化存储。
37
39
38
40
# 如何使用 syz-verifier
39
41
@@ -60,7 +62,7 @@ make verifier runner executor
60
62
61
63
# 如何解读结果
62
64
63
- 结果可以在 ` workdir/results ` 目录中找到 。
65
+ 可以在 ` workdir/results ` 目录中找到结果 。
64
66
65
67
当 ` syz-verifier ` 在一个程序中发现不一致时,它会为该程序创建一份报告。报告会列出每个交叉比对的内核为每个系统调用返回的结果,并高亮显示发现不一致的地方。系统调用按其在程序中出现的顺序列出。
66
68
@@ -83,11 +85,10 @@ ERRNO mismatches found for program:
83
85
...
84
86
```
85
87
86
- 结果的顺序由传递配置文件时的顺序决定,因此 ` Pool: 0 ` 报告的是使用 ` kernel0.cfg ` 创建的内核的结果,以此类推。
88
+ 结果的顺序由传递配置文件时的顺序决定,因此, ` Pool: 0 ` 报告的是使用 ` kernel0.cfg ` 创建的内核的结果,以此类推。
87
89
88
90
[ 标志] ( /pkg/ipc/ipc.go#L82 ) 可用于确定系统调用达到的状态:
89
91
* ` 0 ` = 系统调用甚至未开始
90
92
* ` 1 ` = 系统调用已开始
91
93
* ` 3 ` = 系统调用已执行完毕
92
94
* ` 7 ` = 系统调用被阻塞
93
- ```
0 commit comments