| 開発者 | レッドハット |
|---|---|
| 初回リリース | 2014年2月26日[1] |
| 安定版リリース | 0.9.9 [2]
/ 2023年7月28日 |
| リポジトリ |
|
| オペレーティング·システム | リナックス |
| タイプ | カーネル拡張 |
| ライセンス | GNU GPLバージョン 2 |
| Webサイト | github.com/dynup/kpatch |
kpatchはLinux カーネルの機能の 1 つで、実行中のカーネルのライブ パッチを実装します。これにより、カーネルの実行中にカーネルパッチを適用できます。必要なパッチを含む新しいカーネルでシステムを再起動する必要がなくなるため、kpatch はシステムの稼働時間と可用性を最大化することを目指しています。同時に、kpatch を使用すると、カーネル関連のセキュリティ更新をスケジュールされたダウンタイムまで延期せずに適用できます。[1] [3] 内部的には、kpatch により、実行中のカーネルの機能全体をパッチを適用したバージョンに置き換えることができます。ライブ パッチの実行中は、実行中のすべてのプロセスを停止することで、これを安全に実行できます。[4]
kpatchはRed Hatによって開発されており、そのソースコードはGNU General Public Licenseバージョン2(GPLv2)の条件に基づいてライセンスされています。 [1] 2014年5月、kpatchはLinuxカーネルメインライン に組み込むために提出され、[5]ライブパッチの最小限の基盤は、2015年4月12日にリリースされたカーネルバージョン4.0でLinuxカーネルメインラインに統合されました。[6]
内部

内部的には、kpatch は 2 つの部分から構成されています。コアカーネル モジュールはカーネルの内部動作を変更することでライブ パッチ メカニズムを実行し、一連のユーザー空間ユーティリティはソースの差分から個々のホット パッチカーネル モジュールを準備し、その適用を管理します。ライブ カーネル パッチは関数レベルで実行されます。つまり、kpatch は、 ftraceが提供する機能を使用して古いバージョンの関数を「迂回」することで、実行中のカーネル内の関数全体をパッチを適用したバージョンに置き換えることができます。この方法では、ホット パッチも簡単に元に戻すことができます。カーネルの内部データ構造は変更できませんが、 kpatch で使用される自然な候補の 1 つであるセキュリティ パッチには、カーネルのデータ構造の変更がほとんど含まれていません。[4] [5] [7]
kpatch は、ホットパッチの適用中に実行中のすべてのプロセスを停止し、停止したプロセスがパッチ適用対象の関数内で実行されていないことを確認することで、ホットパッチがアトミックかつ安全に適用されます。このようなアプローチにより、ライブパッチのメカニズム全体が簡素化され、関数の元のバージョンとパッチ適用バージョンでデータ構造が使用される方法に関連する特定の問題が回避されます。欠点としては、このアプローチではホットパッチが失敗する可能性があり、実行中のすべてのプロセスを停止するために必要なわずかな遅延が発生します。[4] [5] [7]
歴史
Red Hatは2014年2月にGNU General Public Licenseバージョン2( GPLv2)の条件でkpatchを発表し、公開しました。 [1] SUSEがkGraftと呼ばれる独自のライブカーネルパッチ実装をリリースする直前でした。[8] kpatchはLinuxカーネルメインラインに統合され、2014年5月に組み込みのために提出されました。[5] [9]
kpatchは、2014年6月10日にリリースされたRed Hat Enterprise Linux 7.0にテクノロジープレビュー として組み込まれました。[10] [11]
ライブカーネルパッチの最小限の基盤は、2015年4月12日にリリースされたカーネルバージョン4.0でLinuxカーネルメインラインに統合されました。これらの基盤は、主にカーネルのftrace機能に基づいており、ホットパッチを含むカーネルモジュール用のアプリケーションプログラミングインターフェイス(API)とユーザースペース管理ユーティリティ用のアプリケーションバイナリインターフェイス(ABI)を提供することで、kpatchとkGraftの両方によるホットパッチをサポートできる共通コアを形成しています。ただし、Linuxカーネル4.0に含まれる共通コアはx86アーキテクチャのみをサポートしており、ホットパッチの適用中に機能レベルの一貫性を保証するメカニズムは提供されていません。[6] [12] [13]
2015 年 4 月以降、Linux カーネル メインラインが提供する共通ライブ パッチ コアに kpatch を移植する作業が進行中です。[13] ただし、 Linux カーネルが提供するコール スタックは、適切なスタック フレームのないアセンブリ コードを含む状況では信頼できない可能性があるため、必要な関数レベルの一貫性メカニズムの実装が遅れています。その結果、移植作業は 2015 年 9 月現在も進行中です。カーネルのコール スタックの信頼性を向上させるために、専用の健全性チェックスタックツールユーザー空間ユーティリティも開発されています。[14] [15][アップデート]
参照
- 動的ソフトウェア更新、実行中のプログラムのアップグレードに焦点を当てた研究分野
- kexec は、実行中のシステムから新しい Linux カーネル全体をロードする方法です。
- KspliceとKernelCare は、それぞれ Ksplice, Inc. (後に Oracle に買収) と CloudLinux によって開発された Linux カーネルライブパッチ技術です。
参考文献
- ^ abcd Josh Poimboeuf、Seth Jennings (2014 年 2 月 26 日)。「kpatch の紹介: 動的カーネル パッチ」。redhat.com。2014年7月 23 日閲覧。
- ^ “リリース 0.9.9”. 2023年7月28日. 2023年9月18日閲覧。
- ^ Sean Michael Kerner (2014 年 6 月 6 日)。「Linux カーネルのパッチ適用が動的に」。ServerWatch。2014年7 月 23 日閲覧。
- ^ abc Jonathan Corbet (2014年5月7日). 「最初のkpatch提出」. LWN.net . 2014年7月23日閲覧。
- ^ abcd Josh Poimboeuf (2014 年 5 月 1 日). 「kpatch: 動的カーネルパッチ」. LWN.net . 2014 年7 月 23 日閲覧。
- ^ ab 「Linuxカーネル4.0、セクション1.2。ライブパッチ」。kernelnewbies.org 。 2015年4月26日。 2015年4月27日閲覧。
- ^ abc Seth Jennings、Josh Poimboeuf (2014 年 6 月 10 日)。「動的カーネル パッチ」。Red Hat。2014年7 月 23 日閲覧。
- ^ 「SUSE、Linuxカーネルのライブパッチ適用用kGraftをリリース」SUSE 2014年3月27日2015年2月11日閲覧。
- ^ Michael Larabel (2014 年 5 月 1 日)。「SUSE が kGraft を投稿、Red Hat が Kpatch パッチを投稿」。Phoronix。2014年7月 23 日閲覧。
- ^ 「Red Hat Enterprise Linux 7.0 リリースノート、第 5 章 カーネル」。Red Hat。2014年 7 月 15 日。2014 年7 月 23 日閲覧。
- ^ Carlos Sanchez (2014 年 6 月 26 日)。「Red Hat が Linux コンテナーのサポートを強化した Red Hat Enterprise Linux 7 をリリース」。infoq.com。2014年7月 23 日閲覧。
- ^ Jonathan Corbet (2015 年 2 月 25 日)。「ライブ パッチの粗雑なパッチ」LWN.net。2015年4 月 27 日閲覧。
- ^ ab 「Linuxカーネルソースツリー: kernel/git/torvalds/linux.git: Jiri Kosinaからライブパッチインフラストラクチャを取得」。kernel.org 。 2015年2月11日。 2015年4月27日閲覧。
- ^ Jonathan Corbet (2015 年 9 月 30 日). 「コンパイル時のスタック検証」. LWN.net . 2015 年10 月 2 日閲覧。
- ^ Josh Poimboeuf (2015 年 9 月 24 日). 「Linux カーネル ドキュメント: Documentation/stack-validation.txt (v13 パッチより)」. LWN.net . 2015 年10 月 2 日閲覧。
外部リンク
- GitHub上の kpatch ソースコード
