KGraft
kGraftは、実行中のカーネルのライブパッチを実装するLinuxカーネルの機能です。これにより、カーネルの実行中にカーネルパッチを適用できます。kGraftは、必要なパッチを含む新しいカーネルでシステムを再起動する必要をなくすことで、システムの稼働時間と可用性を最大化することを目指しています。同時に、kGraftを使用すると、カーネル関連のセキュリティ更新を、スケジュールされたダウンタイムに延期することなく適用できます。 内部的に、kGraftはすべての機能を許可します実行中のカーネルでパッチを適用したバージョンに置き換える場合は、元のバージョンの関数を選択的に使用して安全に実行し、ライブパッチの実行中にプロセスごとの一貫性を確保します。 kGraft 開発者 SUSE 初回リリース
2014年3月27日 (2014-03-27)
安定リリース 5.12 /2021年4月25日 ; 13か月前 (2021年4月25日)
リポジトリ
github .com / torvalds / linux
オペレーティング·システム Linux タイプ
カーネル拡張
ライセンス
GNUGPLバージョン2および3
Webサイト
www .suse .com / products / live- patching
kGraftはSUSEによって開発されており、そのソースコードはGNU General Public License(GPL)のバージョン2および3の条件の下でライセンスされています。 2014年4月、kGraftはLinuxカーネルメインラインに含めるために提出され、ライブパッチの最小限の基盤が4月12日にリリースされたカーネルバージョン4.0のLinuxカーネルメインラインに統合されました。 2015年。
コンテンツ
1 内部
2 歴史
3 も参照してください
4 参考文献
5 外部リンク
内部
内部的には、kGraftは2つの部分で構成されています。コアカーネルモジュールはカーネルの内部動作を変更することでライブパッチメカニズムを実行し、ユーザースペースユーティリティはソース差分から個々のホットパッチカーネルモジュールを準備します。ライブカーネルパッチは関数レベルで実行されます。つまり、kGraftは、ftraceによって確立されたメカニズムとインフラストラクチャに依存して古いバージョンの関数を「ルーティング」しながら、実行中のカーネルの関数全体をパッチを適用したバージョンに置き換えることができます。カーネルの内部データ構造を変更することはできません。ただし、kGraftで使用される自然な候補の1つであるセキュリティパッチに、カーネルのデータ構造への変更が含まれることはめったにありません。
ホットパッチを適用している間、kGraftは、パッチが適用されたバージョンの関数を導入するために、実行中のカーネルを停止する必要はありません。kGraftは、関数をアトミックに置き換える代わりに、ユーザースペース プロセス、カーネルスレッド、および割り込みハンドラーに一貫した「ワールドビュー」(または「ユニバース」)を提供します。これらは実行中に監視されるため、パッチが適用されたカーネル関数の元のバージョンを引き続き使用できます。これを実現するために、kGraftは、パッチが適用された関数の元のバージョンをread-copy-update(RCU)方式で維持し、実行するプロセス、カーネルスレッド、または割り込みハンドラーに応じて、元のバージョンとパッチが適用されたバージョンを動的に選択します。より具体的には、元のバージョンの関数は、カーネルスペース内で現在実行されているプロセス、完了ポイントに到達するまでのカーネルスレッド、および現在実行中の割り込みハンドラーに引き続き使用されます。
その設計により、kGraftはホットパッチの適用中に追加の遅延を導入しません。欠点として、パッチが適用されたカーネル関数の元のバージョンは、カーネルスペース内に長期間留まるプロセスがある場合に備えて、長期間維持する必要がある場合がたとえば、プロセスはネットワークソケットでI/Oを待機する場合がまた、関数の元のバージョンとパッチが適用されたバージョンの両方を並行して実行できるため、カーネルの内部データ構造をさまざまな方法で使用すると、問題が発生する可能性が
リードコピーアップデート方式
でkGraftによって維持される「世界観」または「ユニバース」
: 14、15、17
追加のロジックがない場合、パッチを適用した関数をアトミックに置き換えないと、不整合が発生する可能性が
各プロセスは監視されるため、単一の
システムコール内でパッチが適用された関数を一貫して実行します。
すべてが新しい「ユニバース」に移行した後、
トランポリンスタイルのチェックは不要になります。
歴史
SUSEは2014年1月にkGraftを発表し 、カーネル部分についてはGNU General Public Licenseバージョン2( GPLv2)の条件で、ユーザースペース部分についてはバージョン3(GPLv3 )の条件の下で2014年3月に公開しました。 RedHatがkpatchと呼ばれる独自のライブカーネルパッチ実装をリリースした直後にリリースされました。 kGraftはLinuxカーネルのメインラインに統合されることを目指しており、2014年4月に含めるために提出されました。
kGraftは、 SUSE Linux Enterprise Live Patching と呼ばれる追加機能として、2014年11月18日にSUSE Linux EnterpriseServer12で利用できるようになりました。
ライブカーネルパッチの最小限の基盤は、2015年4月12日にリリースされたカーネルバージョン4.0でLinuxカーネルメインラインに統合されました。これらの基盤は、主にカーネルのftrace機能に基づいており、両方のkGraftによるホットパッチをサポートできる共通のコアを形成します。 kpatchは、ホットパッチを含むカーネルモジュール用のアプリケーションプログラミングインターフェイス(API)と、ユーザースペース管理ユーティリティ用のアプリケーションバイナリインターフェイス(ABI)を提供します。ただし、Linuxカーネル4.0に含まれる共通コアはx86アーキテクチャのみをサポートし、ホットパッチが適用されている間は機能レベルの一貫性を確保するためのメカニズムを提供しません。
2015年4月以降、Linuxカーネルメインラインによって提供される一般的なライブパッチコアへのkGraftの移植に関する作業が進行中です。ただし、適切なスタックフレームのないアセンブリコードが関係する状況では、Linuxカーネルによって提供される呼び出しスタックがあるため、必要な関数レベルの整合性メカニズムの実装が遅れています。その結果、2015年9月現在、移植作業は継続中です。カーネルの呼び出しスタックの信頼性を向上させるために、特殊な健全性チェックstacktoolユーザースペースユーティリティも開発されました。
も参照してください
Linuxポータル
動的なソフトウェア更新、実行中のプログラムのアップグレードに焦点を当てた研究分野
kexec、実行中のシステムからまったく新しいLinuxカーネルをロードするためのメソッド
KspliceとKernelCare、それぞれKsplice、Inc.(後にOracleが買収)とCloudLinuxによって開発された他のLinuxカーネルライブパッチングテクノロジー
参考文献
^ c “”SUSEがLinuxカーネルのライブパッチ用にkGraftをリリース””。SUSE。2014年3月27日。
^ 「リリース5.12」。2021年4月25日。
^ eVojtěchPavlík ( 2014 年3月28日)。「kGraft:Linuxカーネルのライブパッチ」(PDF)。linuxfoundation.org 。
^ Jonathan Corbet(2014年4月30日)。「最初のkGraft送信」。LWN.net 。
^ Chris Duckett(2014年2月4日)。「SuseのkGraftは、ライブカーネルパッチをLinuxに戻すように見えます」。ZDNet 。
^ 「Linuxカーネル4.0、セクション1.2。ライブパッチ」。kernelnewbies.org。2015年4月26日。
^ VojtěchPavlík(2014年1月31日)。「kGraft:ライブカーネルパッチ」。suse.com 。
^ リビークラーク(2014年3月4日)。「SUSELabsのディレクターがkGraftを使用したライブカーネルパッチについて説明します」。linux.com。2016年3月10日にオリジナルからアーカイブされました。
^ マイケル・ララベル(2014年5月1日)。「SUSEはkGraftを投稿し、RedHatはKpatchパッチを投稿します」。マイケル・ララベル。
^ 「SUSEはLinuxカーネルのライブパッチ用のkGraftを開発しました」。SUSE。2014年1月31日。
^ Josh Poimboeuf; セスジェニングス(2014年2月26日)。「kpatchの紹介:動的カーネルパッチ」。redhat.com 。
^ 「SUSELinuxEnterpriseLiveパッチが利用可能になりました」。SUSE。2014年11月18日。
^ ショーンマイケルカーナー(2014年11月18日)。「SUSEはライブパッチとCephストレージをエンタープライズLinuxにもたらします」。serverwatch.com 。
^ Jonathan Corbet(2015年2月25日)。「ライブパッチの大まかなパッチ」。LWN.net 。
^ “Linuxカーネルソースツリー:kernel / git / torvalds / linux.git:JiriKosinaからライブパッチインフラストラクチャをプルします”。kernel.org。2015年2月11日。
^ Jonathan Corbet(2015年9月30日)。「コンパイル時のスタック検証」。LWN.net 。
^ Josh Poimboeuf(2015年9月24日)。「Linuxカーネルのドキュメント:Documentation / stack-validation.txt(v13パッチから)」。LWN.net 。
外部リンク
公式ウェブサイト”