55 KVM工具使用指南-LibcarePlus概述

55.1 概述

LibcarePlus 是一个用户态进程热补丁框架,可以在不重启进程的情况下对 Linux 系统上运行的目标进程进行热补丁操作。热补丁可以应用于 CVE 漏洞修复,也可以应用于不中断应用服务的紧急 bug 修复。

55.2 软硬件要求

在 openEuler 上使用 LibcarePlus,需要满足一定的软硬件要求:

  • 当前LibcarePlus支持 x86 体系架构和arm64体系架构。
  • LibcarePlus 可以在任何支持安装 libunwindelfutils 以及 binutils 的 Linux 发行版系统上运行。
  • LibcarePlus 使用ptrace()系统调用,需要对应Linux发行版本的相关编译选项支持。
  • LibcarePlus 制作热补丁时,依赖原可执行文件的符号表,因此,请勿过早将符号表strip掉。
  • 对于开启selinux的Linux系统,需要自行适配对应的selinux规则。

55.3 注意事项和约束

使用 LibcarePlus,需遵循以下热补丁规范和约束:

  • 仅支持对 C 语言编写的代码,不支持汇编语言等。
  • 代码文件名必须符合 C 语言标识符命名规范:由字母(A-Z,a-z)、数字 (0-9)、下划线“_”组成;并且首字符不能是数字,但可以是字母或者下划线;不能包含“-”、“$”等特殊符号。
  • 支持增量补丁,即支持对进程打多个补丁,但补丁加卸载管理需使用者执行设计,一般遵循FILO规则。
  • 不支持补丁自动加载,对于特定进程,需使用者自行设计。
  • 支持补丁查询功能。
  • 静态函数补丁受限于系统中能找到该函数的符号表。
  • 热补丁为进程粒度,即动态库热补丁只能对调用这个动态库的进程打补丁。
  • 单个进程支持的补丁数受限于跳转指令的跳转范围和虚拟内存地址空洞大小,一般支持[1, 512];
  • 对于TLS变量,仅支持修改IE模式的TLS变量;
  • 后续补丁不能使用之前补丁中定义的符号;
  • 以下场景不支持热补丁:
    • 死循环函数、不退出函数、inline 函数、初始化函数、NMI 中断处理函数
    • 替换全局变量
    • 小于5字节的短函数
    • 修改头文件
    • 增加和删除目标函数的出参和入参
    • 数据结构成员变化(新增、删除、修改)
    • 修改包含 LINEFILE 等gcc编译宏的 C 文件
    • 修改 intel 矢量汇编指令

55 KVM工具使用指南-LibcarePlus概述-LMLPHP

06-23 19:05