首页 > 其他分享 >Livepatch 系统状态变更【ChatGPT】

Livepatch 系统状态变更【ChatGPT】

时间:2023-12-12 10:34:40浏览次数:28  
标签:状态 修改 系统 补丁 实时 Livepatch state ChatGPT 变更

Livepatch 系统状态变更

一些用户非常不愿意重新启动系统。这就需要提供更多的实时补丁,并在它们之间保持一定的兼容性。

通过累积实时补丁,维护更多的实时补丁要容易得多。每个新的实时补丁完全替换任何旧的实时补丁。它可以保留、添加甚至删除修复。并且通常可以安全地使用原子替换功能将任何版本的实时补丁替换为任何其他版本。

问题可能出现在影子变量和回调函数上。它们可能改变系统的行为或状态,以至于不再安全地返回并使用旧的实时补丁或原始内核代码。此外,任何新的实时补丁必须能够检测已安装的实时补丁所做的任何更改。

这就是实时补丁系统状态跟踪的用处所在。它允许:

  • 存储操作和恢复系统状态所需的数据
  • 使用更改 ID 和版本定义实时补丁之间的兼容性

1. 实时补丁系统状态 API

系统的状态可能会被多个实时补丁回调或新使用的代码修改。还必须能够找到已安装实时补丁所做的更改。

每个修改后的状态由 struct klp_state 描述,参见 include/linux/livepatch.h

每个实时补丁定义了 struct klp_states 数组。它们提到了实时补丁修改的所有状态。

实时补丁作者必须为每个 struct klp_state 定义以下两个字段:

  • id:用于标识受影响的系统状态的非零数字。
  • version:描述给定实时补丁支持的系统状态变化的变体的数字。

可以使用两个函数来操作状态:

  • klp_get_state():获取与给定实时补丁和状态 ID 相关联的 struct klp_state
  • klp_get_prev_state():获取与给定特性 ID 和已安装实时补丁相关联的 struct klp_state

2. 实时补丁兼容性

系统状态版本用于防止加载不兼容的实时补丁。检查是在启用实时补丁时进行的。规则如下:

  • 任何全新的系统状态修改都是允许的。
  • 已修改系统状态的相同或更高版本的系统状态修改对于已修改的系统状态是允许的。
  • 累积实时补丁必须处理已安装实时补丁所做的所有系统状态修改。
  • 非累积实时补丁允许触及已修改的系统状态。

3. 支持的场景

实时补丁和系统状态变更都有它们的生命周期。每个兼容的实时补丁必须支持以下场景:

  • 当启用实时补丁时修改系统状态,且该状态尚未被正在替换的实时补丁修改。
  • 接管或更新已被正在替换的实时补丁修改的系统状态。
  • 当禁用实时补丁时恢复原始状态。
  • 当转换被还原时,恢复先前的状态。它可能是原始系统状态,也可能是正在被替换的实时补丁所做的状态修改。
  • 当发生错误且无法启用实时补丁时,移除任何已经进行的更改。

4. 预期的使用

系统状态通常由实时补丁回调修改。每个回调的预期角色如下:

  • pre_patch():在必要时分配 state->data。分配可能会失败,而 pre_patch() 是唯一可以阻止加载实时补丁的回调。当数据已经由先前安装的实时补丁提供时,就不需要分配。

    • 在转换完成之前,执行任何新代码所需的其他准备工作。例如,初始化 state->data
    • 系统状态本身通常在 post_patch() 中进行修改,当整个系统能够处理它时。
    • 在发生错误时清理自己的混乱。可以通过自定义代码或显式调用 post_unpatch() 来完成。
  • post_patch():在兼容时,从先前的实时补丁复制 state->data

    • 进行实际的系统状态修改。最终允许新代码使用它。
    • 确保 state->data 具有所有必要的信息。
    • 当不再需要时,释放来自替换实时补丁的 state->data
  • pre_unpatch():防止由实时补丁添加的代码依赖于系统状态更改。

    • 还原系统状态修改。
  • post_unpatch():通过检查 klp_get_prev_state() 区分转换反向和禁用实时补丁。

    • 在转换反向时,恢复先前的系统状态。这可能意味着什么都不做。
    • 移除任何不再需要的设置或数据。

注意:

  • pre_unpatch() 通常对 post_patch() 执行对称操作。只有在禁用实时补丁时才会调用它。因此,它不需要关心任何先前安装的实时补丁。
  • post_unpatch() 通常对 pre_patch() 执行对称操作。它也可能在转换反向时被调用。因此,它必须处理先前安装的实时补丁的状态。

标签:状态,修改,系统,补丁,实时,Livepatch,state,ChatGPT,变更
From: https://www.cnblogs.com/pengdonglin137/p/17896224.html

相关文章

  • 可靠的堆栈跟踪 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/livepatch/reliable-stacktrace.html可靠的堆栈跟踪本文档概述了关于可靠的堆栈跟踪的基本信息。1.介绍内核热补丁一致性模型依赖于准确识别可能具有活动状态的函数,因此可能不安全进行补丁。识别哪些函数是活动的一种方法是使用堆栈......
  • 热补丁(Livepatch) 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/livepatch/livepatch.htmlLivepatch这份文件概述了有关内核热补丁的基本信息。1.动机有许多情况下,用户不愿意重新启动系统。这可能是因为他们的系统正在进行复杂的科学计算,或者在高峰期使用时负载很重。除了保持系统运行,用户还希望拥......
  • (取消)打补丁回调 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/livepatch/callbacks.html(取消)打补丁回调Livepatch(取消)打补丁回调提供了一种机制,用于在内核对象被(取消)打补丁时执行回调函数。它们可以被视为一种强大的功能,扩展了livepatch的能力,包括:对全局数据进行安全更新对init和pr......
  • 原子替换和累积补丁 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/livepatch/cumulative-patches.html原子替换和累积补丁在livepatch之间可能存在依赖关系。如果多个补丁需要对相同的函数进行不同的更改,那么我们需要定义补丁安装的顺序。并且来自任何更新的livepatch的函数实现必须建立在旧的live......
  • 设备电源管理基础 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/devices.html设备电源管理基础版权©[email protected],NovellInc.©[email protected]©2016IntelCorporation作者:RafaelJ.Wysockirafael.j.wysocki@inte......
  • 电源管理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/index.htmlAPMorACPI?DebugginghibernationandsuspendChargerManagerTestingsuspendandresumesupportindevicedriversEnergyModelofdevicesFreezingoftasksOperatingPerformancePoints(OPP)Library......
  • CPU空闲时间管理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/cpuidle.htmlCPU空闲时间管理版权©2019IntelCorporation作者[email protected]空闲时间管理子系统系统中的每个逻辑CPU(看起来获取和执行指令的实体:如果存在的话,硬件线程或处理器......
  • 调度器统计 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-stats.html调度器统计版本15的schedstats删除了一些sched_yield的计数器:yld_exp_empty、yld_act_empty和yld_both_empty。除此之外,它与版本14完全相同。版本14的schedstats包括对sched_domains的支持,......
  • 调度器调试文件说明 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-debug.html调度器调试文件说明numa_balancing目录numa_balancing目录用于保存控制NUMA平衡功能的文件。如果来自该功能的系统开销过高,则可以通过scan_period_min_ms、scan_delay_ms、scan_period_max_ms和scan_......
  • Scheduler pelt c program 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/text_files.html/**Thefollowingprogramisusedtogeneratetheconstantsfor*computingschedaverages.**==============================================================* Cprogram(compilewith......