Skip to content

fix zcore bug

Yu Chen edited this page Aug 10, 2021 · 4 revisions

一次发现并修补(fix) zCore 缺陷(bug)的经历

简介

zCore 操作系统目前的核心代码已经接近3万行代码,如何发现并修补zCore的漏洞越来越成为一个值得重视的事情。本文将描述近期在修补zCore操作系统的过程,包括建立CI/CD, 选择测试用例,分析测试用例,分析出错情况,修补内核等。希望能帮助zCore的开发者改进和修补zCore操作系统。

介绍

zCore操作系统是一种用 Rust 语言重新实现的 C++ based Zircon 微内核,并扩展了LibOS模式和Linux模式。zCore操作系统可以在用户态和内核态运行Linux应用和Fuchsia应用。随着zCore的功能发展,代码量越来越大,如何发现、测试和修复zCore中的bug也越来越有挑战。目前zCore驻留在GITHUB上,而GITHUB有自动的CI/CD支持。为此,我们想到充分利用GITHUB的CI/CD来帮助我们自动测试zCore的功能是否正常。为此从2020年6月开始,王润基逐步开展了基于zCore的用户态LibOS模式来自动测试zCore操作系统。这部分的测试代码主要在:

# github CI/CD自动测试的总控脚本(会调用下面的测试脚本)
/.github/workflows/main.yml b/.github/workflows/main.yml 

# 测试 zircon syscall的测试脚本(基于zircon的core-tests测试集)
/scripts/core-tests.py
# 通过的core-tests测试点列表(基于zircon的core-tests测试集)
/scripts/zircon/test-check-passed.txt
# core-tests测试集列表(基于zircon的core-tests测试集)
/scripts/zircon/testcased.txt

# 测试 linux syscall的测试脚本(基于musl libc的libc-tests测试集)
/scripts/libc-tests.py
# 通过的libc-tests测试集列表 (在zcore LibOS模式下通过的libc-tests测试集)
/scripts/linux/test-result.txt
# 没通过的libc-tests测试集列表 (在zcore LibOS模式下没通过的libc-tests测试集)
/scripts/linux/test-allow-failed.txt

开发者在对zCore仓库的每次提交时,上述这部分测试功能通过GITHUB的CI/CD的管理被自动触发。并且只有在通过了测试(没有引入新bug)的情况下,才能被merge到zCore仓库master分支。这样在一定程度上有效地杜绝了潜在bug的任意引入。但上述测试功能的一个不足是没有加入对基于内核态的zCore的功能测试,而zCore已经加入了对RISC-V 64 CPU的支持,这导致测试的范围受限,这需要改进上述测试脚本。

实现内核态zCore的CI/CD

于是我们开始进行对zCore的CI/CD进行扩展。实现内核态zCore的测试,需要有一个模拟物理机的虚拟机软件(我们采用的QEMU)。

Clone this wiki locally