カーネル・ストレージ-保護キー

カーネル・ストレージ保護キーは、カーネルおよびカーネル・エクステンションのためのストレージ保護メカニズムを提供します。

ストレージ保護キーには、以下のエレメントがあります。
  • 各仮想メモリー・ページには、短整数の保護キーが割り当てられます。これは、現行コンテキストでページを読み取り可能または書き込み可能にするために必要なアクセス権限を表します。
  • レジスター (権限マスク・レジスター) は、現行コンテキストのアクセス権限をエンコードするために使用されます。
ハードウェアは、最大 32 個の保護キーを提供できます。 権限マスク・レジスターには、定義された各保護キーの書き込みアクセス権限と読み取りアクセス権限を表すビットのペアが含まれています。これにより、カーネルは最大 32 クラスのメモリーへのアクセスを制御できます。各クラスは、同じ特定の保護キーを共用する仮想メモリー・ページで構成されます。

すべての場合において、実行中のスレッドは、その権限マスク・レジスターを変更することができ、したがって、特定のメモリー・クラスにアクセスする権限を変更することができます。 AIX® 環境では、ストレージ保護メカニズムにより、不注意によるストレージ・オーバーレイによるプログラミング・エラーをキャッチすることができます。 ストレージ保護キーを使用してプログラムを作成すると、プログラムは保護のためにメモリーを任意に分割することができます。これにより、メモリーへの偶発的な参照が検出されない可能性が低くなります。 このような検出されないエラーはデバッグが困難な場合がありますが、発生時に検出するようにコーディングすることにより、プログラムの信頼性、可用性、および保守性の特性を向上させることができます。

カーネルでストレージ保護キーを使用すると、以下のプログラミング・エラーが検出され、簡単に修復できます。
  • カーネルによるアプリケーション・メモリーへの誤った参照
  • キー・セーフ・カーネル・エクステンションによるカーネル専用メモリーへの誤った参照
  • カーネルによるカーネル・エクステンション専用メモリーへの誤った参照
  • あるカーネル・サブシステムによって別のカーネル・サブシステムによって制御されているメモリーへの誤った参照
カーネル・エクステンションは、ストレージ保護の観点から、以下のカテゴリーに分類することができます。
キー・アンセーフ・カーネル・エクステンション
キー・アンセーフ・カーネル・エクステンションは、ストレージ・キー保護に関係なく作成された従来のエクステンションです。 このような拡張機能は、キー・セーフ環境でロードされると、自動的にワイド・アクセス権限で実行され、バイナリー互換性を提供します。 基本的にすべてのカーネル・メモリーに制限なしでアクセスできるため、キー・アンセーフ・カーネル・エクステンションは、カーネルの保護ドメインに違反する可能性があっても、機能し続けることができます。

場合によっては、キー・アンセーフ・カーネル・エクステンションが原因でシステム・クラッシュが発生する可能性があるため、カーネル・エクステンションをキー・セーフにしてから実行することを強くお勧めします。 カーネル・エクステンション・キーを安全にするを参照してください。

キー・セーフ・カーネル・エクステンション
キー・セーフ・カーネル・エクステンションは、カーネルの内部データ構造もユーザー・スペース・アドレスも直接参照しません。 カーネル・エクステンション・キーを安全にするを参照してください。
鍵で保護されたカーネル・エクステンション
鍵で保護されたカーネル・エクステンションは、鍵で保護されたカーネル環境と共存できます。また、鍵で保護されたカーネル・エクステンションは、独自のプライベート・データを識別して保護することによって鍵で保護されます。 カーネル・エクステンション・データをキー保護メモリーに入れるには、 キー保護カーネル・エクステンションでのキー保護の設計を参照してください。