赛题报告提交与代码部署说明
kpatch-0.9.5: kpatch源码目录 syscare-1.2.1: syscare源码目录 test: 测试脚本 report.pdf: 本团队解题报告
OS: openEuler-22.03-LTS-SP3-x86_64, https://repo.openeuler.org/openEuler-22.03-LTS-SP3/virtual_machine_img/x86_64/ kpatch:https://gitee.com/src-openeuler/kpatch/tree/openEuler-22.03-LTS-SP3/ syscare:https://gitee.com/src-openeuler/syscare/commits/openEuler-22.03-LTS-SP3 commit:ee9a0e3756acb894bd3e0f3db69b4b8d7503132f
大部分依赖可在此步骤安装完成
kpatch
dnf upgrade --exclude=kernel dnf install -y make gcc patch bison flex openssl-devel kpatch kpatch-runtime dnf install -y kernel-source-`uname -r` kernel-debuginfo-`uname -r` kernel-devel-`uname -r` dnf install -y git rpm-build elfutils-libelf-devel gdb-headless git clone https://gitee.com/src-openeuler/kpatch.git mkdir -p ~/rpmbuild/SOURCES/ /bin/cp kpatch/* ~/rpmbuild/SOURCES/ rpmbuild -ba kpatch/kpatch.spec rpm -Uvh ~/rpmbuild/RPMS/`arch`/kpatch*.rpm rpm -Uvh ~/rpmbuild/RPMS/noarch/kpatch*.rpm
syscare
dnf install syscare
dnf install -y dwarves python3-devel cmake g++ elfutils elfutils-devel bpftool clang
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh export PATH=$PATH:$HOME/.cargo/bin
cd kpatch-0.9.5 make sudo make install
cd syscare-1.2.1 cargo install libbpf-cargo mkdir tmp cd tmp cmake -DCMAKE_INSTALL_PREFIX=/usr -DKERNEL_VERSION=$(uname -r) .. make make install systemctl daemon-reload systemctl restart syscare
cd test sh task1.sh
cd test sh task2.sh
cd test sh task3.sh
内核热补丁是系统运行时对内核进行修改的一种技术。与传统的内核冷补丁不同,内核热补丁不需要重新编译内核,也不需要重启系统,可以在不停机的情况下实现对内核的修改和更新。内核热补丁技术的实现原理是通过在内核中插入一段代码,这段代码可以在内核运行时被执行,从而实现对内核的修改。这种技术可以用于修复内核中的漏洞,增加新的功能或者改进内核性能等方面。 openEuler使用了kpatch内核热补丁技术,并在其上使用自研syscare技术进行封装,实现用户态、内核态热补丁的统一管理。然而,内核热补丁往往依赖了部分内核模块,导致加载时缺依赖报错。如何及早识别内核热补丁的依赖,并结合syscare实现依赖满足时的自动加载呢? 在这个赛题中,参赛者需基于openEuler 22.03-LTS-SP3分支的kpatch和syscare代码进行设计开发,实现内核热补丁依赖识别与加载过程的优化。
1)热补丁依赖元数据补充 参赛者需基于kpatch原有代码,在热补丁ko生成时将依赖信息注入其元数据中,使用户可以通过modinfo直接看到热补丁所需依赖,而非只能查看制作日志或激活后再通过livepatch -q进行查看。 2)热补丁缺失依赖识别 完成任务1后,参赛者需基于syscare原有代码进行优化,在热补丁加载前添加检查逻辑,通过热补丁ko的依赖信息提前判断当前依赖是否满足。若依赖不满足,则在终端界面提示缺失的所有依赖。 3)热补丁自加载 完成上两点后,参赛者需设计一套机制,监控热补丁依赖的内核模块的加载状态,当所有依赖满足时,自动加载满足条件的热补丁。这样既实现了热补丁的自动加载,又不会在加载时额外加载依赖,导致系统行为发生变化。 注意: a)参赛者无需修改现有热补丁状态机,依赖不满足的待加载热补丁可置为已激活。 b)不推荐使用额外进程或线程的形式轮询监测内核模块列表。 c)系统开销应尽可能低,在x86环境,22.03-LTS-SP3的openEuler操作系统上,cpu使用率小于1%
zhuyuncheng@huawei.com; xiaobo.liu@huawei.com
1)kpatch制品仓及使用文档(https://gitee.com/src-openeuler/kpatch/tree/openEuler-22.03-LTS-SP3/) 2)syscare制品仓(https://gitee.com/src-openeuler/syscare/tree/openEuler-22.03-LTS-SP3/) 3)syscare使用文档 (https://gitee.com/openeuler/syscare)
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
热补丁依赖识别及加载优化
目录结构
Build
Prepare
OS: openEuler-22.03-LTS-SP3-x86_64, https://repo.openeuler.org/openEuler-22.03-LTS-SP3/virtual_machine_img/x86_64/ kpatch:https://gitee.com/src-openeuler/kpatch/tree/openEuler-22.03-LTS-SP3/ syscare:https://gitee.com/src-openeuler/syscare/commits/openEuler-22.03-LTS-SP3 commit:ee9a0e3756acb894bd3e0f3db69b4b8d7503132f
大部分依赖可在此步骤安装完成
kpatch
syscare
Kpatch build
Syscare build
Test
Task 1: 热补丁依赖元数据补充
Task 2: 热补丁缺失依赖识别
Task 3: 热补丁自加载
题目和提交说明(原)
作品完成和提交方式:选择本赛题的参赛队伍需要首先复刻(Fork)本项目,然后在复刻的项目中添加参赛队员、合作完成作品开发即可,无需提交PR到赛题项目。如果作品为文档形式,也请将作品文档提交到项目代码库中。在作品完成过程中,围绕作品的相关讨论等可以以疑修(Issue)形式发布和讨论,也可使用里程碑对整个任务进行规划管理。
1. 赛题说明
内核热补丁是系统运行时对内核进行修改的一种技术。与传统的内核冷补丁不同,内核热补丁不需要重新编译内核,也不需要重启系统,可以在不停机的情况下实现对内核的修改和更新。内核热补丁技术的实现原理是通过在内核中插入一段代码,这段代码可以在内核运行时被执行,从而实现对内核的修改。这种技术可以用于修复内核中的漏洞,增加新的功能或者改进内核性能等方面。 openEuler使用了kpatch内核热补丁技术,并在其上使用自研syscare技术进行封装,实现用户态、内核态热补丁的统一管理。然而,内核热补丁往往依赖了部分内核模块,导致加载时缺依赖报错。如何及早识别内核热补丁的依赖,并结合syscare实现依赖满足时的自动加载呢? 在这个赛题中,参赛者需基于openEuler 22.03-LTS-SP3分支的kpatch和syscare代码进行设计开发,实现内核热补丁依赖识别与加载过程的优化。
2. 赛题要求
1)热补丁依赖元数据补充 参赛者需基于kpatch原有代码,在热补丁ko生成时将依赖信息注入其元数据中,使用户可以通过modinfo直接看到热补丁所需依赖,而非只能查看制作日志或激活后再通过livepatch -q进行查看。 2)热补丁缺失依赖识别 完成任务1后,参赛者需基于syscare原有代码进行优化,在热补丁加载前添加检查逻辑,通过热补丁ko的依赖信息提前判断当前依赖是否满足。若依赖不满足,则在终端界面提示缺失的所有依赖。 3)热补丁自加载 完成上两点后,参赛者需设计一套机制,监控热补丁依赖的内核模块的加载状态,当所有依赖满足时,自动加载满足条件的热补丁。这样既实现了热补丁的自动加载,又不会在加载时额外加载依赖,导致系统行为发生变化。 注意: a)参赛者无需修改现有热补丁状态机,依赖不满足的待加载热补丁可置为已激活。 b)不推荐使用额外进程或线程的形式轮询监测内核模块列表。 c)系统开销应尽可能低,在x86环境,22.03-LTS-SP3的openEuler操作系统上,cpu使用率小于1%
3. 赛题导师
zhuyuncheng@huawei.com; xiaobo.liu@huawei.com
4. 参考资料
1)kpatch制品仓及使用文档(https://gitee.com/src-openeuler/kpatch/tree/openEuler-22.03-LTS-SP3/) 2)syscare制品仓(https://gitee.com/src-openeuler/syscare/tree/openEuler-22.03-LTS-SP3/) 3)syscare使用文档 (https://gitee.com/openeuler/syscare)