添加新的操作系统支持
为了让 syzkaller 支持一个新的操作系统内核,以下是需要编辑的 syzkaller 的共同部分。然而,特定内核可能还需要一些特定的更改(例如,从给定内核收集代码覆盖率,或者一些可能弹出并给出调整提示的错误信息)。
syz-executor
每个操作系统都有一个 executor/executor_GOOS.h 文件,其中 GOOS 为操作系统名字,例如 executor/executor_linux.h。该文件包含两个重要函数:
os_init负责为调用进程映射虚拟地址空间,execute_syscall负责为特定操作系统内核执行系统调用。
这两个函数在 executor/executor.cc 中被调用,主要负责执行系统调用程序,并管理程序运行的线程。
executor_GOOS.h 还包含与该操作系统相关的函数,例如允许它收集覆盖率信息、检测位宽等的函数(例如:executor_linux.h)。
目标内核将根据 executor/executor.cc 文件中定义的宏调用预期的函数。
构建文件 pkg/
- 在
pkg/build/build.go中添加操作系统名称及其支持的架构 - 在
pkg/build/下创建一个构建目标内核镜像的文件。这个文件包含配置和构建可启动镜像构建的函数以及生成 SSH 密钥的函数,这些密钥将由 Syzkaller 用于访问虚拟机。每个由 Syzkaller 支持的操作系统都有一个名为GOOS.go的文件。 - 将给定目标添加到
s/makefile/Makefile/。
报告文件 pkg/report/
在 pkg/report/ 下为目标内核创建一个报告构建错误的文件。每个由 Syzkaller 支持的操作系统都有一个名为 GOOS.go 的文件。
编辑 pkg/host/
- 实现
isSupported函数,该函数对于支持的系统调用返回 true,同时它位于pkg/host/GOOS目录中。
在 sys/GOOS/ 下创建文件
在 sys/GOOS/ 下为目标内核创建一个 init.go 文件,其中包含初始化目标和不同支持架构的 initTarget 函数。
编辑 sys/syz-extract
将新内核名称添加到已支持的内核列表中,并更新到文件 sys/syz-extract/extract.go 中。
编辑 sys/targets
将新内核名称添加到已支持的内核列表中,并更新到文件 sys/targets/targets.go 中。
编辑 vm/qemu
将新内核名称添加到已支持内核的列表中,并更新到文件 vm/qemu/qemu.go 中。
Syzkaller 描述与伪系统调用
译自: https://github.com/google/syzkaller/blob/master/docs/adding_new_os_support.md
选题: jxlpzqc 译者: ElizaXiao 校对: mudongliang 发布者:mudongliang
本文由 HCTT 翻译团队 原创翻译,华中科技大学开放原子开源俱乐部荣誉推出。