(57)【要約】  有界ポインタを記憶するために、装置及び方法が提供される。装置の１つの実例は、有界ポインタを記憶するための記憶素子を備える記憶装置であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶装置と、選ばれた記憶素子に有界ポインタを記憶するための処理回路機器とを備える。記憶処理は、選ばれた記憶素子に有界ポインタのポインタ値を記憶すること、及び、有界ポインタの読込み範囲と、読込み範囲とは異なる有界ポインタの書出し範囲の両方を有界ポインタの範囲情報が示すように、記憶素子に有界ポインタの範囲情報を記憶することを含む。読込み範囲は、有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、書出し範囲は、有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む。
2021517687.tif 000002
【特許請求の範囲】
【請求項１】
有界ポインタを記憶するための記憶素子を備える記憶装置であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶装置と、
選ばれた記憶素子に有界ポインタを記憶するための処理回路機器であって、前記記憶することが、
前記選ばれた記憶素子に前記有界ポインタのポインタ値を記憶すること、
前記有界ポインタの読込み範囲と、前記読込み範囲とは異なる前記有界ポインタの書出し範囲の両方を前記有界ポインタの範囲情報が示すように、前記選ばれた記憶素子に前記有界ポインタの前記範囲情報を記憶することであって、
前記読込み範囲が、前記有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、
前記書出し範囲が、前記有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、
前記有界ポインタの前記範囲情報を記憶すること
を含む、処理回路機器と
を備える、装置。
【請求項２】
前記書出し範囲が、前記読込み範囲の正規のサブセットである、又は
前記読込み範囲が、前記書出し範囲の正規のサブセットである、
請求項１に記載の装置。
【請求項３】
前記範囲情報が、
１次範囲を定義する１次情報であって、前記１次範囲が、前記読込み範囲及び前記書出し範囲のうちの１つであり、ベース・アドレスから限界アドレスまで広がる、１次情報と
前記１次範囲及び前記２次情報に基づいて２次範囲が決定されることが可能であるような２次情報であって、前記２次範囲が、前記読込み範囲及び前記書出し範囲以外のものである、２次情報と
を含む、請求項１又は２に記載の装置。
【請求項４】
前記１次情報が、前記１次範囲の前記ベース・アドレス、並びに、
前記１次範囲の前記限界アドレス、及び、
前記１次範囲のサイズ
のうちの１つを含む、請求項３に記載の装置。
【請求項５】
前記１次範囲の前記限界アドレスが、前記２次範囲の２次範囲限界アドレスである、又は
前記１次範囲の前記ベース・アドレスが、前記２次範囲の２次範囲ベース・アドレスである、
請求項３又は４に記載の装置。
【請求項６】
前記２次情報が、２次範囲ベース・アドレス及び２次範囲限界アドレスのうちの少なくとも１つが前記１次範囲の前記ベース・アドレス及び前記限界アドレスからどのように決定されるかを識別する、請求項３から５までのいずれかに記載の装置。
【請求項７】
前記２次情報が、セットされると、前記１次範囲の所定の部分を前記２次範囲が除外することを示すフラグである、請求項６に記載の装置。
【請求項８】
前記有界ポインタから導出されたアドレスへの最初の書出しより前に、前記フラグがセットされず、
前記処理回路機器が、前記最初の書出しの後、前記フラグをセットするように構成される、
請求項７に記載の装置。
【請求項９】
前記２次情報が、前記２次範囲の前記限界アドレスが前記１次範囲の前記限界アドレスによって制限されないことを示すフラグを含む、請求項６に記載の装置。
【請求項１０】
前記有界ポインタの前記ポインタ値が、オブジェクトのアドレス空間内のメモリ・アドレスを識別し、前記アドレス空間内の位置が、前記オブジェクトが利用できるメソッドを識別するデータ構造を識別するポインタを記憶し、
前記読込み範囲が、前記データ構造への前記ポインタを含み、
前記書出し範囲が、前記データ構造への前記ポインタを除外する、
請求項１から９までのいずれかに記載の装置。
【請求項１１】
前記データ構造が、前記オブジェクトが属するオブジェクト・クラスの仮想メソッド・テーブルである、請求項１０に記載の装置。
【請求項１２】
前記有界ポインタの前記ポインタ値が、オブジェクトのアドレス空間内のメモリ・アドレスを識別し、
前記アドレス空間の一部が、前記オブジェクトのメタデータを含み、
前記読込み範囲が、前記メタデータを含む前記一部を含み、
前記書出し範囲が、前記メタデータを含む前記一部を除外する、
請求項１から９までのいずれかに記載の装置。
【請求項１３】
前記有界ポインタの前記属性が、前記有界ポインタを認証するための署名を含み、
前記メタデータが、前記署名を生成するときに使用されるソルト値を含む、
請求項１２に記載の装置。
【請求項１４】
前記アドレス空間を前記オブジェクトにアロケートするアロケータであって、前記アドレス空間への書出しアクセスを保つ、アロケータ
をさらに備え、
前記オブジェクトに前記アロケートされたアドレス空間を解放することを前記アロケータが決定すると、前記アロケータが、前記ソルト値を上書きするように構成される、
請求項１３に記載の装置。
【請求項１５】
前記有界ポインタの前記範囲情報が、
前記読込み範囲を定義する読込み範囲データと、
前記メタデータを収める前記アドレス空間の前記一部を前記書出し範囲が除外することを示す除外データと
を含む、請求項１２から１４までのいずれかに記載の装置。
【請求項１６】
前記メタデータを収める前記アドレス空間の前記一部が、所定のサイズを有する、請求項１２から１５までのいずれかに記載の装置。
【請求項１７】
前記有界ポインタの前記ポインタ値が、アプリケーションのスタック・フレーム内のメモリ・アドレスを識別し、前記スタック・フレームが、スタック内にあり、
前記読込み範囲が、前記スタック・フレーム、及び、前記スタックのさらなる部分を含み、
前記書出し範囲が、前記スタックの前記スタック・フレームに制限され、前記スタックの前記さらなる部分を除外する、
請求項１から９までのいずれかに記載の装置。
【請求項１８】
前記範囲情報が、前記スタック・フレームのベース・アドレス、及び、前記スタック・フレームの限界アドレスを示し、
前記範囲情報が、前記スタック・フレームの前記限界アドレスが前記読込み範囲の限界アドレスでないことを示すフラグを含む、
請求項１７に記載の装置。
【請求項１９】
記憶装置の記憶素子に有界ポインタを記憶する方法であって、
前記有界ポインタのポインタ値を記憶するステップと、
前記有界ポインタの読込み範囲と、前記読込み範囲とは異なる前記有界ポインタの書出し範囲の両方を前記有界ポインタの範囲情報が示すように、前記有界ポインタの前記範囲情報を記憶するステップであって、
前記読込み範囲が、前記有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、
前記書出し範囲が、前記有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、
前記有界ポインタの前記範囲情報を記憶するステップと
を含む、方法。
【請求項２０】
有界ポインタを記憶するための記憶素子手段を備える記憶手段であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶手段と、
選ばれた記憶素子手段に有界ポインタを記憶するための処理手段であって、前記記憶することが、
前記選ばれた記憶素子手段に前記有界ポインタのポインタ値を記憶すること、
前記有界ポインタの読込み範囲と、前記読込み範囲とは異なる前記有界ポインタの書出し範囲の両方を前記有界ポインタの前記範囲情報が示すように、前記選ばれた記憶素子手段に前記有界ポインタの前記範囲情報を記憶することであって、
前記読込み範囲が、前記有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、
前記書出し範囲が、前記有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、
前記有界ポインタの前記範囲情報を記憶すること
を含む、処理手段と
を備える、装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法は、データ処理の分野に関する。
【背景技術】
【０００２】
いくつかのデータ処理装置は、特定のアドレスを示すポインタが、ポインタが逆参照され得るアドレスの許容範囲を示す範囲情報と関連付けられた有界ポインタ（ｂｏｕｎｄｅｄ  ｐｏｉｎｔｅｒ）をサポートすることがある。例えば、このようなポインタは、「ファット・ポインタ（ｆａｔ  ｐｏｉｎｔｅｒ）」と呼ばれることがある。
【０００３】
範囲情報に加えて、このような有界ポインタは、ポインタの使用について１つ又は複数の制限／許可を定義する他の関連付けられた属性を有することもある。許可を伴うこのような有界ポインタは、「能力（ｃａｐａｂｉｌｉｔｉｅｓ）」と呼ばれることが多く、したがって、このような有界ポインタの使用は、バウンダ・ポインタによって指定されたポインタ値がどのように使用されるかについて制約を課すことによって、強固なセキュリティをもたらすことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このような有界ポインタの汎用性を改善することが望ましいであろう。
【課題を解決するための手段】
【０００５】
構成の１つの実例において、有界ポインタを記憶するための記憶素子を備える記憶装置であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶装置と、選ばれた記憶素子に有界ポインタを記憶するための処理回路機器であって、前記記憶することが、選ばれた記憶素子に有界ポインタのポインタ値を記憶すること、有界ポインタの読込み範囲と、読込み範囲とは異なる有界ポインタの書出し範囲の両方を有界ポインタの範囲情報が示すように、選ばれた記憶素子に有界ポインタの範囲情報を記憶することであって、読込み範囲が、有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、書出し範囲が、有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、有界ポインタの範囲情報を記憶することを含む、処理回路機器とを備える、装置が提供される。
【０００６】
構成の別の実例において、記憶装置の記憶素子に有界ポインタを記憶する方法であって、有界ポインタのポインタ値を記憶することと、有界ポインタの読込み範囲と、読込み範囲とは異なる有界ポインタの書出し範囲の両方を有界ポインタの範囲情報が示すように、有界ポインタの範囲情報を記憶することであって、読込み範囲が、有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、書出し範囲が、有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、有界ポインタの範囲情報を記憶することとを含む、方法が提供される。
【０００７】
構成のさらなる実例において、有界ポインタを記憶するための記憶素子手段を備える記憶手段であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶手段と、選ばれた記憶素子手段に有界ポインタを記憶するための処理手段であって、前記記憶することが、選ばれた記憶素子手段に有界ポインタのポインタ値を記憶すること、有界ポインタの読込み範囲と、読込み範囲とは異なる有界ポインタの書出し範囲の両方を有界ポインタの範囲情報が示すように、選ばれた記憶素子手段に有界ポインタの範囲情報を記憶することであって、読込み範囲が、有界ポインタを使用するときに読込みが許可される少なくとも１つのメモリ・アドレスを含み、書出し範囲が、有界ポインタを使用するときに書込みが許可される少なくとも１つのメモリ・アドレスを含む、有界ポインタの範囲情報を記憶することを含む、処理手段とを備える、装置が提供される。
【０００８】
本技法は、添付の図面に示されるように、本技法の実例を参照しながら、単なる例証として、さらに説明される。
【図面の簡単な説明】
【０００９】
【図１】構成の１つの実例による、装置のブロック図である。
【図２】有界ポインタ記憶要素のセット内のポインタ値をセット又はアクセスしようと試みる場合に、エラーがトリガされることがある命令のタイプの実例を示す図であり、ここでこのポインタ値は、関連付けられた範囲情報によって示される範囲の外側のアドレスを指定するために使用される。
【図３】構成の１つの実例による、有界ポインタに関連したタグ・ビット（ｔａｇ  ｂｉｔ）の使用を示す図である。
【図４】有界ポインタ又は能力にポインタ署名を追加するために使用されることがある署名作業、及び、ポインタ認証コードを伴う前記有界ポインタ又は能力のポインタ・フィールドが、偶然に又は悪意をもって変更されていないことを保証するために後で使用され得る対応する権限付与作業を概略的に示す図である。
【図５Ａ】実例による有界ポインタを概略的に示す図である。
【図５Ｂ】実例による有界ポインタを概略的に示す図である。
【図６】本開示の実例による方法を概説する流れ図である。
【図７】本開示の特定の実例を示す図である。
【図８】本開示の特定の実例を示す図である。
【図９】本開示の特定の実例を示す図である。
【００１０】
いくつかの処理装置は、有界ポインタの使用をサポートすることができる。ポインタ自体は、例えば、アクセスされることになるデータ値のアドレス、又は実行されることになる命令のアドレスを指すことができ、又これらを判断するために使用されてもよい。しかしポインタは、ポインタを使用するときのアドレスの許容範囲を示す、関連付けられた範囲情報を有することもできる。このことは、例えば、セキュリティ、又は挙動の機能的妥当性を維持するために、ポインタから判断されたアドレスが、一定の境界内にとどまることを保証するために有用であることがある。例えば、一定の能力が所与の処理に対して定義され、定義された能力の外側で作業を実行しようと試みる場合にエラーをトリガすることができる、能力に基づくアーキテクチャへの関心が高まっている。有界ポインタのための範囲情報は、このようなアーキテクチャのために定義される能力情報の一部であってよく、能力に基づくアーキテクチャの内部で、このような有界ポインタは（その関連付けられた能力情報を含めて）、能力（ｃａｐａｂｉｌｉｔｙ）と呼ばれることがある。
【００１１】
したがって、装置は、ポインタを使用するときのアドレスの許容範囲を示す性質をもつ関連付けられた範囲情報を有するポインタを記憶するために使用される記憶要素を有することができる。各有界ポインタ記憶要素は、レジスタ、又は汎用メモリ内の記憶場所、例えばスタック・メモリ上の場所であってよい。
【００１２】
命令の動作中に要求されるメモリ内のアドレスを導き出すために使用されるポインタを取得するために、一定の命令が、このような有界ポインタ記憶要素を参照するために使用されることがある。ポインタは、メモリ・アドレスを識別するために直接、使用されてよく、又例えばオフセットをポインタ値に加えることによって、メモリ・アドレスを導き出すために使用されてもよい。
【００１３】
本開示の実例は、有界ポインタの特定の使用法に応じて異なる範囲情報を適用することによって、有界ポインタの汎用性を改善することを目的とする。具体的には、所与のポインタと関連付けられた読込み範囲は、所与のポインタと関連付けられた書出し範囲と異なってもよい。これは、例えば、ポインタが指すことができるメモリ・アドレスの第１の範囲が、データが書き出されることが不可能な読込み専用範囲であることを可能にする。読込み及び書出しは、ポインタが指すことができるメモリ・アドレスの第２の範囲に許可されてもよい。メモリ・アドレスの第３の範囲は、読込みが許可されない書出し専用範囲であってもよい。本明細書で議論されるいくつかの実例において、このような範囲のサブセットは、例えば、読込み専用範囲が適用され、読書き範囲が適用されるが、書出し専用範囲が適用されないように適用される。同様に、他の実例において、読書き範囲及び書出し専用範囲が適用されるが、読込み専用範囲は適用されない。
【００１４】
上述のように、装置のいくつかの実例は、有界ポインタを記憶するための記憶素子を備える記憶装置であって、各有界ポインタが、ポインタ値、及び、少なくとも範囲情報を含む関連付けられた属性を有する、記憶装置と、選ばれた記憶素子に有界ポインタを記憶するための処理回路機器とを備える。記憶するステップは、記憶素子に有界ポインタのポインタ値を記憶すること、及び、有界ポインタの読込み範囲と、読込み範囲とは異なる有界ポインタの書出し範囲の両方を有界ポインタの範囲情報が示すように、記憶素子に有界ポインタの範囲情報を記憶することを含むことができる。読込み範囲は、有界ポインタを使用するときに読込みが許可されるメモリ・アドレスの範囲であり、書出し範囲は、有界ポインタを使用するときに書込みが許可されるメモリ・アドレスの範囲である。
【００１５】
したがって、範囲情報は、所与のポインタに対する、読込み範囲とは異なる書出し範囲を表すことができる。これは、単一の範囲だけが有界ポインタに適用される比較上のシステムに比べて、ポインタの汎用性を増加させ、さらなる粒度がこの範囲内に適用されることはない。このような汎用性の実例は、下記でより詳細に示される。例えば、本技法は、有界ポインタが有効に指すことができるメモリ・アドレスの所与の範囲が、有界ポインタの書出し範囲ではなく、読込み範囲にこれらのアドレスを含めることによって読込み専用として効果的に指名されることを可能にする。したがって、書出し範囲は、読込み範囲の正規のサブセット、即ち、読込み範囲に等しくない読込み範囲のサブセットであってもよい。これは、例えば、後でこのデータを変更することが望ましくない初期セットアップ動作中に、いくつかのデータが一旦定義される実例において特に役立つものである。このようなデータを読込み専用として指名することは、偶然に又は悪意をもってデータが変更されるのを防ぐ。したがって、本実例は、データを読込み専用として指名することができない比較上のシステムに比べて、堅牢性及び安全性が改善される。
【００１６】
代替として又は追加として、ポインタが有効に指すことができるメモリ・アドレスの所与の範囲は、読込み範囲ではなく、書出し範囲にこれらのアドレスを含めることによって、書出し専用として指名されることが可能である。例えば、読込み範囲は、書出し範囲の正規のサブセットであってもよい。これは、機密性をもたらすことが望ましい実例において特に役に立つものである。例えば、２つのアプリケーションが互いに通信する場合、このような１つのアプリケーションは、メモリ・アドレスの所与の範囲を読み込むことを阻止される一方で、これらのアドレスに書き出すことは依然として許可され、それにもかかわらず、これらのアドレスは、このようなもう１つのアプリケーションには読込み可能であるということが望ましいことがある。
【００１７】
有界ポインタを維持することに関連して記憶装置が必要になることを避けるため又は減らすために、有界ポインタのサイズを減らすことが望ましいことがある。このような状況では、効率的なエンコード及び／又は圧縮によって、範囲情報を表すのに必要なサイズを低減させることが望ましい。これを達成する方式の１つの実例において、範囲情報は、１次情報及び２次情報を含む。１次情報は、１次範囲を定義し、１次範囲は、読込み範囲及び書出し範囲のうちの１つであり、ベース・アドレスから限界アドレスまで広がる。２次情報は、１次範囲及び２次情報に基づいて２次範囲が決定されることが可能であるようなものであり、２次範囲は、読込み範囲及び書出し範囲以外のものである。このような実例は、範囲情報を表すのに必要なサイズを減らし、このことにより、読込み範囲及び書出し範囲が独立して表されるためのものであったアプローチに比べて、有界ポインタのサイズを減らすことができる。
【００１８】
このような１つの実例において、１次情報は、１次範囲のベース・アドレス、並びに、１次範囲の限界アドレス、及び、１次範囲のサイズのうちの１つを含む。したがって、１次情報は、１次範囲の広がりを明確に定義する。
【００１９】
いくつかの実例において、１次範囲の限界アドレスは、２次範囲の限界アドレスであり、その結果、１次範囲及び２次範囲は、限界アドレスを共有するが、異なるベース・アドレスを有することがある。この制約が適用される実例において、２次情報は、第２の範囲の限界アドレスを独立して表すことができず、したがって、１次範囲の記憶された限界アドレスについて情報が冗長になる。逆に、いくつかの実例において、１次範囲のベース・アドレスは、２次範囲の２次範囲ベース・アドレスであり、その結果、１次範囲及び２次範囲は、ベース・アドレスを共有するが、異なる限界アドレスを有することがある。この制約が適用される実例において、２次情報は、第２の範囲のベース・アドレスを独立して表すことができず、したがって、１次範囲の記憶されたベース・アドレスについて情報が冗長になる。これらの実例において、このことにより、範囲情報を記憶するのに必要なメモリは、このような冗長情報を含めないことによって減らされることが可能である。
【００２０】
いくつかの実例において、２次情報は、２次範囲ベース・アドレス及び２次範囲限界アドレスのうちの少なくとも１つが、１次範囲のベース・アドレス及び限界アドレスからどのように決定されるかを識別する。例えば、１次範囲及び２次範囲がベース・アドレスを共有する場合、２次情報は、２次範囲のベース・アドレスではなく、２次範囲の限界アドレスを定義することができる。同様に、１次範囲及び２次範囲が限界アドレスを共有する場合、２次情報は、２次範囲の限界アドレスではなく、２次範囲のベース・アドレスを定義することができる。
【００２１】
いくつかのシステムにおいて、１次範囲と２次範囲との間の差が予め定義されることが望ましい。例えば、有界ポインタの範囲の始めにある所与の数のバイトは、例えば、これらのバイトが、変更されることのない暗号データを含むので、読込み専用であることが時に望ましいことがある。このようないくつかの実例において、２次情報は、１次範囲の所定の部分を２次範囲が除外することを示すフラグである。したがって、フラグは、ポインタの範囲の始めにある所与の数のバイトが読込み専用であることを示すためにセットされること、又は、ポインタの範囲全体が書き出されること、及び読み込まれることを示すためにセットされないことが可能である。単一のビットであることが可能なフラグの使用は、第１の範囲から第２の範囲を定義するのに必要な情報を提供するための特に効率的なメカニズムを提供する。構成の１つの実例において、有界ポインタによる最初の書出しより前に、フラグはセットされない。その後、フラグは、最初の書出しの後、セットされてもよい。これは、所定の部分に書き出すための最初の書出しを、この部分を初期化するために可能にし、所定の部分は、その後の書出しから除外されることになり、初期化後、さらなる書出しは許可されない。能力ベースのシステムの一定の実例において、能力は、拡大されるのではなく、縮小されることが可能である。したがって、このような実例において、フラグは、一旦セットされると、外すことはできない。
【００２２】
他の実例において、２次情報は、１次範囲の限界アドレスによって２次範囲の限界アドレスが制限されないことを示すフラグを含む。例えば、１次範囲及び２次範囲は、ベース・アドレスを共有することができ、一方で、１次範囲は、限界アドレスを有するが、２次アドレスは限界アドレスを有さない。１次範囲が書出し範囲であり、２次範囲が読込み範囲である場合、このことは、書出しが所与の範囲に制限されることを可能にするが、システム内で何らかのさらなる制約を受けた、ベース・アドレスを超える任意のメモリ・アドレスに対して読込みが許可される。例えば、ポインタがアプリケーションと関連付けられる場合、メモリ・スタック内のいずれかのメモリ・アドレスを読み込むことができるが、スタック・フレーム内のメモリ・アドレスへの書出しを許可するだけであることが望ましいことがある。いくつかの実例において、読込み範囲は、例えば、所与のアプリケーションと関連付けられたスタックの外側にあるメモリ・アドレスへのいずれのアクセスも禁止することによって、他のシステム・メカニズムによって効果的に限定されてもよい。
【００２３】
いくつかのより具体的な実例が次に議論されることになる。これらの実例は、図１から９を参照しながら、より詳細に下記で説明される。
【００２４】
１つの実例において、有界ポインタのポインタ値は、オブジェクトのアドレス空間内のメモリ・アドレスを識別する。前記アドレス空間内の位置は、前記オブジェクトが利用できるメソッドを識別するデータ構造を識別するポインタを記憶する。ポインタは、例えば、有界ポインタであってもよい。このようなデータ構造の実例は、前記オブジェクトが属するオブジェクト・クラスの仮想メソッド・テーブルである。読込み範囲は、データ構造への前記ポインタを含み、書出し範囲は、データ構造への前記ポインタを除外する。このことは、ポインタが読込み専用であることを可能にし、その結果、ポインタは、（例えば、ソフトウェア・バグの結果として）偶然に又は（例えば、前記オブジェクトのクラス定義に属するメソッド以外のメソッドを実行させようと）悪意をもって、望まれないメモリ・アドレスへのリダイレトを行わせるために変更されることが不可能である。
【００２５】
別の実例において、有界ポインタのポインタ値は、オブジェクトのアドレス空間内のメモリ・アドレスを識別し、前記アドレス空間の一部は、オブジェクトのメタデータを含む。例えば、有界ポインタの属性は、有界ポインタを認証するための、暗号署名などの署名を含むことができ、メタデータは、さらに、前記署名を生成するときに使用されるソルト値を含むことができる。読込み範囲は、メタデータを含む前記一部を含み、書出し範囲は、メタデータを含む前記一部を除外する。したがって、例えば暗号ソルトといったメタデータは、読込み専用にされることが可能であり、このことにより、偶然の又は悪意のある不正行為の可能性を減らす。いくつかの実例において、前記メタデータは、さらなるメタデータへのポインタ、又はこのようなメタデータが識別されるのを可能にする他のデータを含む。例えば、前記メタデータは、前述の暗号ソルトへのポインタであってもよい。
【００２６】
このような１つの実例において、アロケータは、アドレス空間をオブジェクトにアロケートし、アドレス空間への書出しアクセスを保つ。アロケータは、例えば、プロセッサ回路機器上で実行するソフトウェアによって実現されてもよい。オブジェクトにアロケートされたアドレス空間を解放することをアロケータが決定すると、アロケータは、ソルト値を上書きするように構成される。したがって、アドレス空間が解放された後にソルトを使用してオブジェクトへのポインタを認証しようとする試みは失敗するはずであり、このことにより、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ攻撃に対する抵抗力をもたらす。
【００２７】
有界ポインタの範囲情報は、さらに、読込み範囲を定義する読込み範囲データと、メタデータを収めるアドレス空間の前記一部を書出し範囲が除外することを示す除外データとを含む。上記で議論された他の実例と同様に、これは、最初の書出しの後の、メタデータの偶然の又は故意の悪意のある変更に対する抵抗力をもたらす。
【００２８】
メタデータを収めるアドレス空間の前記一部は、所定のサイズを有してもよい。例えば、メタデータは、８バイトの大きさの暗号ソルトであってもよい。したがって、２次範囲情報は、ソルトに対応する８バイトが書出し範囲から除外されることになるかどうかを示した、例えば単一のビットといったフラグを含むことができ、このことにより、この情報を効率的に表す。
【００２９】
別の実例において、有界ポインタのポインタ値は、アプリケーションのスタック・フレーム内のメモリ・アドレスを識別し、スタック・フレームは、スタック内にある。この実例において、読込み範囲は、スタック・フレーム、及び、スタックのさらなる部分を含み、書出し範囲は、スタックのスタック・フレームに制限され、スタックのさらなる部分を除外する。したがって、有界ポインタが対応する所与のアプリケーションは、例えばスタックの全体を読み込むことを許可されることが可能である一方で、スタック・フレームに書き出すことが許可されるが、スタック・フレームの外側に書き出すことは禁止される。
【００３０】
このような１つの実例において、範囲情報は、スタック・フレームのベース・アドレス、及び、スタック・フレームの限界アドレスを示す。範囲情報は、スタック・フレームの限界アドレスが読込み範囲の限界アドレスでないことを示すフラグを含む。したがって、スタック・フレームの広がりによって読込み範囲が制限されないはずであるということは、例えば単一のビットによって、効率的に表されることが可能である。読込み範囲は、アプリケーションと関連付けられたポインタが、スタックを超えたいずれかのメモリ・アドレスにアクセスすることを防ぐメカニズムなど、他のシステム・メカニズムによって、例えばスタックの広がりに制限されることが可能である。
【００３１】
これから、図を参照しながら特定の実例を説明する。
【００３２】
図１は、命令を処理するための処理パイプライン４を備えるデータ処理装置２の実例を概略的に示す。この例において、処理パイプライン４は、フェッチ・ステージ６、デコード・ステージ８、発行ステージ１０、実行ステージ１２、及びライト・バック・ステージ１４を含めたいくつかのパイプライン・ステージを含むが、ステージの他のタイプ又は組合せが設けられてよいということが理解されよう。例えば、いくつかの実装形態において、レジスタのリネームを行うためのリネーム・ステージが含まれてよい。処理されることになる命令はステージ間を移動し、命令が１つのステージで保留状態である間、別の命令がパイプライン４の異なるステージで保留状態であってよい。
【００３３】
フェッチ・ステージ６は、レベル１（Ｌ１）命令キャッシュ２０から命令をフェッチする。フェッチ・ステージ６は通常、連続的な命令アドレスから命令を順次にフェッチすることができる。しかし、フェッチ・ステージは、分岐命令の結果を予測するための分岐予測器２２を有してもよく、フェッチ・ステージ６は、分岐が行われると予測される場合には（連続していない）分岐先アドレスから、又は分岐が行われないと予測される場合には次の連続したアドレスから命令をフェッチすることができる。分岐予測器２２は、一定の分岐が行われる可能性があるか否かを予測するための情報を記憶するための１つ又は複数の分岐履歴テーブルを含むことができる。例えば、分岐履歴テーブルは、以前、実行された分岐の実際の結果を追跡するため、又は分岐に対して行われた予測の信頼度を表すためのカウンタを含むことができる。同じ分岐命令に後で遭遇した時に宛先アドレスが予測され得るように、分岐予測器２２は、分岐命令の以前の宛先アドレスをキャッシュするための分岐先アドレス・キャッシュ（ＢＴＡＣ：ｂｒａｎｃｈ  ｔａｒｇｅｔ  ａｄｄｒｅｓｓ  ｃａｃｈｅ）２４を含むこともできる。
【００３４】
フェッチされた命令は、命令をデコードしてデコードされた命令を生成するデコード・ステージ８に渡される。デコードされた命令は、適正な処理作業を実行するために、実行ステージ１２を制御するための制御情報を有することができる。キャッシュ２０からフェッチされたさらに複雑ないくつかの命令に対して、デコード・ステージ８は、これらの命令を、マイクロ・オペレーション（μｏｐｓ又はｕｏｐｓ）として知られることがある複数のデコードされた命令にマップすることができる。したがって、Ｌ１命令キャッシュ２０からフェッチされた命令と、パイプラインのその後のステージでみられるような命令との間に１対１の関連性はなくてもよい。一般に、本出願における「命令」への言及は、マイクロ・オペレーションを含むものとして解釈されるべきである。
【００３５】
デコードされた命令は、命令の実行のために要求されるオペランドが利用できるかどうかを判断し、オペランドが利用できるときに実行のために命令を発行する、発行ステージ１０に渡される。いくつかの実装形態は、Ｌ１命令キャッシュ２０から命令がフェッチされたプログラム順に対応する順序で実行に対して命令が発行されるように、イン・オーダー（ｉｎ−ｏｒｄｅｒ）処理をサポートすることができる。その他の実装形態は、アウト・オブ・オーダー（ｏｕｔ−ｏｆ−ｏｒｄｅｒ）実行をサポートすることができ、その結果、命令は、プログラム順とは異なる順序で実行ステージ１２に対して発行することができる。初めの方の命令がオペランドを待ちながら停止されている間、オペランドが利用できるプログラム順での後の命令が、最初に実行されることが可能になるので、アウト・オブ・オーダー処理は、パフォーマンスの改善に役立つ可能性がある。
【００３６】
発行ステージ１０は、様々なデータ処理作業を行うために命令が実行される実行ステージ１２に対して命令を発行する。例えば、実行ステージは、整数値に対する算術又は論理演算を行うための算術／論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ／ｌｏｇｉｃ  ｕｎｉｔ）３０、浮動小数点形式で表される値に対する演算を行うための浮動小数点（ＦＰ：ｆｌａｏｔｉｎｇ−ｐｏｉｎｔ）ユニット３２、及びレベル１（Ｌ１）データ・キャッシュ３６からレジスタ４０にデータ値をロードするためのロード作業、又はレジスタ４０からＬ１データ・キャッシュ３６にデータ値を記憶するための記憶作業を行うためのロード／記憶ユニット３４を含めた、多くの実行ユニット３０、３２、３４を含むことができる。これらは、提供され得る実行ユニットのタイプに関する単なるいくつかの実例にすぎず、他の多くの種類も提供され得るということが理解されよう。処理作業を行うために、実行ステージ１２は、レジスタ４０のセットからデータ値を読み込むことができる。実行された命令の結果は次に、ライト・バック・ステージ１４によってレジスタ４０に書き戻されてよい。
【００３７】
Ｌ１命令キャッシュ２０及びＬ１データ・キャッシュ３６は、複数のレベルのキャッシュを含むキャッシュ階層の一部であってよい。例えば、レベル２（Ｌ２）キャッシュ４４が提供されることもあり、任意選択でさらなるレベルのキャッシュが提供されることもある。この例において、Ｌ２キャッシュ４４は、Ｌ１命令キャッシュ２０とＬ１データ・キャッシュ３６の間で共有されるが、その他の実例は、別々のＬ２命令キャッシュ及びＬ２データ・キャッシュを有することができる。フェッチされることになる命令がＬ１命令キャッシュ２０の中にないとき、命令は、Ｌ２キャッシュ４４からフェッチされてよく、同様に、命令がＬ２キャッシュ４４の中にない場合、命令は、メイン・メモリ５０からフェッチされてよい。同様に、ロード命令に応答して、データは、命令がＬ１データ・キャッシュ３６の中にない場合、Ｌ２キャッシュ４４からフェッチされてよく、必要に応じてメモリ５０からフェッチされてもよい。任意の既知の方式が、キャッシュ階層を管理するために使用されてよい。
【００３８】
プログラム命令及びデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってよいが、少なくともメイン・メモリ５０、及び任意選択で、少なくともいくつかのレベルのキャッシュ階層も、物理的にアドレス指定されてよい。したがって、パイプライン４によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスに変換するために、トランスレーション・ルックアサイド・バッファ５２（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）が提供されることがある。例えば、ＴＬＢ５２は、対応するページ内の仮想アドレスを物理アドレスに変換するために、仮想アドレス空間の対応するページの仮想ページ・アドレス、及び仮想ページ・アドレスがマップされるべき、対応する物理ページ・アドレスをそれぞれが指定する、いくつかのエントリを含むことができる。例えば、仮想及び物理ページ・アドレスは、対応する仮想及び物理アドレスのうちの最上位部分に対応してよく、残りの最下位部分は、仮想アドレスを物理アドレスにマップしても、変化しない状態を保つ。アドレス変換情報と同様に、各ＴＬＢエントリは、アドレスの一定のページが、パイプライン４の一定のモードでアクセスできるかどうかを示すなどの、アクセス許可を指定するいくつかの情報を含んでもよい。いくつかの実装形態において、ＴＬＢエントリは、読込み又は書出し動作に応答してキャッシュ階層のどのレベルが更新されるか（例えば、ライト・バック又はライト・スルー・モードでキャッシュが動作すべきかどうか）を定義するキャッシュ・ポリシ情報、又はパイプライン４によってデータ・アクセスが発行された順序と比較して、対応するページ内のアドレスへのデータ・アクセスが、メモリ・システムによって並べ替えられてよいかどうかを定義する情報などの、アドレスの対応するページに関するその他のプロパティを定義することもできる。
【００３９】
図１は単一レベルＴＬＢ５２を示すが、レベル１（Ｌ１）ＴＬＢ５２が、最近アクセスされた多くのページ内のアドレスを変換するための複数のＴＬＢエントリを含むことができ、レベル２（Ｌ２）ＴＬＢが、多くのページに対するエントリを記憶するために提供され得るように、複数のＴＬＢの階層が提供されてよいということが理解されよう。要求されたエントリがＬ１  ＴＬＢに存在しないとき、Ｌ２  ＴＬＢから、又は階層内のさらなるＴＬＢから、フェッチされてよい。アクセスされることになるページに対する要求されたエントリがＴＬＢのいずれにもない場合、メモリ５０内のページ・テーブルにアクセスするために、ページ・テーブル・ウォーク（ｐａｇｅ  ｔａｂｌｅ  ｗａｌｋ）が行われてよい。任意の既知のＴＬＢ管理方式が本技法において使用されてよい。
【００４０】
また、例えば、仮想アドレスを中間アドレスに変換するために第１のＴＬＢ（又はＴＬＢの階層）が使用され、次に、１つ又は複数のさらになるＴＬＢを使用する第２レベルのアドレス変換が、中間アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスに変換できるように、いくつかのシステムは、複数レベルのアドレス変換をサポートすることができるということが理解されよう。これは、例えば、第１レベルのアドレス変換がオペレーティング・システムによって管理され、第２レベルのアドレス変換がハイパーバイザによって管理されることがある仮想化をサポートするのに役立つことがある。
【００４１】
図１に示されるように、装置２は有界ポインタ・レジスタ６０のセットを有することができる。有界ポインタ・レジスタのセットは、汎用データ・レジスタ４０のセットとは物理的に別個のものとして図１に示されるが、１つの実装形態において、汎用データ・レジスタと有界ポインタ・レジスタの両方を提供するために同じ物理記憶が使用されてよい。
【００４２】
各有界ポインタ・レジスタ６０は、アクセスされることになるデータ値のアドレス、及び対応するポインタ６２を使用するときのアドレスの許容範囲を指定する範囲情報６４を判断するために使用されることがあるポインタ値６２を含む。有界ポインタ・レジスタ６０は、ポインタの使用に関する１つ又は複数の制限／許可を定義することができる制限情報６６（本明細書では許可情報とも呼ばれる）を含むこともできる。例えば制限６６は、ポインタ６２を使用できる命令のタイプ、又はポインタが使用され得るパイプライン４のモードを制限するために使用されてよい。したがって、範囲情報６４及び制限情報６６は、ポインタ６２を使用することが許される能力を定義すると見なされてよい。定義された能力の外側でポインタ６２を使用するという試みが行われると、エラーがトリガされることがある。範囲情報６４は、例えば、ポインタが一定の既知の境界内にとどまり、取扱いに注意を要し又セキュアな情報を収める可能性がある、メモリ・アドレス空間の他のエリアに迷い込まないことを保証するのに有用なことがある。汎用データ・レジスタと有界ポインタ・レジスタの両方に対して同じ物理記憶装置が使用される実例において、１つの実装形態において、ポインタ値６２は、例えば、対応する汎用レジスタに対して使用されるのと同じ記憶位置内に記憶されてよい。
【００４３】
図２は、データ又は命令への不正アクセスから保護するために許容範囲が使用される命令のタイプの実例を示す。表現の簡略化のために、図２は、読込み範囲及び書出し範囲が別個であるのとは対照的に、読込み及び書出しの両方に対応する１つの範囲だけを示す。図２の上部に示されるように、特定の有界ポインタ・レジスタＰＲ１は、所与のポインタ値６２、並びにこの例において、許容範囲の下限を定義する下限アドレス６８と許容範囲の上限を定義する上限アドレス６９とを使用して指定される範囲情報６４を含む。例えば、アドレスの範囲８００００〜８１０００を定義するように境界６８、６９がセットされる。一定の命令が有界ポインタ・レジスタＰＲ１を参照し、ポインタ６２から判断されるアドレスがこの範囲の外側にあるとき、エラーがトリガされてよい。
【００４４】
例えば、図２の部分Ａに示すように、いくつかのシステムにおいて、ポインタ・レジスタ６０内のポインタ６２の値を、範囲情報６４によって指定された範囲の外側にある値にセットしようと試みる場合、エラーがトリガされてよい（ここで、ポインタがアドレスを直接指定すると想定する）。これは、ポインタを使用するいずれのアクセスも、認められる範囲の中に間違いなくあることが保証され得るように、ポインタ６２が指定範囲の外側のいずれかの値をとることを回避する。あるいは、図２の部分Ｂに示すように、ポインタ６２のアドレスが指定範囲の外側にあるときに、ポインタ６２のアドレスによって識別される場所に命令がアクセスしようと試みるとき、エラーがトリガされてよい。したがって、ポインタ６２を指定範囲の外側の値にセットすることが依然として許容可能であってよいが、このポインタ・アドレス（又はこのポインタから導き出されたアドレス）でのデータ・アクセスが試みられると、このアドレスが許容される範囲の外側にある場合、エラーがトリガされてよい。その他のシステムは、図２の部分Ａ及びＢに示される命令のタイプの両方に応答して、エラーをトリガしてもよい。
【００４５】
範囲情報６４は、異なる方法で設定されてもよい。例えば、セキュアなコード、又はオペレーティング・システム若しくはハイパーバイザが、所与のポインタに認められる範囲を指定することができる。例えば、インストラクション・セット・アーキテクチャは、所与のポインタ６２に対する範囲情報６４をセット又は修正するための多くの命令を含むことができ、これらの命令の実行は、一定のソフトウェア又はプロセッサ４の一定のモード若しくは例外状態に制限されることがある。範囲情報６４をセット又は修正するための任意の既知の技法が使用されてもよい。
【００４６】
ポインタを参照する一定の命令を実行する実行状態１２で使用されることがある有界ポインタ記憶要素６０のセットに加えて、レベル１命令キャッシュ２０から命令がフェッチされているフェッチ・ステージ６で類似の機能を提供するために、プログラム・カウンタ能力（ＰＣＣ：ｐｒｏｇｒａｍ  ｃｏｕｎｔｅｒ  ｃａｐａｂｉｌｉｔｙ）レジスタ８０が使用されてもよい。具体的には、有界ポインタ記憶要素６０のセットにおいてポインタのそれぞれと共に提供される範囲及び制限情報に類似の、範囲情報８４及び任意の適正な制限情報８６もＰＣＣ８０が提供する状態で、プログラム・カウンタ・ポインタがフィールド８２に記憶されてよい。
【００４７】
図３は、個別のデータ・ブロックが、能力（即ち有界ポインタ及び関連付けられた制限情報）を表すか、又は通常のデータを表すかを識別するために、個別のデータ・ブロックと関連して、どのようにタグ・ビットが使用されるかを概略的に示す。具体的には、メモリ・アドレス空間１１０は、典型的には指定されたサイズを有する一連のデータ・ブロック１１５を記憶する。単なる例証のために、この例において、各データ・ブロックが１２８ビットを有すると想定する。各データ・ブロック１１５と関連して、１つの例においてタグ・ビットと呼ばれるシングル・ビット・フィールドである、タグ・フィールド１２０が提供され、タグ・ビットは、関連付けられたデータ・ブロックが能力を表すことを識別するためにセットされ、又は、関連付けられたデータ・ブロックが通常のデータを表し、したがって能力として扱われることがないことを示すためにクリアされる。セットされた状態又はクリアされた状態と関連付けられる実際の値は、実装形態に応じて変えることができるが、単なる例証のために、１つの実例において、タグ・ビットが値１を有する場合、これは、関連付けられたデータ・ブロックが能力であることを示し、タグ・ビットが値０を有する場合、これは、関連付けられたデータ・ブロックが通常のデータを収めることを示すということが理解されよう。
【００４８】
図３に示される能力レジスタ１００などの、（本明細書では能力レジスタとも呼ばれる）有界ポインタ・レジスタ６０のうちの１つに、能力がロードされると、タグ・ビットは能力情報と共に移動する。したがって、能力レジスタ１００に能力がロードされると、ポインタ１０２、範囲情報１０４、及び（以下に許可情報と呼ばれる）制限情報１０６は、能力レジスタにロードされる。さらに、この能力レジスタと関連して、又はこの中の特定のビット・フィールドとして、タグ・ビット１０８は、内容が能力を表すことを識別するためにセットされる。同様に、能力がメモリに戻されて記憶されると、能力が記憶されるデータ・ブロックと関連して、関連するタグ・ビット１２０がセットされる。このようなアプローチによって、能力と通常のデータを区別し、したがって通常のデータが能力として使用され得ないということを保証することができる。
【００４９】
図４は、無署名の能力を署名済み能力に変換するために使用されることがある署名作業、及びその後、署名済み能力を変換して無署名の能力に戻すために使用されることがある対応する権限付与作業を概略的に示す図である。（無署名有界ポインタとも呼ばれる）無署名の能力１５０が、署名作業のための入力オペランドとして提供され、能力１５０は、ポインタ部１５５と属性部１６０を有する。無署名の能力内に提供されるポインタ値の使用が許されることを示す性質をもつ様々な許可情報と共に、ポインタ部１５５にポインタ値が指定され、属性部１６０に範囲情報が指定される。例えば、どのタイプのオペレーションに対してポインタが参照されるのを許すか、したがって、例えば、ロード又は記憶することになるデータを識別するため、フェッチされることになる命令を識別するためなどに、ポインタを使用することができるかどうかを、許可情報は、識別することができる。さらに、先に議論されたように、情報の関連付けられたブロックが能力を表すことを識別するためにセットされるタグ・ビット１６５が提供される。能力のサイズは、実装形態に応じて変えられてよいが、能力が１２８ビットを有する、先に説明された実例と一致してよく、したがって、１つの実装形態において、ポインタ部１５５は６４ビット有してよく、属性部１６０も６４ビットを有してよい。
【００５０】
無署名の能力を署名済み能力に変換するために使用される暗号署名機能１７０は、署名済み能力を形成するために追加されることになる署名を導き出すために使用される多くの入力を受け取る。具体的には、機能１７０は暗号署名キーにアクセスでき、さらにソルト値（ｓａｌｔ  ｖａｌｕｅ）にアクセスできる。ソルト値は、様々な形式をとることができるが、１つの実例において、合法的に署名済み能力を無署名化する必要があり、したがって、署名済み能力に関しては、権限付与作業を正常に行うことができるはずである、１つのタスク又は複数のタスクに対してしか利用できないコンテキスト情報（ｃｏｎｔｅｘｔｕａｌ  ｉｎｆｏｒｍａｔｉｏｎ）を表す。コンテキスト情報は、様々な形式をとることができるが、１つの実例において、例えば、合法的に署名済み能力に権限付与することを望む１つのタスク又は複数のタスクにしか知られていないスタックの場所であってよい。
【００５１】
さらに、機能１７０は、ポインタ部１５５に記憶されるポインタ値の少なくとも一部を受け取る。１つの実装形態において、ポインタ値は、一定数の一意のポインタ・ビットを有することが予期され、残りの最上位ビットは、一意のポインタ・ビットの署名拡張版（したがって、一意のポインタ・ビットのうちの最上位ビットに応じて、全て１若しくは全て０）、又は一意のポインタ・ビットのゼロ拡張版（即ち全て０）である。１つの実例において、ポインタ値の一定数の最上位ビット内のこの本質的に冗長な情報は、以前に生成された署名を挿入する場所として使用され、これにより、情報のいかなる損失もなく、署名済み能力に署名が組み込まれることを可能にする。１つの代替実例において、この処理は、例えば属性部１６０のいくつかのビット内といった、能力の別の部分に署名を挿入するように構成されてよい。実装形態のさらなる実例において、無署名の能力内に充分な未使用ビットがあり、署名値を保持するために署名済み能力の中でそれらの未使用ビットを使用することが可能であるということを符号化することがあり得る。
【００５２】
図４に示される実例において、ポインタ部１５５の上位ビット、具体的には、全て１又は全て０を収めるセクションに、署名が挿入されることが想定される。図４に示される実例において、ポインタ値の全体が、署名機能１７０への入力として依然として使用され、本明細書でハッシュとも呼ばれる署名を生成するために、このポインタ値、暗号署名キー、及びソルト値を使用して暗号署名機能が行われている。任意の適切な暗号署名機能が、このために使用されることがある。
【００５３】
１つの代替実例において、この処理は、ポインタ値全体ではなく暗号署名機能１７０への入力として、一意のポインタ・ビットだけが使用されるように構成されてよい。どのアプローチが取られるかに関係なく、署名済み能力の中のポインタ値の上位部分に署名が追加される場合、署名フィールド（即ち、署名で上書きされることになるポインタ値の部分）が、一意のポインタ・ビットの署名拡張版又はゼロ拡張版を収めるように、このポインタが「標準（ｃａｎｏｎｉｃａｌ）」であることを保証するためのチェックを、説明された実例の処理は行う。これは次に、署名済み能力を作成する有効な署名処理とこれに続くこの署名済み能力の無署名版を作成する有効な権限付与処理が、元の無署名の能力１５０に対応する、結果として生じる無署名版を、もたらすことを保証する。このチェックが行われ得る多くの方法がある。例えば、１つの実装形態において、署名する前にこの条件が真であることを保証するためにチェックが行われる。あるいは、元の能力を権限付与された能力（即ち、署名済み能力を認証した後に作成される能力）と比較するために、署名処理後のテスト認証が機能１７０に組み込まれることがある。
【００５４】
図４に示されるように、署名が作成されると、署名は、署名済み能力１７５の部分１７６のセクション１７９に挿入される。次に、部分１７６のセクション１７７に一意のポインタ・ビットが保持される。許可部分１８０に、能力１７５が署名済み能力であることを識別するためにセットされる署名フィールド１８２が設けられ、さらに、関連付けられた１２８ビットのデータが能力を表すことを示すために、セットされた状態でタグ・ビット１８５が保持される。このことは、別個の署名フィールド１８２を設けることによって、提供された入力された能力が無署名の能力であるか又は署名済み能力であるかに応じて、一定のリクエストされた作業が異なる振舞いをすることを可能にする。このことは、例えば、署名済み能力に関して一定のアクションが行われるのを装置が防ぐことを可能にし、それによってさらに拡張されたセキュリティをもたらす。
【００５５】
図４の下部に示されるように、署名済み能力１７５を無署名化しようとするために、権限付与機能１９０が起動されてよい。最初に一意のポインタ・ビット１７７が識別され、次に署名機能１７０が実行されたときに使用された元のポインタ値を生成するために、署名拡張作業１９２が行われる。元のポインタ値がゼロ拡張型フォーマットで表された場合、ステップ１９２でゼロ拡張化作業が代わりに行われる。さらに、署名機能１７０への入力として一意のポインタ・ビットだけが使用された場合、署名拡張作業又はゼロ拡張作業はステップ１９２では要求されず、代わりに一意のポインタ・ビットが権限付与署名生成機能１９５に直接、提供されることがある。
【００５６】
図４に示されるように、権限付与署名生成機能１９５は、暗号署名キー及びソルト値にアクセスすることもできる。暗号署名機能１７０によって使用されたのと同じソルト値（即ちコンテキスト情報の同じ項目）に権限付与署名生成機能１９５がアクセスできない限り、署名済み能力のセクション１７９に挿入された署名にマッチする権限付与署名を生成することは、全くありそうにないということが理解されよう。
【００５７】
関連するポインタ・ビット、暗号署名キー、及びソルト値を使用して権限付与署名生成機能１９５によって生成される権限付与署名は次に、比較ブロック１９８に入力され、ここで権限付与署名は、署名済み能力のセクション１７９に保持されている署名と比較される。マッチする場合、権限付与は合格したと考えられ、署名済み能力１７５の無署名版が生成される。そうでなければ、失敗状態が識別され、所定のアクションが行われる。
【００５８】
権限付与チェックが合格すると想定すると、セクション１７９から署名を削除し、当初のポインタ値を再作成するために、セクション１７７内の一意のポインタ・ビットの署名拡張版（又は実装形態によっては、ゼロ拡張版）で置き換えることによって、無署名の能力が作成される。さらに、現時点で能力が無署名であることを識別するために、署名情報１８２はクリアされる。
【００５９】
署名フィールド１８２は様々な形式をとることができる。１つのアプローチによれば、能力が無署名であることを第１の値が示し、能力が署名済みであることを第２の値が示す、専用のシングル・ビットの署名フィールドが提供される。この実例において、値が論理値１にセットされるとき、これは能力が署名済みであることを示し、その一方で値が論理値０にクリアされる場合、これは能力が無署名であることを示すということが想定される。しかし、種々の実装形態において、署名フィールド１８２内の論理値０と論理値１の意味が逆転されてもよいということが理解されよう。
【００６０】
他のアプローチによれば、専用のシングル・ビットの署名フィールドは提供されない。このようないくつかのアプローチでは、下記で述べられるように、全て１又は全てゼロを通常収めるはずのポインタの上位ビットに署名が挿入される。したがって、ポインタが署名されるか否かは、全ての上位ビットが同じ値を有するか否かから推測されることが可能である。
【００６１】
図５Ａ及び図５Ｂは、本開示の実例による有界ポインタ５０５、５１０を概略的に示す。
【００６２】
図５Ａに示されたポインタ５０５は、例えば、図２に関して上述されたように、ポインタ値５１５を含む。ポインタ５０５は、範囲及び許可情報５２０をさらに含む。範囲及び許可情報５２０は、読込みと書出しの両方を、ポインタ５０５が有効に指すことができるメモリ・アドレスをエンコードする。読込み範囲は、書出し範囲と異なる、又は同じものとして定義されることが可能である。
【００６３】
範囲及び許可情報５２０は、１次範囲５２５を定義するデータを含み、１次範囲は、読込み範囲及び書出し範囲のうちの１つである。例えば、１次範囲は、ベース・アドレス及び限界アドレス、又は、ベース・アドレス及び範囲サイズとして表されてもよい。範囲及び許可情報５２０は、２次範囲が決定されることが可能な２次情報５３０をさらに含む。２次範囲は、読込み範囲及び書出し範囲以外のものである。いくつかの実例において、２次情報５３０は、例えば、ベース・アドレス及び限界アドレスとして、１次範囲の表現と同様に、２次範囲を表す。他の実例において、２次情報５３０は、２次範囲を明確に定義しないが、代わりに、例えば、本明細書の他の場所でより詳細に説明されるようなデータを含み、このデータに基づいて１次範囲から２次範囲が導出される。
【００６４】
図５Ｂに示されたポインタ５１０は、ポインタ５０５のポインタ値５１５に類似のポインタ値５３５を含む。ポインタ５１０は、例えば、ポインタ５０５の範囲及び許可情報５２０と同様に、読込み範囲及び書出し範囲を定義する範囲情報５４０を含む。ポインタ５１０は、別個の許可フィールド５４５を含む。許可フィールド５４５は、例えば、上記で図１を参照しながらより詳細に説明されたように、ポインタ５１０に適用される許可又は制限を定義する。
【００６５】
図６は、本開示の実例による方法６００を概説する流れ図である。
【００６６】
ブロック６０５において、アロケータ、即ちメモリ・アロケータは、オブジェクトのためのアドレス空間をアロケートする。例えば、アドレス空間は、メモリ・アドレスの連続範囲であってもよい。
【００６７】
ブロック６１０において、アロケータは、能力、即ち有界ポインタを作り出す。能力を作り出すことは、意図した読込み範囲及び書出し範囲を決定することを含み、このことに基づいて、１次範囲及び２次範囲の情報及び許可を指定する。読込み範囲及び書出し範囲は、オブジェクト、及び／又は、オブジェクトと関連付けられたアプリケーションの特定の特性に基づいて決定されてもよく、この特定の実例が下記でより詳細に説明される。
【００６８】
ブロック６１５において、アロケータは、オブジェクトを使用することになるアプリケーションに能力を返す。本実例において、能力は、能力が有効に指すことができるメモリ・アドレスの範囲全体にわたる読込みと書出しの両方を最初に可能にする。例えば、いくつかの実例において、２次情報は、セットされると、読込み範囲の特定の部分が書き込まれることが不可能であることを示すフラグである。したがって、能力は、このように書出し範囲が最初に制限されないように、このフラグがセットされない状態で作り出されることが可能である。
【００６９】
ブロック６２０において、アプリケーションは、読込み範囲の前述の特定の部分に書き出す。例えば、アプリケーションは、暗号ソルトなど、一旦書き出されると不変であることを意図されたデータを書き出すことができる。この書出しの後、アプリケーションは、読込み範囲の特定の部分を読込み専用として制限する能力を縮小する。例えば、２次情報が、上述のような最初にセットされないフラグである場合、縮小することは、フラグを設定することを含むことができる。このような１つの実例において、フラグは、セットされないとき０、及び、セットされるとき１のバイナリ値を有し、その結果、フラグをセットすることは、１を書き出して０を上書きすることを含む。１つの実例において、能力が望まれるが、決して拡大されない限り、縮小することを、ハードウェア（例えば、方法６００を実行するプロセッサのアーキテクチャ）は保証する。言い換えれば、ハードウェアは、１次範囲及び／又は２次範囲を減らすことを許可するが、決して拡大されない。
【００７０】
ブロック６２５において、その後の読込み及び書出し動作が行われる。これらの動作は、例えば、能力が有効に指すことができるメモリ・アドレスの範囲全体にわたって読込みが許可されるが、読込み専用範囲内で書出しが許可されないように、１次範囲情報及び２次範囲情報でエンコードされた読込み範囲及び書出し範囲に基づいて制御される。
【００７１】
技法６００の１つの特定の用途の実例が次に、図７を参照しながら説明されることになる。
【００７２】
この実例において、有界ポインタ７０５は、図５Ａに関して上述されたように、ポインタ値７１０、並びに、範囲及び許可情報７１５を含む。範囲情報７１５は、オブジェクト７２０に対応するメモリ・アドレス内のアドレスを作り出すために、ポインタ７０５が使用されるのを許可する。言い換えれば、ポインタは、オブジェクト７２０に対応するメモリ・アドレスの範囲内でメモリ・アドレスについてのアドレス識別子７１０を有効に作り出すために使用されることが可能である。
【００７３】
オブジェクト７２０に対応するメモリ・アドレスの範囲は、ベース・アドレスＣ．ＢＡＳＥ７２５、及び限界アドレスＣ．ＬＩＭＩＴ７３０の観点から定義されることが可能である。ベース・アドレス７２５は、オブジェクト７２０に対応する第１のアドレスであり、限界アドレス７３０は、オブジェクト７２０の終わりを超えたバイトのアドレスである。
【００７４】
暗号ソルト７３５は、オブジェクト７２０に対応するメモリ空間の始めのメモリ・アドレスの範囲に記憶され、暗号ソルト７３５に基づいて、ポインタ７０５は署名７４０で署名される。このようなポインタ署名の実例が、図４を参照しながら上述されている。ポインタ７０５に署名した後、ポインタ７０５は、ソルト７３５を使用して権限付与されることが可能である。
【００７５】
範囲及び許可情報７１５は、オブジェクト７２０のメモリ空間内、且つ、ソルト７３５の外部の（図７に実線で示された）メモリ・アドレスを作り出すために、ポインタ７０５が読込み動作と書出し動作の両方のために使用されることが可能になるように、読込み範囲及び書出し範囲７４５、７５０を定義するためにセットされる。範囲及び許可情報７１５は、（図７に断続線で示された）ソルト７３５を収めるアドレス範囲内のメモリ・アドレスを作り出すために、ポインタ７０５が書出し動作ではなく読込み動作のために使用されることが可能になるようにさらにセットされる。言い換えれば、ソルト７３５は読込み専用である。これは、偶然の又は悪意をもったソルトの変更に対する抵抗力をもたらすことによって信頼性を改善し、ソルト７３５を使用して、署名された有界ポインタ７０５に権限付与しようとする試みを失敗させるはずである。
【００７６】
実例として、ソルトは、所定のサイズを有してもよい。例えば、ＡＲＭｖ８．３アーキテクチャ内でポインタ７０５が実現される場合、ソルトは、８バイトの所定のサイズを有することができる。範囲及び許可情報７１５は、さらに、ベース・アドレス７２５及び限界アドレス７３０の明確な定義、並びに、最初の８バイトが書出し領域から除外されるべきかどうかを示すフラグによって、読込み範囲及び書出し範囲を表すことができる。
【００７７】
いくつかの実例において、ポインタ７０５は、オブジェクト７２０に対応するメモリ範囲全体にポインタが書き出せるように、範囲及び許可情報７１５で最初に作り出される。言い換えれば、範囲の一部は、最初、読込み専用ではない。ポインタ７０５は、ソルト７３５を書き出すために使用され、その後、ソルト７３５が読込み専用になるように、書出し範囲を縮小するために、範囲及び許可情報７１５がセットされる。例えば、ソルトが所定のサイズを有し、範囲及び許可情報７１５が、ソルトが書出し領域から除外されるべきかどうかを示すフラグを含む場合、フラグは、最初にセットされなくてもよく、その後、ソルトの最初の書出し後にセットされる。
【００７８】
代替として又は追加として、オブジェクト７２０に対応するメモリ空間が解放されると、（ポインタ７０５の範囲及び許可情報７１５によって制限されない）アロケータは、ソルト７３５に対応するメモリ・アドレスを上書きする。例えば、アドレスは、ゼロで上書きされることが可能である。ポインタ７０５に権限付与しようとするその後の試みは、その後、有界ポインタに署名するときに使用される値をソルトがもはや有していないはずなので、失敗するはずである。これは、オブジェクト７２０に対応するメモリ空間を解放した後、悪意のあるエンティティが、ソルト７３５に以前に対応したメモリ空間にアクセスしようとするｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ攻撃に対する抵抗力をもたらす。
【００７９】
技法６００のさらなる特定の用途の実例が次に、図８を参照しながら説明されることになる。
【００８０】
この実例において、有界ポインタ８０５は、図５Ａに関して上述されたように、ポインタ値８１０、並びに、範囲及び許可情報８１５を含む。ポインタは、アプリケーションに関連付けられ、スタック・フレーム８２５を含むスタック８２０内のメモリ・アドレスを指す。
【００８１】
範囲情報８１５は、スタック・フレーム・ベース８３０に等しい書出し範囲ベース、及び、スタック・フレーム限界８３５に等しい書出し範囲限界をエンコードし、このことにより、スタック・フレーム８２５の広がりをカバーするものとして書出し範囲を定義する。範囲情報８１５は、書出し範囲限界によって読込み範囲が限定されるかどうかについてのフラグなどの指示をさらに含む。したがって、フラグがセットされていないとき、読込み及び書出しは、スタック・フレーム８２５内のメモリ・アドレスに対して許可されるが、スタック・フレームの外側のメモリ・アドレスに対して禁止される。逆に、フラグがセットされていると、読込み範囲は、書出し範囲のベース（即ち、スタック・フレーム・ベース８３０）に等しいベースを有するが、特定の読込み限界は有さない。したがって、読込みは、スタック・フレーム８２５を超えるスタック８２０のメモリ・アドレスに対して許可される。
【００８２】
いくつかの実例において、範囲及び許可情報８１５は、読込み範囲限界を具体的に定義しないが、（例えば、プロセッサ又はシステム・アーキテクチャにおいて定義される）他のシステム・メカニズムは、スタック８２０の外側の記憶場所にアクセスするためにポインタ８０５が使用されるのを防ぐ。したがって、ポインタ８０５は、スタック８２０の広がりに等しい効果的な読込み範囲を有する。
【００８３】
したがって、本実例は、アプリケーションが（点線矢印によって示された）アプリケーションのスタックの全体を読み込むのを許可するために使用されることが可能であるが、（実線矢印によって示された）アプリケーションのスタック・フレームに書き出すことしかできないということが理解されよう。これは、異なる読込み範囲及び書出し範囲を有する単一の有界ポインタ８０５によって達成される。これは、記憶装置及び処理能力の観点から、読込み及び書出しのために別個の有界ポインタが定義されるアプローチよりかなり効率的である。
【００８４】
技法６００のさらなる特定の用途の実例が次に、図９を参照しながら説明されることになる。
【００８５】
この実例において、有界ポインタ９０５は、図５Ａに関して上述されたように、ポインタ値９１０、並びに、範囲及び許可情報９１５を含む。範囲情報９１５は、オブジェクト９２０に対応するメモリ・アドレスをポインタ９０５が指すことを許可する。言い換えれば、ポインタ値９１０は、オブジェクト９２０に対応するメモリ・アドレスの範囲内のメモリ・アドレスを作り出すために有効に使用されることが可能である。
【００８６】
オブジェクト９２０に対応するメモリ・アドレスの範囲は、ベース・アドレスＣ．ＢＡＳＥ９２５及び限界アドレスＣ．ＬＩＭＩＴ９３０の観点から定義されることが可能である。ベース・アドレス９２５は、オブジェクト９２０に対応する第１のアドレスであり、限界アドレス９３０は、オブジェクト９２０の終わりを超えたバイトのアドレスである。
【００８７】
仮想メソッド・テーブル又はｖ−テーブル９４０へのポインタ９３５は、オブジェクト９２０に対応するメモリ空間の始めに記憶される。当業者によって理解されるように、ｖ−テーブル９４０は、オブジェクト９２０が利用できるメソッドのテーブルである。例えば、ｖ−テーブル９４０は、オブジェクト９２０がインスタンスであるクラスのオブジェクト上で動作することができる各メソッドへのポインタのテーブルであってもよい。
【００８８】
範囲及び許可情報９１５は、オブジェクト９２０のメモリ空間内、且つ、（図９に実線で示された）ｖ−テーブル・ポインタ９３５の外部のメモリ・アドレスを作り出すために、ポインタ９０５が読込み動作と書出し動作の両方のために使用されることが可能になるように、読込み範囲及び書出し範囲９４５、９５０を定義するためにセットされる。範囲及び許可情報９１５は、（図９に断続線で示された）ｖ−ポインタ９３５に関連付けられた範囲内のメモリ・アドレスを作り出すために、ポインタ９０５が書出し動作ではなく読込み動作のために使用されることが可能になるように、さらにセットされる。言い換えれば、ｖ−テーブル・ポインタ９３５は、読込み専用である。これは、ｖ−テーブル・ポインタの変更に対する抵抗力をもたらすことによって信頼性を改善する。これは、例えば、ｖ−テーブル９４０内のメソッド以外のメソッドを実行させるために、ｖ−テーブル９４０以外のメモリ・アドレスを指すようにｖ−テーブル・ポインタが変更される悪質な攻撃に対する回復力を改善する。
【００８９】
ｖ−テーブル・ポインタ９３５は、所定のサイズを有することができる。このような実例において、範囲及び許可情報は、図７に関して上述されたものと同様に、読込み範囲の広がりの明確な定義、及び、所定のサイズの領域が書出し範囲から除外されるべきかどうかを示すフラグを含むことができる。このようなフラグを利用するいくつかの実例において、フラグは最初にセットされず、その結果、ポインタ９０５が、ｖ−テーブル・ポインタ９３５の最初の書出しを行うために使用されることが可能になる。最初の書出しの後、フラグは、図７に関して上述されたものと同様にセットされることが可能である。
【００９０】
上述の技法の使用を通じて、単一の有界ポインタは、異なる読込み範囲及び書出し範囲を表現することができるということが理解されよう。これは、例えば、ポインタを介してアクセスされることが可能な少なくともいくつかのデータが、最初の書出しにおいて一度書き出され、さらに、その後、変更されないことが望まれる広い範囲の用途において、信頼性及び安全性を改善することができる。本明細書で説明される方法は、このようなデータが、最初の書出しの後、読込み専用に変えられることを可能にする。
【００９１】
本明細書で説明される方法は、ハードウェア及び／又はソフトウェアで実行されてもよい。このようなハードウェアは、汎用プロセッサ、又は、特定用途向け集積回路若しくはフィールド・プログラマブル・ゲート・アレイなどのより具体的なユニットであってもよい。
【００９２】
本発明の例証的な実例が添付の図面を参照しながら本明細書で詳細に記述されたが、本発明は、これらの正確な実例に限定されないということ、並びに様々な変更、追加、及び修正は、添付の特許請求の範囲によって定義されるような本発明の範囲及び精神から逸脱することなく、当業者によって本発明の中で行われてよいということを理解されたい。例えば、従属請求項の特徴の様々な組合せが、本発明の範囲から逸脱することなく、独立請求項の特徴と共に行われてよい。
【図１】
2021517687.tif 000003
【図２】
2021517687.tif 000004
【図３】
2021517687.tif 000005
【図４】
2021517687.tif 000006
【図５Ａ】
2021517687.tif 000007
【図５Ｂ】
2021517687.tif 000008
【図６】
2021517687.tif 000009
【図７】
2021517687.tif 000010
【図８】
2021517687.tif 000011
【図９】
2021517687.tif 000012
【国際調査報告】
2021517687.tif 000013
2021517687.tif 000014