博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内核热补丁原理介绍、制作、使用、验证方法
阅读量:6544 次
发布时间:2019-06-24

本文共 974 字,大约阅读时间需要 3 分钟。

此文已由作者杨延亮授权网易云社区发布。

欢迎访问,了解更多网易技术产品运营经验。

简介

内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术。系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统宕机时间,增加系统的可用性。

使用场景

1、修复内核或模块的缺陷函数

内核热补丁能够动态的修复内核和模块的缺陷函数。在开发人员发现问题,或者操作系统发现安全漏洞需要修复时,可以通过将缺陷函数或者安全补丁制作成内核热补丁打入系统中的方法,在不需要重启系统或者插拔模块、不中断业务的前提下修复缺陷。

2、开发过程中增加调试或测试手段

内核热补丁也适用于在开发过程中进行调试和测试。比如在模块或者内核的开发过程中,如果需要通过在某一个函数中添加打印信息,或者为函数中某一个变量赋予特定的值,可以通过内核热补丁的形式实现,而不需要重新编译内核、安装、重启的操作。

原理分析

Kpatch基于ftrace实现内核函数的替换,类似于ftrace的动态探测点。利用mcount机制,在内核编译时在每个函数入口保留数个字节,然后在打补丁时将“被替换函数”入口保留的字节替换为跳转指令,跳转到Kpatch的相关流程中,最终进入“新函数”的执行流程,实现函数级别的执行流程在线替换。具体而言如下图:

举例说明

1、以如下patch为例:

2、将步骤1中的patch制作为对应ko文件,执行命令及结果显示如下:

说明:关于make-kpatch命令的执行参数说明可执行"make-kpatch --help"命令来查看

3、执行如下命令,打入内核热补丁:

4、查看对应dmesg信息如下:

5、执行查看内存信息命令,查看到结果以及dmesg信息如下所示:

结合步骤1中的代码对比发现,在/proc/meminfo所看到的内容中,多了LivePatchtest项,并且在执行"cat /proc/meminfo"命令时,dmesg信息中也打印了步骤1中patch代码打印片段。这就证明了我们制作的热补丁是有效的,成功打入了当前运行的内核中。

以上即为热补丁原理、制作、打入热补丁、验证热补丁是否生效的基本方法,有兴趣的同学可以在开发环境上尝试一下。

更多网易技术、产品、运营经验分享请。

相关文章:

【推荐】
【推荐】
【推荐】

转载地址:http://kzldo.baihongyu.com/

你可能感兴趣的文章
oracle 11g jdbc jar包在哪个文件目录
查看>>
新款macbook安装 和 驱动Boot Camp
查看>>
大于2GB的Listener.log和运行超过198天的主机上的Oracle实例
查看>>
异常:HRESULT: 0x80070057 (E_INVALIDARG)解决方案
查看>>
php常用函数
查看>>
参数化查询为什么能够防止SQL注入
查看>>
Google Protocol Buffers 概述
查看>>
GUID-1
查看>>
跨域共享Cookie ,单点登录,二级域名登录共享
查看>>
FusionCharts的使用方法
查看>>
从文件或摄像机读
查看>>
批量修改Project视图中Prefab的名字
查看>>
requestAnimationFrame,Web中写动画的另一种选择
查看>>
js实现按回车自行提交
查看>>
ASP.NET Web API标准的“管道式”设计
查看>>
php curl常见错误:SSL错误、bool(false)
查看>>
jenkins 忘记admin用户账号密码
查看>>
N++ 道ASP.NET面试题
查看>>
在 Java 中使用启发式搜索更快地解决问题
查看>>
转:windows下多线程通信方法
查看>>