(取消)打补丁回调 【ChatGPT】

简介: (取消)打补丁回调 【ChatGPT】

(取消)打补丁回调

Livepatch (取消)打补丁回调提供了一种机制,用于在内核对象被 (取消)打补丁时执行回调函数。它们可以被视为一种强大的功能,扩展了 livepatch 的能力,包括:

  • 对全局数据进行安全更新
  • 对 init 和 probe 函数进行“打补丁”
  • 对无法进行补丁的代码进行补丁(例如汇编)

在大多数情况下,(取消)打补丁回调通常需要与内存屏障和内核同步原语一起使用,比如互斥锁/自旋锁,甚至 stop_machine(),以避免并发问题。

1. 动机

回调与现有的内核设施不同:

  • 当禁用和重新启用补丁时,模块的初始化/退出代码不会运行。
  • 模块通知程序无法阻止待打补丁的模块加载。

回调是 klp_object 结构的一部分,它们的实现是特定于该 klp_object 的。其他 livepatch 对象可能会被打补丁,也可能不会,而与目标 klp_object 的当前状态无关。

2. 回调类型

可以为以下 livepatch 操作注册回调:

  • 预打补丁Pre-patch
  • 在 klp_object 被打补丁之前
  • 后打补丁Post-patch
  • 在 klp_object 被打补丁并在所有任务中激活后
  • 预取消打补丁Pre-unpatch
  • 在 klp_object 被取消打补丁之前(即,打补丁的代码是活动的),用于清理后打补丁回调资源
  • 后取消打补丁Post-unpatch
  • 在 klp_object 被取消打补丁后,所有代码已被恢复且没有任务在运行打补丁的代码,用于清理预打补丁回调资源

3. 工作原理

每个回调都是可选的,省略一个不会排除指定任何其他回调。但是,livepatching 核心以对称方式执行处理程序:预打补丁回调有一个后取消打补丁的对应部分,后打补丁回调有一个预取消打补丁的对应部分。只有在执行了相应的打补丁回调时,取消打补丁回调才会被执行。典型的用例是将一个获取和配置资源的打补丁处理程序与一个拆除和释放相同资源的取消打补丁处理程序配对使用。

只有在其主机 klp_object 被加载时才会执行回调。对于内核内的 vmlinux 目标,这意味着当启用/禁用 livepatch 时,回调将始终执行。对于补丁目标内核模块,只有在目标模块加载时,回调才会执行。当模块目标被(取消)加载时,只有在启用 livepatch 模块时,其回调才会执行。

如果预打补丁回调被指定,预期它会返回一个状态码(成功为 0,错误为 -ERRNO)。错误状态码表示给 livepatching 核心的当前 klp_object 的打补丁不安全,并且需要停止当前的打补丁请求。(当没有提供预打补丁回调时,过渡被认为是安全的。)如果预打补丁返回失败,内核的模块加载程序将:

  • 拒绝加载 livepatch,如果 livepatch 在目标代码之后加载。
  • 或者:
  • 拒绝加载模块,如果 livepatch 已成功加载。

如果由于失败的预打补丁回调或其他原因导致对象无法打补丁,将不会为给定的 klp_object 执行后打补丁、预取消打补丁或后取消打补丁回调。

如果补丁转换被撤销,将不会运行任何预取消打补丁处理程序(这遵循前面提到的对称性 -- 只有在执行了相应的后打补丁回调时,预取消打补丁回调才会发生)。

如果对象成功打补丁,但由于某种原因补丁转换从未开始(例如,如果另一个对象未能打补丁),则只会调用后取消打补丁回调。

4. 使用案例

演示回调 API 的示例 livepatch 模块可以在 samples/livepatch/ 目录中找到。这些示例已经被修改以在 kselftests 中使用,并可以在 lib/livepatch 目录中找到。

全局数据更新

预打补丁回调可以用于更新全局变量。例如,75ff39ccc1bd ("tcp: make challenge acks less predictable") 改变了一个全局 sysctl,并且对 tcp_send_challenge_ack() 函数进行了补丁。

在这种情况下,如果我们非常谨慎,可能有意义的是在补丁完成后使用后打补丁回调来打补丁数据,这样 tcp_send_challenge_ack() 就可以首先更改为使用 READ_ONCE 读取 sysctl_tcp_challenge_ack_limit。

__init 和 probe 函数补丁支持

虽然 __init 和 probe 函数不能直接进行 livepatch,但可能可以通过预/后打补丁回调来实现类似的更新。

提交 48900cb6af42 ("virtio-net: drop NETIF_F_FRAGLIST") 改变了 virtnet_probe() 初始化其驱动的 net_device 特性的方式。预/后打补丁回调可以遍历所有这样的设备,对它们的 hw_features 值进行类似的更改。(该值的客户端函数可能需要相应地更新。)

相关文章
|
5月前
|
开发者
内核维护者手册 - 修改补丁【ChatGPT】
内核维护者手册 - 修改补丁【ChatGPT】
|
5月前
|
Linux API C语言
Linux 内核补丁提交的清单 【ChatGPT】
Linux 内核补丁提交的清单 【ChatGPT】
|
5月前
|
安全
原子替换和累积补丁 【ChatGPT】
原子替换和累积补丁 【ChatGPT】
|
5月前
|
存储 安全 算法
RCU补丁审查清单 【ChatGPT】
RCU补丁审查清单 【ChatGPT】
|
5月前
|
存储 Linux 开发工具
提交补丁:将您的代码提交到内核的基本指南 【ChatGPT】
提交补丁:将您的代码提交到内核的基本指南 【ChatGPT】
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
哈佛推出全新类ChatGPT癌症诊断AI,登上Nature!准确率高达96%
哈佛大学研究团队开发的新型AI模型CHIEF,在《自然》期刊发表,癌症诊断准确率达96%。CHIEF基于深度学习,能自动识别、分类癌症并预测生存期,具高准确性、多任务能力和泛化性。它结合病理图像与基因组学等数据,显著提升诊断效率和个性化治疗水平,有望改善医疗资源不平等。但数据隐私和临床效果验证仍是挑战。论文见:https://www.nature.com/articles/s41586-024-07894-z
169 101
|
5天前
|
存储 人工智能 API
ChatGPT-on-WeChat:Star32.4k, DeepSeek加持!这款开源神器秒变AI助手,聊天体验直接起飞!
嗨,大家好,我是小华同学。今天为大家介绍一款结合DeepSeek引擎的开源项目——ChatGPT-on-WeChat,由开发者zhayujie打造。它将微信变成智能AI助手,支持文本、图片、语音对话,具备定时提醒、天气查询等扩展功能,完全开源且易于定制。项目地址:https://github.com/zhayujie/chatgpt-on-wechat。关注我们,获取更多优质开源项目和高效学习方法。
96 11
|
6天前
|
人工智能 自然语言处理 算法
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek VS ChatGPT:DeepSeek以开源黑马姿态崛起,凭借低成本、高性能的「DeepSeek-V3」和专为深度推理设计的「DeepSeek-R1」,成为中小开发者的首选。而ChatGPT则较贵。 然而,AI依赖也带来隐忧,长期使用可能导致记忆衰退和“脑雾”现象。为此,推荐Neuriva解决方案,专注力提升30%,记忆留存率提升2.1倍,助力人类在AI时代保持脑力巅峰。 DeepSeek赢在技术普惠,ChatGPT胜于生态构建,人类的关键在于平衡AI与脑力健康,实现“双核驱动”突破极限!
135 7
|
2月前
|
人工智能 搜索推荐 iOS开发
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
OpenAI推出适用于iPhone的ChatGPT,与Apple实现具有里程碑意义的AI整合
|
6月前
|
人工智能 自然语言处理 搜索推荐
chatgpt这么火,现在AI搜索引擎有哪些呢?
国外AI搜索引擎包括ChatGPT,擅长自然语言处理与内容生成;Google Bard,提供智能个性化搜索体验;Microsoft Bing集成GPT模型增强智能检索;Perplexity AI以简洁答案及文献引用著称;Neeva强调隐私保护与无广告服务。国内方面,天工AI支持多种功能如知识问答与代码编程;腾讯元宝基于混元模型助力内容创造与学习;360AI搜索以精准全面的信息搜索见长;秘塔AI专注提升写作质量和效率;开搜AI搜索提供个性化智能搜索服务。以上引擎均利用先进AI技术提升用户体验。更多详情参阅[AI搜索合集](zhangfeidezhu.com/?page_id=651)。
183 8
chatgpt这么火,现在AI搜索引擎有哪些呢?