(57)【要約】  有界ポインタの使用を制御するための装置及び方法が提供される。装置は、メモリ内のメモリ領域を割り当てるためのメモリ割り当て回路、及び有界ポインタを生成するための有界ポインタ生成回路を有し、これらの有界ポインタはメモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを含む。取り消し可能な有界ポインタは、ポインタ値及びメモリ領域のアドレス範囲を特定する範囲情報を与える。メモリ割り当て回路は、メモリのヘッダ位置においてメモリ領域用のヘッダを提供するように構成され、ヘッダはメモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有する。ヘッダ位置は、取り消し可能な有界ポインタによって与えられる範囲情報から導出可能である。メモリ割り当て回路はメモリ領域の解放に応答して、ヘッダの第１のトークン・フィールド内の格納値を修正する。上述のステップの結果として、取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、第１のトークン・フィールド内の格納値が変更されていると判断される場合、使用認可チェックはメモリ・アドレスの生成を妨げるよう構成することができる。これは、関連付けられるメモリ領域が解放された後に有界ポインタを使用しようとする試行がなされる場合、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオを妨げようと試みるための堅牢なメカニズムを与える。
2021535470.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、
メモリ内でメモリ領域を割り当てるためのメモリ割り当て回路と、
前記メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを含む有界ポインタを生成するための有界ポインタ生成回路であって、前記取り消し可能な有界ポインタは、ポインタ値及び前記メモリ領域のアドレス範囲を特定する範囲情報を与える、有界ポインタ生成回路と
を備え、
前記メモリ割り当て回路は、前記メモリのヘッダ位置において前記メモリ領域用のヘッダを提供するように構成され、前記ヘッダは格納値が前記メモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有し、前記ヘッダ位置は、前記取り消し可能な有界ポインタによって与えられる前記範囲情報から導出可能であり、前記メモリ割り当て回路は、続いて起こる前記メモリ領域の解放に応答して、前記ヘッダの前記第１のトークン・フィールド内の前記格納値を修正し、
それにより、前記取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、前記第１のトークン・フィールド内の前記格納値が変更されていると判断される場合、使用認可チェックは前記メモリ・アドレスの生成を妨げるよう構成される、装置。
【請求項２】
前記使用認可チェックは、前記第１のトークン・フィールド内の前記格納値が変更されていると判断される場合、前記取り消し可能な有界ポインタを無効にするように構成される、請求項１に記載の装置。
【請求項３】
前記取り消し可能な有界ポインタは、前記第１のトークン値を格納するように構成され、
前記取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するための前記リクエストに応答して、前記使用認可チェックは、前記ヘッダ位置を決定するため、及び前記取り消し可能な有界ポインタ内に格納された前記第１のトークン値と前記ヘッダの前記第１のトークン・フィールド内の前記格納値との間に一致がない場合に前記取り消し可能な有界ポインタを無効にするために前記範囲情報を採用するように構成される、請求項２に記載の装置。
【請求項４】
前記第１のトークン値を生成するためのトークン生成回路をさらに備える、請求項１から３までのいずれかに記載の装置。
【請求項５】
前記トークン生成回路は、疑似乱数生成器である、請求項４に記載の装置。
【請求項６】
前記有界ポインタ生成回路は、それぞれ生成された有界ポインタ内に取り消し可能フィールドを提供するようにさらに構成され、前記取り消し可能フィールドは前記生成された有界ポインタが前記取り消し可能な有界ポインタである場合にセットされる、請求項１から５までのいずれかに記載の装置。
【請求項７】
有界ポインタ・レジスタのセットをさらに備え、それぞれの有界ポインタ・レジスタはメモリ・アドレスを生成することにおける使用のための有界ポインタを格納するように構成される、請求項１から６までのいずれかに記載の装置。
【請求項８】
前記ヘッダは前記メモリ領域に関連付けられる第２のトークン値を格納するように構成される第２のトークン・フィールドをさらに備え、前記第２のトークン値は前記有界ポインタ生成回路によって生成された前記取り消し可能な有界ポインタには存在せず、
前記第２のトークン値が変更されていると判断される場合、前記使用認可チェックは前記取り消し可能な有界ポインタを無効にするようにさらに構成される、請求項３に従属する場合の請求項７に記載の装置。
【請求項９】
前記有界ポインタ・レジスタのセットに関連して提供される追加的な記憶装置をさらに備え、前記取り消し可能な有界ポインタが選択された有界ポインタ・レジスタに格納される場合、前記追加的な記憶装置は前記選択された有界ポインタ・レジスタに関連して、前記ヘッダの前記第２のトークン・フィールド内で初期化された前記第２のトークン値を特定するように構成され、
前記使用認可チェックは、前記選択された有界ポインタ・レジスタに格納された前記取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するための前記リクエストにさらに応答して、前記ヘッダ内に格納された前記第２のトークン値と、前記選択された有界ポインタ・レジスタに関連する前記追加的な記憶装置内に格納された前記第２のトークン値との間に一致がない場合に前記取り消し可能な有界ポインタを無効にする、請求項８に記載の装置。
【請求項１０】
前記追加的な記憶装置は、前記装置で実行中の１つ又は複数のタイプのソフトウェアにアクセスすることができない、請求項９に記載の装置。
【請求項１１】
前記ヘッダの前記第１のトークン・フィールド及び前記第２のトークン・フィールドのうち少なくとも１つに対して、いつ書き込み動作がなされたかを特定するための通知メカニズムをさらに備え、それにより前記第１のトークン値又は前記第２のトークン値のいずれかが変更されている場合に前記取り消し可能な有界ポインタを無効にするために前記使用認可チェックを可能にする、請求項８に記載の装置。
【請求項１２】
前記メモリ割り当て回路は、前記続いて起こる前記メモリ領域の解放に応答して、前記ヘッダの前記第２のトークン・フィールド内に格納される前記値を修正する、請求項８から１１までのいずれかに記載の装置。
【請求項１３】
前記トークン生成回路は前記第２のトークン値を生成するようさらに構成される、請求項４に従属する場合の請求項８から１２までのいずれかに記載の装置。
【請求項１４】
前記ヘッダは、前記取り消し可能な有界ポインタの一部分の複製を格納するように構成され、
前記装置は、前記取り消し可能な有界ポインタが前記選択された有界ポインタ・レジスタから前記メモリに格納される際、前記取り消し可能な有界ポインタの前記部分を前記第２のトークン値を使用して、前記取り消し可能な有界ポインタの前記部分が前記第２のトークン値及び前記エンコードされた取り消し可能有界ポインタを使用して再作成されることを可能にするやり方でエンコードすることによりエンコードされた取り消し可能有界ポインタを作成するためにエンコード演算を実施し、その後前記エンコードされた取り消し可能有界ポインタを前記メモリに格納するように構成される、コーディング制御回路を備える、請求項８から１３までのいずれかに記載の装置。
【請求項１５】
前記取り消し可能な有界ポインタの前記部分は、前記メモリ領域の現在割り当てられているインスタンスのために生成されたあらゆる有界ポインタに共通の部分である、請求項１４に記載の装置。
【請求項１６】
前記部分は、前記ヘッダ位置を特定するために必要とされない前記範囲情報の少なくとも一部分を含む、請求項１５に記載の装置。
【請求項１７】
前記範囲情報は、前記メモリ領域についてのベース・アドレス及びリミット・アドレスを含み、前記ヘッダ位置は、前記ベース・アドレス及び前記リミット・アドレスのうちの１つを使用して決定され、複製が前記ヘッダに格納される前記取り消し可能な有界ポインタの前記部分は前記ベース・アドレス及び前記リミット・アドレスのうちのもう一方を特定する、請求項１６に記載の装置。
【請求項１８】
複製が前記ヘッダに格納される前記取り消し可能な有界ポインタの前記部分は、前記取り消し可能な有界ポインタ内で指定される少なくとも１つ又は複数のパーミッションを含む、請求項１４から１７までのいずれかに記載の装置。
【請求項１９】
前記コーディング制御回路は、前記ヘッダの前記第２のトークン・フィールドに格納された前記値を使用して前記取り消し可能な有界ポインタの前記エンコードされた部分をデコードするためのデコード演算を実施することによって、前記エンコードされた取り消し可能有界ポインタをデコードして、前記取り消し可能な有界ポインタの再作成された部分を作り出し、次いで前記取り消し可能な有界ポインタの前記再作成された部分が、前記ヘッダに格納された前記取り消し可能な有界ポインタの前記複製された部分に一致するかどうかを判断するためのチェック動作を実施するように構成される、請求項１４から１８までのいずれかに記載の装置。
【請求項２０】
前記コーディング制御回路は、
前記チェック動作が前記取り消し可能な有界ポインタの前記再作成された部分が前記ヘッダに格納された前記取り消し可能な有界ポインタの前記複製された部分とは異なっていることを示す場合、又は
前記デコードされた取り消し可能な有界ポインタの前記第１のトークン値が前記ヘッダの前記第１のトークン・フィールド内の前記格納値とは異なっていることを示す場合、
のいずれかの場合、前記取り消し可能な有界ポインタを無効にするように構成される、請求項１９に記載の装置。
【請求項２１】
前記コーディング制御回路は、エンコードされた取り消し可能有界ポインタが前記メモリから前記有界ポインタ・レジスタのうちの１つにロードされる時はいつでも前記デコード演算を実施するように構成される、請求項１９又は２０に記載の装置。
【請求項２２】
それぞれの有界ポインタは、取り消し可能な有界ポインタがいつエンコードされたか示すようにセットされるエンコード・フィールドを含み、
エンコードされた取り消し可能有界ポインタは前記取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用されるのに先立って前記コーディング制御回路によってデコードされるよう要求される、請求項１９又は２０に記載の装置。
【請求項２３】
前記ヘッダ位置は、
前記割り当てられたメモリ領域の直前の一連のメモリ・アドレス、又は前記割り当てられたメモリ領域より固定オフセット前の一連のメモリ・アドレス、
前記割り当てられたメモリ領域の直後の一連のメモリ・アドレス、又は前記割り当てられたメモリ領域より固定オフセット後の一連のメモリ・アドレス、
前記メモリ領域のアドレスに基づく計算の実施により決定される位置における一連のメモリ・アドレス、
のうちの１つであるように、前記メモリ領域に対して構成される、請求項１から２２までのいずれかに記載の装置。
【請求項２４】
前記ヘッダ位置は、前記装置で実行中の１つ又は複数のタイプのソフトウェアによって非アドレッシング可能なメモリの部分内にある、請求項１から２３までのいずれかに記載の装置。
【請求項２５】
前記ヘッダは前記取り消し可能な有界ポインタのどのビットが前記ヘッダ内に格納される前記取り消し可能な有界ポインタの前記複製された部分を形成するために使用されたか、を特定する制御フィールドを含む、請求項１４に従属する場合の請求項１５から２４までのいずれかに記載の装置。
【請求項２６】
前記ヘッダの前記第１のトークン・フィールド内の前記格納値の複製を維持するように構成されるキャッシュ構造をさらに備え、前記第１のトークン・フィールド内の前記格納値が変更されていると判断する場合、前記使用認可チェックは前記キャッシュ構造に維持される前記複製を参照するように構成される、請求項１から２５までのいずれかに記載の装置。
【請求項２７】
前記装置は、前記取り消し可能な有界ポインタをさらなる装置に提供するように構成し、前記さらなる装置によって前記メモリ領域へのアクセスを制御し、前記さらなる装置は前記使用認可チェックを実施するように構成され、それにより前記装置が前記メモリ領域を解放した後、前記さらなる装置はメモリ・アドレスを生成するための前記取り消し可能な有界ポインタのさらなる使用を妨げられる、請求項１から２６までのいずれかに記載の装置。
【請求項２８】
メモリ内でメモリ領域を割り当てるためのメモリ割り当て回路と、有界ポインタを生成するための有界ポインタ生成回路とを有する装置内の有界ポインタの使用を制御するための方法であって、前記方法は、
前記有界ポインタ生成回路を、前記メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを生成するよう構成することであって、前記取り消し可能な有界ポインタは、ポインタ値及び前記メモリ領域のアドレス範囲を特定する範囲情報を与える、構成することと、
前記メモリのヘッダ位置において前記メモリ領域用のヘッダを提供することであって、前記ヘッダは格納値が前記メモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有し、前記ヘッダ位置は、前記取り消し可能な有界ポインタによって与えられる前記範囲情報から導出可能である、提供することと、
前記メモリ割り当て回路に、続いて起こる前記メモリ領域の解放に応答して、前記ヘッダの前記第１のトークン・フィールド内の前記格納値を修正させることと、
前記取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、前記第１のトークン・フィールド内の前記格納値が変更されていると判断される場合、使用認可チェックに前記メモリ・アドレスの生成を妨げさせることと
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技法はデータ処理の分野に関する。
【背景技術】
【０００２】
一部のデータ処理装置は、特定のアドレスを示しているポインタが、そのポインタについてアドレスの許容範囲を示す範囲情報に関連付けられている有界ポインタをサポートする場合がある。例えば、そのようなポインタを「ファット・ポインタ」と称することがある。
【０００３】
範囲情報に加え、そのような有界ポインタは、ポインタの使用に対して１つ又は複数のリストリクション／パーミッションを定義する他の関連付けられる属性を有することもできる。したがって、そのような有界ポインタの使用は、有界ポインタによって指定されたポインタ値がどのように使用されるかに対して制約を課すことにより、強固なセキュリティを与えることができる。
【０００４】
例えば、あるメモリ領域が特定のプロセスによって使用することができるように、そのメモリ領域がメモリ内で割り当てられる際、割り当てられたメモリ・エリアに関連する使用のために１つ又は複数の有界ポインタを確立することができる。そのような有界ポインタは、割り当てられたメモリ領域のアドレス範囲を特定する範囲情報を含むことができる。プロセスが有界ポインタを使用してメモリ・アドレスを生成しようと試みる際、割り当てられたメモリ領域のアドレス範囲内に含まれるメモリ・アドレスだけを生成するように制約される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
生じ得る課題としては、メモリ領域が後に解放され、再割り当てのためにそのメモリ空間を使える状態にする時に、処理回路にとって有界ポインタがまだ利用可能であることが挙げられる。関連付けられるメモリ領域が解放されてしまった後の、そのような有界ポインタの潜在的な使用は、「ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ」問題と称される。特に、関連付けられるメモリ領域が解放されてしまった後の有界ポインタの使用は、もしその使用がプログラミング・エラーのために生じる場合は、ソフトウェアの未定義の振る舞いを引き起こすことがある。追加的に、有界ポインタのそのような使用が、セキュリティ攻撃者によって引き起こされる意図的なアクションとして生じる場合、これは潜在的に情報のセキュリティ・リーク及び／又はリモート・コード実行につながり得る。
【０００６】
したがって、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ問題を軽減するための技法を提供することが望ましい。
【課題を解決するための手段】
【０００７】
一実例の構成において、装置であって、メモリ内でメモリ領域を割り当てるためのメモリ割り当て回路と、メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを含む有界ポインタを生成するための有界ポインタ生成回路であって、取り消し可能な有界ポインタは、ポインタ値及びメモリ領域のアドレス範囲を特定する範囲情報を与える、有界ポインタ生成回路とを備え、メモリ割り当て回路は、メモリのヘッダ位置においてメモリ領域用のヘッダを提供するように構成され、ヘッダは格納値がメモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有し、ヘッダ位置は、取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であり、メモリ割り当て回路は、続いて起こるメモリ領域の解放に応答して、ヘッダの第１のトークン・フィールド内の格納値を修正し、それにより、取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、第１のトークン・フィールド内の格納値が変更されていると判断される場合、使用認可チェックはメモリ・アドレスの生成を妨げるよう構成される、装置が提供される。
【０００８】
さらなる実例の構成において、メモリ内でメモリ領域を割り当てるためのメモリ割り当て回路と、有界ポインタを生成するための有界ポインタ生成回路とを有する装置内の有界ポインタの使用を制御するための方法であって、方法は、有界ポインタ生成回路を、メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを生成するよう構成することであって、取り消し可能な有界ポインタは、ポインタ値及びメモリ領域のアドレス範囲を特定する範囲情報を与える、構成することと、メモリのヘッダ位置においてメモリ領域用のヘッダを提供することであって、ヘッダは格納値がメモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有し、ヘッダ位置は、取り消し可能な有界ポインタによって与えられる範囲情報から導出可能である、提供することと、メモリ割り当て回路に、続いて起こるメモリ領域の解放に応答して、ヘッダの第１のトークン・フィールド内の格納値を修正させることと、取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、第１のトークン・フィールド内の格納値が変更されていると判断される場合、使用認可チェックにメモリ・アドレスの生成を妨げさせることとを含む、方法が提供される。
【０００９】
なおさらなる実例の構成において、装置であって、メモリ内でメモリ領域を割り当てるためのメモリ割り当て手段と、メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを含む有界ポインタを生成するための有界ポインタ生成手段であって、取り消し可能な有界ポインタは、ポインタ値及びメモリ領域のアドレス範囲を特定する範囲情報を与える、有界ポインタ生成手段とを備え、メモリ割り当て手段は、メモリのヘッダ位置においてメモリ領域用のヘッダを提供するように構成され、ヘッダは格納値がメモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有し、ヘッダ位置は、取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であり、メモリ割り当て手段は、続いて起こるメモリ領域の解放に応答して、ヘッダの第１のトークン・フィールド内の格納値を修正し、それにより、取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、第１のトークン・フィールド内の格納値が変更されていると判断される場合、使用認可チェックはメモリ・アドレスの生成を妨げるよう構成される、装置が提供される。
【００１０】
本技法は、その実例を参照して添付の図面に図示されるように、単に例示としてさらに説明される。
【図面の簡単な説明】
【００１１】
【図１】一実例による、装置のブロック図である。
【図２】有界ポインタ格納要素のセット内でポインタ値の設定又はポインタ値へのアクセスが試行される場合、エラーがトリガされ得、関連付けられる範囲情報によって示される範囲の外のアドレスを指定するためにそのポインタ値が使用される、命令のタイプの実例の図である。
【図３】一実例による、有界ポインタに関連付けられるタグ・ビットの使用を示す図である。
【図４】一実例による、メモリ割り当てプロセスを図示するフロー図である。
【図５】一実例による、有界ポインタ作成動作を図示するフロー図である。
【図６】一実例による、メモリ解放プロセスを図示するフロー図である。
【図７Ａ】一実例の配置構成による、割り当てられたメモリ領域、メモリ領域用の例示のヘッダ・フォーマット、及び生成された有界ポインタの概略図である。
【図７Ｂ】一実例の配置構成による、割り当てられたメモリ領域、メモリ領域用の例示のヘッダ・フォーマット、及び生成された有界ポインタの概略図である。
【図７Ｃ】一実例の配置構成による、割り当てられたメモリ領域、メモリ領域用の例示のヘッダ・フォーマット、及び生成された有界ポインタの概略図である。
【図８】一実例において実施される使用認可チェック動作を図示するフロー図である。
【図９】一実例の配置構成により実施され得るエンコード演算を図示するフロー図である。
【図１０】一実例の配置構成により実施され得るデコード演算を図示するフロー図である。
【図１１】一実例の配置構成による、有界ポインタのエンコード及びデコードの概略図である。
【図１２Ａ】実施され得る例示のエンコード演算の概略図である。
【図１２Ｂ】実施され得る例示のエンコード演算の概略図である。
【図１３】一実例の配置構成による、関連付けられるメモリ領域が解放されるまで、第１の装置によって生成された取り消し可能な有界ポインタが、第２の装置による使用のために、その第２の装置に渡される場合の、実例の使用事例の図である。
【発明を実施するための形態】
【００１２】
一部の処理装置は有界ポインタの使用をサポートすることができる。ポインタ自身は、例えば、アクセスされるデータ値又は実行される命令のアドレスを指し示すことができるか、又はそのようなアドレスを決定するために使用することができる。しかしながら、ポインタは、ポインタを使用する際アドレスの許容可能な範囲を示す関連付けられる範囲情報を有することもできる。これは、例えば、ポインタから決定されたアドレスが一定の境界内に留まり、振る舞いのセキュリティ又は機能的な正常性を維持することを保証するために有用であり得る。例えば、所与の処理についてある機能が定義され、定義された機能以外の動作を実行するような試行があるとエラーをトリガすることができる機能ベースのアーキテクチャに対する興味が高まっている。有界ポインタ用の範囲情報は、そのようなアーキテクチャのために定義される機能情報の一部であり得、機能ベースのアーキテクチャ内でそのような有界ポインタ（その関連付けられる機能情報を含む）は、機能と称することができる。
【００１３】
したがって、装置は、ポインタを使用する際、許容可能なアドレスの範囲を示す関連付けられた範囲情報を有するポインタを記憶するために使用される有界ポインタ記憶要素を含むことができる。それぞれの有界ポインタ記憶要素は、汎用メモリ内のレジスタ又はメモリ位置、例えば、スタック・メモリ上の位置であり得る。
【００１４】
ある命令を使用して、ポインタを取得するために、そのような有界ポインタ記憶要素を参照することができ、次いでポインタは命令の動作中に必要とされるメモリ内のアドレスを導出するために使用される。ポインタはメモリ・アドレスを直接特定するために使用することができ、又は例えば、ポインタ値へオフセットを加算することによってメモリ・アドレスを導出するために使用することができる。
【００１５】
一実例の実装形態において、そのような有界ポインタは特定の割り当てられたメモリ領域に関連付けられる。したがって、例えば特定のプロセスによる使用のためなど、いったんメモリ領域が割り当てられてしまうと、そのメモリ領域にアクセスする際に使用するために１つ又は複数の有界ポインタを作成することができ、そして有界ポインタに関連付けられる範囲情報はメモリ領域を形成するメモリ・アドレスの範囲を特定する。メモリ領域内のアドレスにアクセスすることが望ましい場合は、そのような有界ポインタを参照していつでもそのメモリ・アドレスを生成することができ、有界ポインタの使用により、あらゆる生成されたメモリ・アドレスがメモリ領域を形成する許容可能なメモリ・アドレスの範囲内にあるよう制約されることを保証する。特に、有界ポインタが割り当てられたメモリ領域の外でメモリ・アドレスを生成するために使用される場合、フォールトが検出され、アクセスが進行することを妨げられる。
【００１６】
これはセキュリティを向上させる上で非常に有用である一方で、先に言及したように、有界ポインタが、関連付けられるメモリ領域が続けて解放された後アクセス可能なままとなる「ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ」問題を生じることがある。プログラミング・エラーに起因してそのような有界ポインタの使用が発生する場合、これはソフトウェアの未定義の振る舞いにつながることがある。別の実例として、その使用がセキュリティ攻撃者によって引き起こされる意図的なアクションとして生じる場合、これは潜在的に情報のセキュリティ・リーク及び／又はリモート・コード実行につながり得る。したがって、有界ポインタが、関連付けられるメモリ領域が解放された後に使用されることを妨げることが望ましいであろう。本明細書において説明される技法は、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ状況が起こる可能性を大きく低減させるメカニズムを提供することを目的としている。
【００１７】
一実例の配置構成において、メモリ内でメモリ領域を割り当てるためのメモリ割り当て回路と、有界ポインタを生成するための有界ポインタ生成回路とを備える装置が提供される。特に、有界ポインタ生成回路は、メモリ領域へのアクセスにおける使用のための少なくとも１つの取り消し可能な有界ポインタを生成するよう構成され、取り消し可能な有界ポインタは、ポインタ値及びメモリ領域のアドレス範囲を特定する範囲情報を与える。
【００１８】
加えて、メモリ割り当て回路（専用のハードウェア又は汎用プロセッサ上で実行するソフトウェアによって形成することができる）は、メモリのヘッダ位置においてメモリ領域用のヘッダを提供するように構成され、ヘッダは格納値がメモリ領域に関連付けられる第１のトークン値に初期化される第１のトークン・フィールドを有する。ヘッダ位置は、取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であり、ひいては有界ポインタが使用される際ヘッダを配置できるようにしており、それにより取り消し可能な有界ポインタを使用させるのに先立って、ヘッダを参照してハードウェアでチェックを行うことを可能にしている。
【００１９】
メモリ割り当て回路は続いて起こるメモリ領域の解放に応答して、ヘッダの第１のトークン・フィールド内の格納値を修正し、その結果として第１のトークン値をもはや格納していない。
【００２０】
取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、第１のトークン・フィールド内の格納値が変更されていると判断される場合、使用認可チェックはメモリ・アドレスの生成を妨げるよう構成される。
【００２１】
そのような手法によって、取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用される時に、ヘッダの第１のトークン・フィールド内の格納値が修正されている場合は、使用認可チェックがアクセスを妨げる。これは、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ状況が起こる可能性を大きく阻害する単純で効果的なメカニズムを提供し得ることが見出されている。
【００２２】
使用認可チェックがメモリ・アドレスの生成を妨げることができる多くの方法がある。一実例の実装形態において、使用認可チェックは、第１のトークン・フィールド内の格納値が変更されていると判断される場合、取り消し可能な有界ポインタを無効にするように構成され、それによりメモリ・アドレスが生成されることを妨げる。
【００２３】
使用認可チェックがヘッダの第１のトークン・フィールド内の格納値が修正されているどうかを判断できるやり方は、実装形態に応じて変わることができる。しかしながら、一実例において、取り消し可能な有界ポインタは、第１のトークン値を格納するように構成され、取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストに応答して、使用認可チェックは、ヘッダ位置を決定するため、及び取り消し可能な有界ポインタ内に格納された第１のトークン値とヘッダの第１のトークン・フィールド内の格納値との間に一致がない場合に取り消し可能な有界ポインタを無効にするために範囲情報を採用するように構成される。
【００２４】
そのような手法によって、取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用される時、取り消し可能な有界ポインタ内に与えられた第１のトークン値がヘッダの第１のトークン・フィールドの内容にまだ一致するかどうか判断するためにハードウェアでチェックを行うことができる。上の議論から明らかなように、メモリ領域の解放後、これはもはや当てはまらず、したがって関連付けられるメモリ領域が解放された後に取り消し可能な有界ポインタを使用する試行がなされる状況が検出され得、この時点で取り消し可能な有界ポインタは、その取り消し可能な有界ポインタの使用を妨げるよう無効にされることができ、ひいてはリクエストされたアクセスが行われることを妨げる。
【００２５】
代替的な実装形態において、第１のトークン値は取り消し可能な有界ポインタそれ自身内で再現することはできず（例えば、取り消し可能な有界ポインタ内に第１のトークン値を収容するための十分な空きがないことに起因して）、他のメカニズムを使用してヘッダの第１のトークン・フィールド内の格納値がいつ修正されたかを検出することができる。そのような実装形態において、第１のトークン値は本明細書において後に第２のトークン値と称されるトークン値の形態を取ることができ、そのトークン値における修正の検出は本明細書において第２のトークン値に関して後に詳細に議論するのと同一の方法で行うことができる。
【００２６】
第１のトークン値は様々な方法で生成することができるが、一実例の実装形態において、装置は第１のトークン値を生成するためのトークン生成回路をさらに備える。特定の一実例において、トークン生成回路は疑似乱数生成器であり、この時第１のトークン値は割り当てられたメモリ領域及び関連付けられている取り消し可能な有界ポインタに関する使用のために生成された疑似乱数である。
【００２７】
いくつかの実装形態において、有界ポインタ生成回路は上述の取り消し可能な有界ポインタだけでなく、第１のトークン値を利用しない他の有界ポインタも生成するように構成することができる。異なるタイプの有界ポインタを区別することを支援するために、有界ポインタ生成回路は、それぞれ生成された有界ポインタ内に取り消し可能フィールドを提供するように構成され、取り消し可能フィールドは生成された有界ポインタが取り消し可能な有界ポインタである場合にセットされる。取り消し可能フィールドがセットされ、また有界ポインタがメモリ・アドレスを生成するために使用される場合、取り消し可能な有界ポインタが使用されるのに先立って上述の使用認可チェックをハードウェアで実施することができ、この時取り消し可能な有界ポインタによって与えられる第１のトークン値と関連付けられるメモリ領域用のヘッダの第１のトークン・フィールド内の格納値との間に一致がない場合、取り消し可能な有界ポインタは無効にされる。
【００２８】
有界ポインタはシステム内の様々な場所に格納することができる。一実例の配置構成において、装置は有界ポインタ・レジスタのセットを備え、それぞれの有界ポインタ・レジスタはメモリ・アドレスを生成することにおける使用のための有界ポインタを格納するように構成される。装置の処理回路が命令を実行しており、これらの命令の実行がメモリ・アドレスが有界ポインタを使用して生成されることを要求する場合、有界ポインタ・レジスタのうち指定された１つの内部で関連する有界ポインタにアクセスすることができる。有界ポインタ・レジスタは、有界ポインタを格納するための専用のレジスタ、又は有界ポインタを含む様々なタイプのデータを格納することができる汎用レジスタであることができる。
【００２９】
一実例において、有界ポインタは有界ポインタ・レジスタとメモリとの間を移動することができ、或いは実際にはレジスタからメモリに複製されるか、又はその逆であり、そのためすべての有界ポインタがあらゆる特定の時点で有界ポインタ・レジスタのうちの１つに存在するわけではない。
【００３０】
第１のトークン値が取り消し可能な有界ポインタ内に格納される実装形態において、第１のトークン値のサイズは取り消し可能な有界ポインタ内で第１のトークン値を保持するために利用可能な空間によって制約される。特に、一実例の配置構成において、第１のトークン値はそうでなければ使用されない有界ポインタの一部に配置される。いくつかの実装形態において、有界ポインタ内に格納され得る第１のトークン値のサイズは「ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅ」状況に対する十分なレベルの保護を与えることができる。しかしながら、トークン値へ割り当てられるビット数が大きくなればなるほどｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオに対するメカニズムが堅牢となる。例えば、特定のメモリ領域で使用するためのランダムなトークン値が生成される場合、トークン値が大きくなればなるほど、有界ポインタがまだアクティブであり得る同一のトークン値が先に割り当てられた別のメモリ領域で使用するために生成される見込みは小さくなり、それにより、先に割り当てられたメモリ領域が解放された後に、その既存の有界ポインタが後に割り当てられるメモリ領域にアクセスするために使用される可能性は小さくなる（これは事実上、妨げられることが望ましい別のタイプのｕｓｅ−ａｆｔｅｒ−ｆｒｅｅアクセスである）。
【００３１】
一実例の実施例において、効果的なトークンのサイズを大きくすることが望ましい場合、第２のトークン値を第１のトークン値と組み合わせて使用することができ、ヘッダは第１のトークン値及び第２のトークン値の両方を保持するが、第２のトークン値自身は、その第２のトークン値を収容するための空間の欠如のため、取り消し可能な有界ポインタ内に与えられない。
【００３２】
特に、一実例の配置構成において、ヘッダはメモリ領域に関連付けられる第２のトークン値を格納するように構成される第２のトークン・フィールドをさらに備え、第２のトークン値は有界ポインタ生成回路によって生成された取り消し可能な有界ポインタにはなく、第２のトークン値が変更されていると判断される場合、使用認可チェックは取り消し可能な有界ポインタを無効にするように構成される。
【００３３】
使用認可チェックが、第２のトークン値がいつ変更されたかを判断することができる方法は複数ある。例えば、一実装形態において、装置は有界ポインタ・レジスタのセットに関連して提供される追加的な記憶装置を備え、取り消し可能な有界ポインタが選択された有界ポインタ・レジスタに格納される場合、追加的な記憶装置は選択された有界ポインタ・レジスタに関連して、ヘッダの第２のトークン・フィールド内で初期化された第２のトークン値を特定するように構成される。したがって、そのような実装形態によると、第２のトークン値はヘッダ領域に格納され、追加的な記憶装置は有界ポインタのセットに関連して提供され、そのため取り消し可能な有界ポインタが有界ポインタ・レジスタのうちの１つに格納される場合、追加的な記憶装置はそれに関連して第２のトークン値を維持することができ、したがって、第１及び第２のトークン値の両方をヘッダ内に保持される対応する値と比較することができるように先に議論した使用認可チェックを拡張することができ、これらのトークン値のいずれかがヘッダ内の対応する値と一致しない場合は取り消し可能な有界ポインタを無効にすることができる。
【００３４】
したがって、そのような一実例の配置構成において、使用認可チェックは選択された有界ポインタ・レジスタに格納された取り消し可能な有界ポインタを使用してメモリ・アドレスを生成するためのリクエストにさらに応答して、ヘッダ内に格納された第２のトークン値と、選択された有界ポインタ・レジスタに関連する追加的な記憶装置内に格納された第２のトークン値との間に一致がない場合に取り消し可能な有界ポインタを無効にする。したがって、先に言及したように、取り消し可能な有界ポインタを使用し続けるべきか、取り消すべきかどうか判断する際、第１のトークン値及び第２のトークン値の両方を参照することができる。
【００３５】
追加的な記憶装置は様々な方法で設けることができる。例えば、追加的な記憶装置内に格納されるそれぞれの第２のトークン値を有界ポインタ・レジスタのうちの特定の１つに関連付けるメカニズムがあるとすれば、有界ポインタ・レジスタのセットを提供する記憶装置とは物理的に別個であってもよい。代替的に、追加的な記憶装置は、有界ポインタ・レジスタのセットを提供する同一の記憶装置構造体によって設けることができ、追加的な記憶装置が有界ポインタ・レジスタのそれぞれに拡張を与え、有界ポインタをそこに記憶するだけでなく、第２のトークン値に関連付けることを可能にしているとみなすことができる。
【００３６】
セキュリティを向上させるため、また特に第２のトークン値が改竄される潜在的なリスクを軽減させるため、追加的な記憶装置は装置で実行中の１つ又は複数のタイプのソフトウェアにアクセスできないように構成することができる（一実装形態において、これは装置で実行中のすべてのソフトウェアであり得る）。したがって、追加的な記憶装置はハードウェア制御の直下にポピュレートされ、使用認可チェックを実施する際ハードウェアによって参照される。
【００３７】
代替的な実装形態において、追加的な記憶装置は要求されないこともある。例えば、装置はヘッダの第１のトークン・フィールド及び第２のトークン・フィールドのうち少なくとも１つに対して、書き込み動作がいつなされたかを特定するための通知メカニズムを備え、それにより第１のトークン値又は第２のトークン値のいずれかが変更されている場合に取り消し可能な有界ポインタを無効にするために使用認可チェックを可能にする。通知メカニズムは様々な形態を取ることができるが、一実装形態において、キャッシュ・コヒーレンシ・プロトコルに基づいており、ヘッダは装置のキャッシュ内でキャッシュされる。
【００３８】
第１のトークン及び第２のトークンの両方を採用するいくつかの実装形態において、続いて起こるメモリ領域の解放において、メモリ割り当て回路は、ヘッダの第１のトークン・フィールドに格納される値を修正するだけでなく、ヘッダの第２のトークン・フィールドに格納される値を修正するように構成することができるため、その後は第１のトークン値も第２のトークン値も、メモリ領域が解放された後に取り消し可能な有界ポインタに関連して維持される情報に一致するべきではない。
【００３９】
第２のトークン値は様々な方法で生成することができるが、一実装形態では、第１のトークン値を生成するようにも構成されるトークン生成回路を使用して生成される。したがって、一実例の実装形態において、第２のトークン値はやはりメモリ領域に関連して使用するために生成される疑似乱数である。
【００４０】
第１のトークン値に加えて第２のトークン値が使用される実装形態においては、取り消し可能な有界ポインタが有界ポインタ・レジスタからメモリに格納し戻される場合、第２のトークン値を示す情報をどのように維持するかという問題が生じる。先に言及したように、第２のトークン値自身は取り消し可能な有界ポインタの部分を形成せず、したがって取り消し可能な有界ポインタがメモリに格納される際、第２のトークン値はメモリに格納される取り消し可能な有界ポインタの部分を形成しない。一実例の実装形態によると、この問題はエンコード演算の使用により対処される。
【００４１】
特に、一実装形態において、ヘッダは、取り消し可能な有界ポインタの一部分の複製を格納するように構成され、装置は、取り消し可能な有界ポインタが選択された有界ポインタ・レジスタからメモリに格納される際、取り消し可能な有界ポインタの部分を第２のトークン値を使用して、取り消し可能な有界ポインタの部分が第２のトークン値及びエンコードされた取り消し可能有界ポインタを使用して再作成されることを可能にするやり方でエンコードすることによりエンコードされた取り消し可能有界ポインタを作成するためにエンコード演算を実施し、その後エンコードされた取り消し可能有界ポインタをメモリに格納するように構成される、コーディング制御回路をさらに備える。したがって、取り消し可能な有界ポインタはエンコードされた形態でメモリ内に格納される。後に、エンコードされた形態はメモリから取り出し、有界ポインタ・レジスタに格納するのに先立ってデコードすることができる。デコード演算が成功したとすると（ヘッダ内に格納される取り消し可能な有界ポインタの部分の複製に一致するデコードされた部分を作り出すために、ヘッダ内の第２のトークン値を使用して取り消し可能な有界ポインタのエンコードされた部分をデコードすることを必要とする）、デコードされる取り消し可能な有界ポインタを、先の使用認可チェックをパスすれば、続いて起こるメモリのアクセス動作に使用することができる。
【００４２】
ヘッダ内に格納される取り消し可能な有界ポインタの部分の複製があらゆる適切なフォーマットで記憶され得ることを了解されたい。したがって、取り消し可能な有界ポインタ内で使用される元々のフォーマットで記憶することができるが、所望であれば代替的に異なるフォーマットで記憶することができる（例えば、取り消し可能な有界ポインタに格納される対応するビットの、ビット方向に反転したバージョンとして記憶することができる）。
【００４３】
第１のトークン値は追加的に所望であればエンコード演算の間使用することができ、その場合、やはり対応するデコード演算を実施する際に参照される。
【００４４】
ヘッダ内に格納された複製を有する取り消し可能な有界ポインタの部分は様々な形態を取ることができるが、一実例の実装形態において、メモリ領域の現在の割り当てられたインスタンスのために生成されたあらゆる有界ポインタに共通する一部である。取り消し可能な有界ポインタ内には、メモリ領域の現在の割り当てられたインスタンスのために生成されたあらゆる有界ポインタに共通する、複数のフィールドが存在することになる。これは、例えば、メモリ領域の範囲を特定するために使用される範囲情報を含むが、一定のパーミッション・ビットも含むことができる。特定の一実例において、複製がヘッダ内に格納される取り消し可能な有界ポインタの部分は、ヘッダ位置を特定するために必要とされない範囲情報の少なくとも一部分を含む。ヘッダ位置を特定するために必要とされない範囲情報の一部を排除することにより、これは必要とされるデコード演算を実施するのに先立ってヘッダ位置を特定できるようにする。
【００４５】
範囲情報は様々な形態を取ることができるが、一実装形態において、メモリ領域についてのベース・アドレス及びリミット・アドレスを含み、ヘッダ位置は、ベース・アドレス及びリミット・アドレスのうちの１つを使用して決定され、複製がヘッダに格納される取り消し可能な有界ポインタの部分はベース・アドレス及びリミット・アドレスのうちのもう一方を特定する。
【００４６】
先に言及したように、複製がヘッダ内に格納される取り消し可能な有界ポインタの部分は、他の情報、例えば取り消し可能な有界ポインタ内で指定される少なくとも１つ又は複数のパーミッションを示す情報を含むこともできる。実際、具体的な一実装形態において、例えばエンコード／デコード演算においてパーミッション・ビットだけがエンコード／デコードされる場合、ヘッダ内に複製が格納されるのはパーミッション情報だけの場合がある。
【００４７】
この時、コーディング制御回路は、ヘッダの第２のトークン・フィールドに格納された値（及び、第１のトークン値もエンコード演算に使用された場合は、第１のトークン・フィールドに格納された値）を使用して取り消し可能な有界ポインタのエンコードされた部分をデコードするためのデコード演算を実施することによって、取り消し可能有界ポインタをデコードして、取り消し可能な有界ポインタの再作成された部分を作り出し、次いで取り消し可能な有界ポインタの再作成された部分が、ヘッダに格納された取り消し可能な有界ポインタの部分の複製に一致するかどうかを判断するためのチェック動作を実施するように構成することができる。特に、エンコードされていない範囲情報の部分を使用してヘッダ位置を特定することができ、ひいてはヘッダの内容を取り出せるようにしており、その後第２のトークン・フィールド（任意選択で第１のトークン・フィールドも）に格納された値を使用して取り消し可能な有界ポインタのエンコードされた部分をデコードすることができる。第２のトークン・フィールド内に格納された値がなお第２のトークン値である（また、第１のトークンもエンコード／デコードのプロセスに使用されている場合は、第１のトークン・フィールドに格納された値がなお第１のトークン値である）とすると、再作成された部分はまだヘッダに格納された取り消し可能な有界ポインタの複製された部分に一致するべきである。しかしながら、例えば関連付けられるメモリ領域が解放されているためなど、ヘッダが変更されている場合、デコード演算はヘッダ内に格納された取り消し可能な有界ポインタの複製された部分に一致する取り消し可能な有界ポインタの再作成された部分を作り出さない。そのような状況が生じる場合、コーディング制御回路は取り消し可能な有界ポインタを無効にするように構成することができる。加えて、一実装形態において、いったん取り消し可能な有界ポインタがデコードされてしまうと、取り消し可能な有界ポインタ内の第１のトークン値がヘッダの第１のトークン・フィールド内の格納値に一致することを確実にするためにチェックがやはり実施され、これに当てはまらない場合、取り消し可能な有界ポインタはやはり無効にされる。
【００４８】
デコード演算は様々な理由でトリガされることがある。一実例の実装形態において、コーディング制御回路は、エンコードされた取り消し可能有界ポインタがメモリから有界ポインタ・レジスタのうちの１つにロードされる時はいつでもデコード演算を実施するように構成される。したがって、そのような実装形態において、取り消し可能な有界ポインタは、メモリに格納される時はいつもエンコードされ、メモリから有界ポインタ・レジスタに取り出される時はいつもデコードされる。
【００４９】
しかしながら、代替的な実装形態において、エンコードされた取り消し可能有界ポインタを、それをデコードすることなく、有界ポインタ・レジスタに取り出すことも可能である。例えば、これにより有界ポインタがデコードのステップ及び対応するエンコードのステップを実施することを要求することなく、メモリ位置同士で複製できる。しかしながら、そのような実装形態において、エンコードされた有界ポインタをメモリ・アクセス動作を実施するために使用することができないことを保証する必要がある。したがって、そのような一実装形態において、それぞれの有界ポインタは、取り消し可能な有界ポインタがいつエンコードされたかを示すようにセットされるエンコード・フィールドを含む。ひいては、これにより処理ハードウェアが、有界ポインタ・レジスタ内に格納されており、まだエンコードされた形態にある取り消し可能な有界ポインタ（したがって、メモリ・アクセスに使用することができない）と、デコードされた形態にある取り消し可能な有界ポインタ（したがって、使用認可チェックをパスすれば、潜在的にメモリ・アクセスに使用することができる）とを区別できる。
【００５０】
そのような実施例において、エンコードされた取り消し可能有界ポインタは、その取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用されるのに先立って、コーディング制御回路によってデコードされる必要がある。
【００５１】
ヘッダ位置がメモリ領域についての範囲情報から特定できるとすれば、関連付けられるメモリ領域に対するヘッダの物理的な位置は、様々な形態を取ることができる。一実例の実装形態において、ヘッダ位置は、割り当てられたメモリ領域の直前の一連のメモリ・アドレス、又は割り当てられたメモリ領域より固定オフセット前の一連のメモリ・アドレス；割り当てられたメモリ領域の直後の一連のメモリ・アドレス、又は割り当てられたメモリ領域より固定オフセット後の一連のメモリ・アドレス；メモリ領域のアドレスに基づく計算の実施により決定される位置における一連のメモリ・アドレス；のうちの１つであるように、メモリ領域に対して構成される。
【００５２】
一実装形態においてヘッダを保持するために使用される一連のメモリ・アドレスは、ソフトウェア・アドレッシング可能であり得る一方で、代替的な実装形態においては、ヘッダ位置は装置で実行中の少なくともいくつかのタイプのソフトウェアによってアドレッシング可能ではないメモリの一部分の内部にあり得る。例えば、ヘッダは非ソフトウェア・アドレッシング可能メモリ・ビットから形成することができる（例えば、ＥＣＣビットがデータ値に関連して記憶され得る方法と同様に）。所望であれば、ヘッダ位置は一定の特権を与えられたソフトウェア（カーネル、及び可能性としては適切なレベルの特権を有する１つ又は複数の他のソフトウェア・コンポーネントなど）によってアクセス可能であり得るが、低い特権を与えられたソフトウェアにはアクセスすることができない（例えば、ユーザ空間のソフトウェア）。
【００５３】
さらなる実例として、ヘッダ位置は、割り当てられたメモリ領域を含むアドレス空間とは別個のアドレス空間内で表現可能であり得る。そのような配置構成において、別個のアドレス空間はなおソフトウェアによってアドレッシング可能であり得るが、通常のアドレス空間がアドレッシングされるやり方とは異なるやり方においてである（例えば、この別個のアドレス空間をアドレッシングすることは、特殊なＣＰＵ命令を使用することを必要とすることがある）。そのような配置構成では、別個のアドレス空間内のヘッダ位置は、割り当てられたメモリ領域の範囲情報を使用して配置することができるように、さらに構成され得る。
【００５４】
ヘッダが、装置で実行中の一定のタイプのソフトウェアによってアドレッシング可能ではないメモリの一部分の内部にある場合、これはそのソフトウェアがヘッダ情報を修正するあらゆる潜在的なリスクを回避することによりさらにセキュリティを向上させることができる。
【００５５】
一実装形態において、複製がヘッダ内に格納される取り消し可能な有界ポインタの一部分は予め定めることができる。しかしながら、代替的に、取り消し可能な有界ポインタのどのビットがヘッダ内に格納される取り消し可能な有界ポインタの複製された部分を形成するために使用されたかを特定するために、ヘッダ内に制御フィールドが提供され得る。これは、先述のエンコード及びデコード演算における使用について、ヘッダ内に維持される取り消し可能な有界ポインタのビットの選択に関して構成可能性のレベルを設けることができる。特定の一実装形態において、制御フィールドは第１及び／又は第２のトークン・フィールドの一部分によって少なくとも部分的に提供され得、それによって例えば第１／第２のトークン値の第１の部分はエンコード／デコードを実施する際「暗号化鍵」として使用され、別の部分は（可能性としては第１の部分と重なる）取り消し可能な有界ポインタのどのビットがエンコード／デコードされるかを判断するための制御フィールド値として使用される。
【００５６】
使用認可チェックを実施する際、ヘッダ情報を取得するために必ずしもそのメモリがアクセスされる必要はないことに留意すべきである。例えば、装置はヘッダの第１のトークン・フィールド内の格納値の複製を維持するように構成されるキャッシュ構造をさらに備え（また任意選択で、第２のトークンを使用する実装形態では、第２のトークン・フィールド内に格納される値）、第１のトークン・フィールド内の格納値が変更されていると判断する場合、使用認可チェックはキャッシュ構造に維持される複製を参照するように構成される。現代的なデータ処理システムでは、キャッシュ・コヒーレンシ・スキームを使用して、様々なキャッシュによってシステム内に維持される内容は、そこにキャッシュされたデータの最新のバージョンを表すことを保証しており、それによってヘッダの内容がキャッシュされてあると、これらのキャッシュされた内容は、使用認可チェックが実施される時点でなお有効であり、次に第１のトークン・フィールド内の格納値が変更されているかどうかを判断するために、これらのキャッシュ内容を使用することができる。したがって、これは使用認可チェックを実施するためにかかる時間を大いに削減することができる。
【００５７】
実際、一部のシステムでは有界ポインタを使用するコア（このコアは、以下で現在のコア、と称する）が、キャッシュ・コヒーレンシ・スキームがヘッダのキャッシュされたバージョンへ更新を通知するまで、又は現在のコアがヘッダを更新するまで、使用認可チェックを実施することをすべて回避することが可能な場合がある。例えば、いったん有界ポインタが有界ポインタ・レジスタにロードされ、対応するヘッダがキャッシュ内に格納されると、キャッシュ・コヒーレンシ・スキームは有界ポインタに関連付けられるヘッダへの書き込みを追跡することができる。したがって、例えば別のコアがヘッダを含む位置に書き込みを行うと、これはコヒーレンシ無効化のリクエストを現在のコアに送信させることになり、したがって、このメカニズムにより現在のコアはヘッダの可能な変更を示すメッセージを受信する。結果として、別のコアによる更新に起因してそのようなコヒーレンシ無効化のリクエストを受信するまで、又はヘッダそれ自身に書き込みを行うそのような時間までは、その時間より前はヘッダが変更されていないことが既知であるため、認可チェックの実施を回避することができる。ヘッダに対していったん変更がなされると、使用認可チェックは取り消し可能な有界ポインタが無効にされると判断するように構成され得る。
【００５８】
上述のメカニズムを使用する取り消し可能な有界ポインタの提供が非常に有用であり得る多くの実例の使用事例がある。一実例の使用事例において、装置は、取り消し可能な有界ポインタをさらなる装置に提供するように構成し、さらなる装置によってメモリ領域へのアクセスを制御し、さらなる装置は使用認可チェックを実施するように構成され、それにより装置がメモリ領域を解放した後、さらなる装置はメモリ・アドレスを生成するための取り消し可能な有界ポインタのさらなる使用を妨げられる。したがって、そのような手法によって、装置は別の装置に渡すことができる有界ポインタを作成することができ、上述のメカニズムでは、いったん装置が関連するメモリ領域を解放すると決定すると、さらなる装置はもはや与えられた有界ポインタを使用することができないこと、特に関連付けられるメモリ領域が解放された後に有界ポインタを使用しようとするあらゆる試行がなされると有界ポインタが取り消されること、を保証する。
【００５９】
次に、図面を参照して特定の実例を説明する。
【００６０】
図１は命令を処理するための処理パイプライン４を備えるデータ処理装置２の実例を概略的に図示している。この実例において、処理パイプライン４は、フェッチ工程６、デコード工程８、発行工程１０、実行工程１２、及びライトバック工程１４を含む複数のパイプライン工程を含むが、他のタイプの工程又は工程の組み合わせが提供されてもよいことを了解されたい。例えば、いくつかの実装形態ではレジスタのリネームを実施するためのリネーム工程を含むことができる。処理される命令は工程から工程へと移動し、命令がある工程で待ち状態にある間、別の命令はパイプライン４の異なる工程で待ち状態にあり得る。
【００６１】
フェッチ工程６はレベル１（Ｌ１：Ｌｅｖｅｌ  １）の命令キャッシュ２０から命令をフェッチする。フェッチ工程６は普通、連続する命令アドレスから逐次に命令をフェッチすることができる。しかしながら、フェッチ工程はまた分岐命令の結果を予測するための分岐予測器２２を有することがあり、フェッチ工程６は、分岐すると予測される場合は（非逐次）分岐ターゲット・アドレスから、又は分岐しないと予測される場合は次の連続するアドレスから、命令をフェッチすることができる。分岐予測器２２は、ある分岐が取られそうか、又は取られそうにないかを予測するための情報を格納するための１つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、前に実行された分岐の実際の結果を追跡するための、又は分岐についてなされた予測についての信頼度を表すカウンタを含むことができる。分岐予測器２２はまた分岐命令の前のターゲット・アドレスをキャッシュするための分岐ターゲット・アドレス・キャッシュ（ＢＴＡＣ：Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ａｄｄｒｅｓｓ  Ｃａｃｈｅ）２４を含むことができ、それによって同一の分岐命令との後続の遭遇の際、これらが予測され得る。
【００６２】
フェッチされた命令は、命令をデコードしてデコード命令を生成するためのデコード工程８に渡される。デコード命令は適当な処理演算を実行するために実行工程１２を制御するための制御情報を含むことができる。キャッシュ２０からフェッチされたいくつかのより複雑な命令について、デコード工程８はこれらの命令を複数のデコード命令にマッピングすることができ、これはマイクロ命令（μｏｐ又はｕｏｐ）として知られ得る。したがって、Ｌ１の命令キャッシュ２０からフェッチされた命令とパイプラインの後方の工程で見られる命令との間には１対１関係がなくてもよい。一般的には、本出願における「命令」との称し方はマイクロ命令を含むものとして解釈するべきである。
【００６３】
デコード命令は発行工程１０に渡され、命令の実行に必要なオペランドが利用可能かどうかを判断し、オペランドが利用可能であれば実行のため命令を発行する。いくつかの実装形態はインオーダー処理をサポートしていることがあり、それによって、命令がＬ１の命令キャッシュ２０からフェッチされたプログラム順序に対応する順序での実行のために、命令が発行される。他の実装形態はアウトオブオーダー実行をサポートしていることがあり、それによって命令は、プログラムの順序とは異なる順序で実行工程１２に発行され得る。前方の命令がオペランドを待ってストールしている間、オペランドが利用可能であるプログラムの順序において後方の命令を先に実行できるため、アウトオブオーダー処理はパフォーマンスを改善するために有用であり得る。
【００６４】
発行工程１０は命令を実行工程１２に発行し、ここで命令は様々なデータ処理演算を実行するために、実行される。例えば、実行工程は、整数値に対して算術又は論理演算を実行するための算術／論理ユニット（ＡＬＵ：Ａｒｉｔｈｍｅｔｉｃ／Ｌｏｇｉｃ  Ｕｎｉｔ）３０、浮動小数点形式で表現される値に対して演算を実行するための浮動小数点（ＦＰ：Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ）ユニット３２、及びレベル１（Ｌ１）のデータ・キャッシュ３６からのデータ値をレジスタ４０にロードするためのロード演算、又はレジスタ４０からのデータ値をＬ１のデータ・キャッシュ３６に格納するためのストア演算を実行するためロード／ストア・ユニット３４を含む複数の実行ユニット３０、３２、３４を含むことができる。これらは、設けることができる実行ユニットのいくつかの実例のタイプに過ぎず、多くの他の種類も設けることができることを了解されたい。処理演算を実行するために、実行工程１２はデータ値をレジスタ４０のセットから読み出すことができる。実行された命令の結果は次いでライトバック工程１４によってレジスタ４０に書き戻すことができる。
【００６５】
Ｌ１の命令キャッシュ２０及びＬ１のデータ・キャッシュ３６は、複数のキャッシュのレベルを含むキャッシュ・ヒエラルキの一部であってもよい。例えば、レベル２（Ｌ２：Ｌｅｖｅｌ  ２）のキャッシュ４４をやはり設けることができ、任意選択でさらなるレベルのキャッシュが設けられてもよい。この実例において、Ｌ２のキャッシュ４４はＬ１の命令キャッシュ２０とＬ１のデータ・キャッシュ３６との間で共有されるが、他の実例は別個のＬ２の命令及びデータ・キャッシュを有することができる。フェッチされることになる命令がＬ１の命令キャッシュ２０にない場合、Ｌ２のキャッシュ４４からフェッチすることができ、同様に命令がＬ２のキャッシュ４４にない場合、メイン・メモリ５０からフェッチすることができる。同様に、ロード命令に応答して、データはＬ１のデータ・キャッシュ３６にない場合Ｌ２のキャッシュ４４からフェッチすることができ、必要であればメモリ５０からフェッチすることができる。あらゆる既知のスキームがキャッシュ・ヒエラルキを管理するために使用され得る。
【００６６】
プログラム命令及びデータ値を参照するためにパイプライン４によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメイン・メモリ５０、及び任意選択でやはり少なくともキャッシュ・ヒエラルキのいくつかのレベルは、物理的にアドレッシングされ得る。したがってトランスレーション・ルックアサイド・バッファ（ＴＬＢ：Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）５２が、パイプライン４によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートするために設けられてもよい。例えば、ＴＬＢ５２はそれぞれが仮想アドレス空間の対応するページの仮想ページ・アドレスを指定する複数のエントリを含むことができ、仮想ページがアドレッシングする対応する物理ページ・アドレスは、対応するページ内の仮想アドレスを物理アドレスにトランスレートするためにマッピングされるべきである。例えば、仮想及び物理ページ・アドレスは対応する仮想アドレス及び物理アドレスの最上位部分に対応することができ、この時残りの最下位部分は仮想アドレスを物理アドレスにマッピングする際変更されないままである。アドレス・トランスレーション情報と同様に、それぞれのＴＬＢエントリはまた、アドレスのあるページがパイプライン４のあるモードでアクセス可能かどうかを示すことなどのアクセス・パーミッションを指定する何らかの情報を含むことができる。いくつかの実装形態において、ＴＬＢエントリはまた、キャッシュ・ヒエラルキのどのレベルが読み出し若しくは書き込み動作に応じて更新されるかを定義するキャッシュ・ポリシ情報（例えば、キャッシュがライトバック又はライトスルー・モードで動作すべきであるかどうか）、又は対応するページ内のアドレスへのデータ・アクセスがメモリ・システムによって、データ・アクセスがパイプライン４によって発行された順序と比べてリオーダすることができるかどうかを定義する情報、などのアドレスの対応するページの他のプロパティを定義することができる。
【００６７】
図１が単一のレベルのＴＬＢ５２を示す一方、ＴＬＢのヒエラルキがレベル１（Ｌ１）のＴＬＢ５２が複数の最近アクセスされたページ内のアドレスをトランスレートするためのＴＬＢエントリを含み得るように提供され得、またレベル２（Ｌ２）のＴＬＢが多数のページについてのエントリを格納するために提供され得ることを了解されたい。必要とされるエントリがＬ１のＴＬＢに存在しない場合、Ｌ２のＴＬＢから、又はヒエラルキ内のさらなるＴＬＢからフェッチすることができる。アクセスされることになるページについて必要とされるエントリがＴＬＢのうちいずれにもない場合、メモリ５０のページ・テーブルにアクセスするためにページ・テーブル・ウォークを実施することができる。本技法では、あらゆる既知のＴＬＢ管理スキームを使用することができる。
【００６８】
また、いくつかのシステムは複数のレベルのアドレス・トランスレーションをサポートすることができ、それによって、例えば、第１のＴＬＢ（又はＴＬＢのヒエラルキ）は仮想アドレスを中間アドレスにトランスレートするために使用することができ、また１つ又は複数のさらなるＴＬＢを使用するアドレス・トランスレーションの第２のレベルが、次いで中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートできることを了解されたい。これは例えば、アドレス・トランスレーションの第１のレベルがオペレーティング・システムによって管理され得、アドレス・トランスレーションの第２のレベルがハイパーバイザによって管理され得る場合の仮想化をサポートするために有用であり得る。
【００６９】
図１に示すように、装置２は有界ポインタ・レジスタ６０のセットを有することができる。有界ポインタ・レジスタのセットは図１において汎用データ・レジスタ４０のセットとは物理的に別個であるように示されるが、一実装形態においては汎用データ・レジスタ及び有界ポインタ・レジスタの両方を提供するために同一の物理記憶装置が使用されてもよい。
【００７０】
それぞれの有界ポインタ・レジスタ６０は、アクセスされることになるデータ値のアドレスを決定するために使用され得るポインタ値６２、及び対応するポインタ６２を使用する際アドレスの許容範囲を指定する範囲情報６４を含む。有界ポインタ・レジスタ６０はまたポインタの使用に関して１つ又は複数のリストリクション／パーミッションを定義することができるリストリクション情報６６（本明細書ではパーミッション情報とも称する）を含むことができる。例えば、リストリクション６６は、ポインタ６２を使用し得る命令のタイプ、又はポインタが使用され得るパイプライン４のモードを制限するために使用することができる。したがって、範囲情報６４及びリストリクション情報６６は、ポインタ６２が使用できる機能を定義すると考えられ得る。定義された機能以外でポインタ６２を使用する試行がなされると、エラーがトリガされ得る。範囲情報６４は例えば、ポインタがある既知の境界内に留まっており、重要又はセキュアな情報を含み得るメモリ・アドレス空間の他のエリアに迷い込んでいないことを保証することのために有用であり得る。汎用データ・レジスタ及び有界ポインタ・レジスタの両方のために同一の物理記憶装置が使用される一実装形態において、その時一実装形態においてポインタ値６２は例えば対応する汎用レジスタについて使用されるのと同一の記憶装置の位置に格納され得る。
【００７１】
図２は、許容範囲が、データ又は命令への認可されていないアクセスに対して保護するために使用される命令のタイプの実例を示す。図２の上部で示すように、特定の有界ポインタ・レジスタＰＲ（Ｐｏｉｎｔｅｒ  Ｒｅｇｉｓｔｅｒ）１は所与のポインタ値６２及び範囲情報６４を含み、この実例においては許容範囲の下位境界を定義する下位境界アドレス６８、及び許容範囲の上位境界を定義する上位境界アドレス６９を使用して指定されている。例えば、境界６８、６９はアドレス範囲８００００から８１０００を定義するために設定される。ある命令が有界ポインタ・レジスタＰＲ１参照し、ポインタ６２から決定されるアドレスがこの範囲の外にある場合、エラーがトリガされ得る。
【００７２】
例えば、図２のパートＡで示されるように、いくつかのシステムではポインタ・レジスタ６０内のポインタ６２の値を範囲情報６４によって指定される範囲の外にある値に設定しようとする試行があるとエラーがトリガされ得る（ここではポインタがアドレスを直接指定すると仮定している）。これはポインタ６２が指定された範囲の外のあらゆる値を取ることを回避し、それによって、ポインタを使用するあらゆるアクセスが許可された範囲内に安全にあることを保証することができる。代替的に、図２のパートＢで示されるように、命令がポインタ６２のアドレスによって特定される位置にアクセスしようと試行すると、その時そのアドレスが指定された範囲の外にある場合、エラーがトリガされ得る。したがって、ポインタ６２を指定された範囲の外の値に設定することがなお許容され得るが、そのポインタ・アドレスのデータ・アクセス（又はそのポインタから導出されるアドレス）が試行されると、その時そのアドレスが許可された範囲の外にある場合、エラーがトリガされ得る。図２のパートＡ及びパートＢに示される両方のタイプの命令に応じて、他のシステムがエラーをトリガすることもある。
【００７３】
範囲情報６４は様々な方法で設定することができる。例えば、セキュアなコード、又はオペレーティング・システム若しくはハイパーバイザは、所与のポインタに許可される範囲を指定することができる。例えば、命令セット・アーキテクチャは、所与のポインタ６２についての範囲情報６４を設定するための又は修正するための複数の命令を含むことができ、これらの命令の実行は、あるソフトウェア又はプロセッサ４のあるモード若しくは例外状態に制限することができる。範囲情報６４を設定するための又は修正するためのあらゆる既知の技法を使用することができる。
【００７４】
ポインタへの参照を行うある命令を実行する際に実行状態１２で使用され得る有界ポインタ格納要素６０のセットに加えて、プログラム・カウンタ機能（ＰＣＣ：Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ  Ｃａｐａｂｉｌｉｔｙ）レジスタ８０が、命令がレベル１の命令キャッシュ２０からフェッチされる際、フェッチ工程６で類似の機能性を提供するためにやはり使用されてもよい。特に、プログラム・カウンタ・ポインタはフィールド８２に格納され得、この時ＰＣＣ８０はまた、有界ポインタ格納要素６０のセット内のポインタのそれぞれに与えられる範囲及びリストリクション情報と同様に、範囲情報８４及び適当なリストリクション情報８６を与える。
【００７５】
図３は、タグ・ビットが個々のデータ・ブロックに関連付けられて、これらのデータ・ブロックが機能を表しているかどうか（すなわち、有界ポインタ及び関連付けられるリストリクション情報）、又は通常データを表しているかどうかを特定するためにどのように使用されるか概略的に図示している。特に、メモリ・アドレス空間１１０は、典型的には指定されたサイズを有することになる一連のデータ・ブロック１１５を格納することになる。純粋に図示のために、この実例において、それぞれのデータ・ブロックは１２８ビット含むと仮定する。それぞれのデータ・ブロック１１５に関連して、タグ・フィールド１２０が提供され、一実例ではこれはタグ・ビットと称される単一のビット・フィールドであり、関連付けられるデータ・ブロックが機能を表すことを特定するためにセットされ、関連付けられるデータ・ブロックが通常データを表し、ひいては機能として取り扱うことができないことを示すためにクリアされる。セットされた又はクリアな状態に関連付けられる実際の値は、実装形態によって異なっていてよいが、純粋に図示のため、一実例の実装形態においては、タグ・ビットが値１を有する場合、関連付けられるデータ・ブロックが機能であることを示し、タグ・ビットが値０を有する場合は関連付けられるデータ・ブロックが通常データを含むことを示すことを了解されたい。
【００７６】
機能が、図３で示される機能レジスタ１００などの有界ポインタ・レジスタ（本明細書では機能レジスタとも称する）６０のうちの１つにロードされると、次にタグ・ビットは機能情報を伴って移動する。したがって、機能が機能レジスタ１００にロードされると、ポインタ１０２、範囲情報１０４及びリストリクション情報１０６（以降でパーミッション情報と称する）が機能レジスタにロードされることになる。加えて、その機能レジスタに関連して、又はその中の特定のビット・フィールドとして、タグ・ビット１０８はその内容が機能を表すことを特定するためにセットされることになる。同様に、機能がメモリに格納し戻される場合、関連するタグ・ビット１２０は機能が格納されるデータ・ブロックに関連付けられてセットされることになる。そのような手法によって、機能と通常データとを区別し、ひいては通常データを機能として使用することができないことを保証することが可能である。
【００７７】
図１に戻ると、本明細書において説明される技法によると、有界ポインタに関連付けられる通常の情報に加えて、その有界ポインタがアクセスを制御するために使用される対応するメモリ領域に関連付けられる第１のトークン値を含む取り消し可能な有界ポインタが生成され得る。さらには、メモリ領域の割り当てられたインスタンスに関連する取り消し可能な有界ポインタに関する使用のために、メモリ内のヘッダ位置に格納されるヘッダが設けられ、そのヘッダは、格納値が、取り消し可能な有界ポインタに関して使用される第１のトークン値に初期化される第１のトークン・フィールドを有する。ヘッダ位置は取り消し可能な有界ポインタによって与えられる範囲情報から導出可能であるように構成され、したがって有界ポインタがメモリ・アドレスを生成するために使用される時にヘッダが配置されることを可能にしている。割り当てられたメモリ領域が続いて解放される際、この時第１のトークン・フィールド内の格納値が修正される。
【００７８】
図１は、取り消し可能な有界ポインタの使用を管理するために使用されるコンポーネント、及び対応するメモリ領域に関して設けられるヘッダを概略的に示している。特に、示されるように有界ポインタ制御回路９０は有界ポインタの生成、並びに機能レジスタ６０及びキャッシュ・ヒエラルキ３６、４４及び／又はメモリ５０の間のこれらの有界ポインタの移動を制御するために設けられる。さらには、メモリ内でメモリ領域を割り当てるメモリ・アロケータ／デアロケータ回路９２が設けられ、これらは例えばデータ処理装置で実施されている特定のプロセスによって使用することができ、続いてこれらのメモリ領域を解放する。メモリ・アロケータ／デアロケータ回路はまたそれぞれのメモリ領域用のヘッダを維持する役割もしている。
【００７９】
いくつかの実施例において、有界ポインタ制御回路９０及びメモリ・アロケータ／デアロケータ９２は専用のハードウェア・コンポーネントによって提供される。代替的に、それらは信頼できるコード、例えばセキュアなコード又はオペレーティング・システム若しくはハイパーバイザの制御の下でデータ処理装置の既存のハードウェアに実装することができる。これらのコンポーネントのいずれかがソフトウェアによって実装される事例では、有界ポインタのセマンティクスはなおハードウェアによって強制されるべきである。
【００８０】
やはり図１に示すように、追加的な記憶装置９４は有界ポインタ・レジスタ６０のセットと関連して設けられる。これは、有界ポインタ・レジスタ６０を提供するために使用される記憶装置とは別個の記憶装置コンポーネントとして設けられてもよいか、又は同一のコンポーネント内に設けられてもよく、有界ポインタ・レジスタのそれぞれに効果的に拡張を与え、それによってこれらが有界ポインタだけではなく、追加的な記憶装置９４の対応する位置に格納される一部の追加的な情報を格納することができる。特に、後にさらに詳細に議論するように、取り消し可能な有界ポインタについて、有界ポインタ・レジスタに関連付けられる追加的な記憶装置内の関連する位置は、その有界ポインタ・レジスタ内に格納される取り消し可能な有界ポインタに関連付けられるメモリ領域用に設けられるヘッダ内でやはり維持される第２のトークン値を格納するために使用することができる。
【００８１】
いくつかの実装形態において、取り消し可能なプログラム・カウンタ機能を提供することが望ましいことがあり、そのような事例でも追加的な記憶装置をＰＣＣレジスタ８０に関連して設けることができる。
【００８２】
図４は、一実例の実装形態においてメモリ・アロケータ／デアロケータ９２によって実施され得るメモリ割り当て動作を図示するフロー図である。ステップ１５０において、新しいメモリ領域が割り当てられる必要があるかどうかが判断される。これは、例えばデータ処理装置上で実施される特定のプロセス又はタスクによる使用のために設けられる必要があるメモリの一部分により、処理回路上で実行されているソフトウェアによってトリガすることができる。いったん新しいメモリ領域が割り当てられることになると、ステップ１５５において複数の標準的なメモリ割り当て技法のいずれかを使用してメモリ領域用のアドレス範囲が決定され、ステップ１６０において、関連付けられているタスク又はプロセスによる使用のためにメモリ領域を形成するメモリ・アドレスの領域を予約するために、特定されたメモリ領域は割り当てられたとしてマークされる。取り消し可能な有界ポインタがメモリ領域のために構築される場合、関連するヘッダがソフトウェア・アドレッシング可能メモリ・ビットに配置されることになり、メモリの一部分もヘッダの格納用に予約される必要がある。
【００８３】
ステップ１６５において、取り消し可能な有界ポインタがメモリ領域用に使用されるかどうか判断される。特に、一実装形態において、取り消し可能な有界ポインタがサポートされるが、標準的な有界ポインタも使用可能であり、ひいては一部の事例では、標準的な有界ポインタを特定のメモリ領域のために使用することが決定されることがある。取り消し可能な有界ポインタを使用することにならない場合、この時点でプロセスはステップ１７０に進むことができ、ここで標準的な有界ポインタの使用に関するルーチンのステップを実施することができる。
【００８４】
しかしながら、割り当てられたメモリ領域がそれに関連する少なくとも１つの取り消し可能な有界ポインタを有することになる場合、プロセスはステップ１７５に進みメモリ領域用のヘッダが作成され、次いでそのヘッダはメモリ領域用に決定されるヘッダ位置に格納される。以下でより詳細に議論するように、ヘッダ位置が関連付けられている取り消し可能な有界ポインタにおいて与えられる範囲情報を使用して決定可能であるとすれば、ヘッダ位置は様々な異なる形態を取ることができる。ヘッダの内容は様々な形態を取ることができるが、説明される一実装形態において、第１のトークン（本明細書ではスモール・トークンとも称される）、第２のトークン（本明細書ではラージ・トークンとも称される）、及びメモリ領域に関連付けられる有界ポインタのために使用される一定の有界ポインタ・ビット用の値を提供する。ヘッダ内で維持される有界ポインタ・ビットは、様々な形態を取ることができるが、典型的には、メモリ領域の現在割り当てられているインスタンスに関連する使用のために作成されたあらゆる有界ポインタに共通する有界ポインタのビットである。実例として、これは範囲情報の一部分を含むことができ、それは範囲情報が特定のメモリ領域、一実施例においては、メモリ領域のベース・アドレス及びリミット・アドレスを特定する範囲情報に割り当てられた有界ポインタに共通するからである。さらには、一定のパーミッション・ビットが、メモリ領域に関連する使用のために作成された有界ポインタに共通することもあり、これらのパーミッション・ビットの１つ又は複数は、ヘッダ内に保持される情報内に含めることができる。
【００８５】
後の議論から明らかとなるように、一定の有界ポインタ・ビットの値は、有界ポインタが有界ポインタ・レジスタ６０とメモリとの間で移動する際、エンコード演算及び対応するデコード演算における使用のために、ヘッダ内に保持される。特に、ラージ・トークンは取り消し可能な有界ポインタそれ自身に収容することができない（一実例の実装形態において、取り消し可能な有界ポインタ内に一連のビットとして組み込まれ、そうでなければ有界ポインタのフォーマットでは使用されないスモール・トークンとは対照的である）。したがって、取り消し可能な有界ポインタが有界ポインタ・レジスタ６０のうちの１つに存在する間、ラージ・トークン情報は追加的な記憶装置９４の対応する部分に維持することができる一方で、有界ポインタがメモリに格納されると、ラージ・トークン情報を維持することができない。したがって、一実例の実装形態において、エンコードされた部分を生成するために、取り消し可能な有界ポインタの一部分（すなわちヘッダ内で維持される部分に対応する部分）は、ラージ・トークンを使用するエンコード演算にかけられ、エンコード演算はラージ・トークンがそのエンコードされた部分を元々の内容に復元するようにデコードするために使用されることを後に可能にする形態であり、次に取り消し可能な有界ポインタのエンコードされた形態はメモリに格納される。
【００８６】
代替的な実装形態において、第２のトークンが与えられなくてもスモール・トークンを使用することで十分であり得る。その事例では、ヘッダはスモール・トークンの指標を与えることを必要とするに過ぎず、第２のトークン又は有界ポインタの一定のビットの値を特定することはない。さらには、エンコード演算もデコード演算も必要とされることがなく、それは取り消し可能な有界ポインタが有界ポインタ・レジスタ６０とメモリ５０との間でいずれかの方向に移動する際、第１のトークン値を直接取り消し可能な有界ポインタ内に組み込むことができ、ひいては維持することができるからである。しかしながら、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオを妨げるメカニズムの堅牢さは、トークンの全体的なサイズが大きい時に改善され、したがって以降で説明する実例の実装形態の目的に関しては、全体的なトークンをスモール・トークン（有界ポインタ内で直接表現できる）及びラージ・トークン（有界ポインタ内で直接表現できない）によって表現し、また取り消し可能な有界ポインタを取り消すかどうかを決定する際は両方のトークンが使用されることを仮定する。残りの図面を参照して、このことをより詳細に議論する。
【００８７】
図５は、有界ポインタ制御回路９０によって実装される有界ポインタ作成プロセスを図示している。特に、ステップ２００で定められるように、プロセスは取り消し可能な有界ポインタが作成される時に発生する一連の事象を説明している。いったん取り消し可能な有界ポインタが作成されると、ステップ２０５において有界ポインタのフィールドが、通常のポインタ、範囲、及びパーミッション情報を含む必要とされる情報でポピュレートされる。しかしながら、加えて関連付けられるメモリ領域のヘッダのスモール・トークン・フィールドに格納されたスモール・トークン値を組み込むよう有界ポインタがポピュレートされる。加えて、本明細書において説明される実例の実装形態において、取り消し可能な（Ｒ）ビットが有界ポインタ内に与えられ、有界ポインタが取り消し可能な有界ポインタであることを特定するためにセットすることができる。対照的に、標準的な有界ポインタが作成されている場合、第１のトークン値は有界ポインタ内に組み込まれることはなく、Ｒビットはクリアされる。
【００８８】
やはり後により詳細に議論するように、一実装形態において、エンコードされる（Ｅ）ビットが与えられ、取り消し可能な有界ポインタがエンコードされた形態にあることを特定するためにセットすることができ、また取り消し可能な有界ポインタがデコードされた形態にあることを特定するためにクリアすることができる。実装形態がＥビットの情報を使用する場合、ステップ２０５においてＥビットがクリアされるが、それは有界ポインタを作成する時、一実例では有界ポインタ・レジスタ６０のうちの１つにおいてエンコードされていない形態で作成されることになるからである。
【００８９】
ステップ２１０において、取り消し可能な有界ポインタは選択された有界ポインタ・レジスタ６０内に格納され、対応するメモリ領域のヘッダに与えられるラージ・トークンは選ばれた有界ポインタ・レジスタ６０に関連付けられる追加的な記憶装置９４に格納される。ラージ・トークンを追加的な記憶装置９４に格納することが可能な様々な方法がある。有界ポインタ・レジスタ６０のうちの１つにある取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用される時、その有界ポインタのための適当な第２のトークンが追加的な記憶装置９４からアクセスすることができるとすれば、あらゆる適切なメカニズムを使用することができる。
【００９０】
いくつかの実装形態において、現在その有界ポインタ・レジスタにある取り消し可能な有界ポインタに関連付けられるヘッダのいずれかに書き込みが実施される場合にコアに通知を受信させる通知メカニズムが備わっている場合、追加的な記憶装置の必要はない可能性がある。特に、その事象では、コアがそのような通知を何も受け取っておらず、且つ関連するヘッダそれ自身に書き込みを行っていない場合、ヘッダが変更されておらず、したがって領域が解放されていないこと、ひいては使用認可チェックが回避され得ることが分かる。必要とされるエンコード演算に関して、取り消し可能な有界ポインタがメモリに移される場合、この目的のために第２のトークン値を直接ヘッダからロードすることができる。
【００９１】
そのような通知メカニズムの特定の実例は、先に議論したキャッシュ・コヒーレンシ・スキームの実例である。特に、ヘッダがキャッシュされる場合、認可チェックを最適化することが可能な場合があり、それにより現在のコア（すなわち取り消し可能な有界ポインタを使用しているコア）は実際には、キャッシュ・コヒーレンシ・スキームがヘッダのキャッシュされたバージョンへ更新を通知するまで、又は現在のコアがヘッダを更新するまで、認可チェックを実施する必要がない。そのような場合、追加的な記憶装置９４の必要性を回避することが可能な場合がある。そのうちヘッダの修正についての通知が受信され、且つ追加的な記憶装置が設けられない場合、修正されたヘッダに関連付けられ、また有界ポインタ・レジスタのうちの１つに現在存在しているすべての取り消し可能な有界ポインタは、無効にされるべきである。
【００９２】
図６は、メモリ・アロケータ／デアロケータ回路９２によって実施され得るメモリの解放動作を図示している。ステップ２５０において、例えばそのメモリ領域を使用するよう意図されたプロセスが完了し、それによりメモリ領域についてさらなる必要性がないために、割り当てられたメモリ領域が解放される必要があると判断される場合、プロセスはステップ２５５に進み、メモリ領域が関連付けられるヘッダを有しているかどうか判断される。これはそのメモリ領域に関連する使用のために取り消し可能な有界ポインタが作成されてある状況に当てはまる。
【００９３】
メモリ領域が関連付けられるヘッダを有している場合、ステップ２６０においてヘッダは所定の値で上書きされる。ヘッダに書き込まれる正確なデータは、実装形態に応じて変わるが、上書きプロセスの目的は、ヘッダがヘッダ内に以前格納されていたスモール・トークン値及びラージ・トークン値をもはや維持しないことを保証することであり、その結果として、それらはそのメモリ領域に関連付けられる取り消し可能な有界ポインタに関して維持されるトークン情報とはもはや一致しない。
【００９４】
ステップ２６０に続いて、又はステップ２５５に直接続いて、メモリ領域が関連付けられるヘッダを有していない場合、プロセスはステップ２６５に進み、メモリ領域の将来的な割り当てのために使用することができるメモリ・アドレスのプールの一部として利用可能となるようにメモリ領域が解放される。
【００９５】
図７Ａ〜図７Ｃは、一実例の実装形態において使用される、ヘッダの使用、及び取り消し可能な有界ポインタの形態を図示している。図７Ａに示すように、メモリ割り当てプロセスの間、メモリ・アドレス空間３００内のメモリ領域３０５は、割り当てられるメモリ領域として決定することができる。割り当てられたメモリ領域は、領域内の最初のアドレスを特定するベース・アドレス、及び領域内の最後のアドレスを特定するリミット・アドレスを有する。さらには、メモリ領域がそれに関連付けられる取り消し可能な有界ポインタを有することになる状況では、ヘッダ位置３１０に格納されるメモリ領域用のヘッダが生成される。ヘッダ位置は様々な形態を取ることができるが、一実装形態において、その位置は、そのメモリ領域のための取り消し可能な有界ポインタ内に与えられる割り当てられたメモリ領域についての範囲情報を使用して決定できることが要求される。一実例の実施例において、ベース・アドレス及びリミット・アドレス情報は、有界ポインタの範囲情報内でエンコードされ、したがってヘッダ位置はベース・アドレス又はリミット・アドレスのうちの１つから直接導出可能であるように構成される。示される実例において、ヘッダ位置はベース・アドレスから直接決定可能であり、特に割り当てられたメモリ領域の開始の直前のメモリ・アドレス・ビットから形成される。しかしながら、ヘッダ位置がメモリ領域に直接隣接していることは必要事項ではなく、代わりにメモリ領域の開始より固定オフセット前にあることができ、それによりヘッダ位置がベース・アドレス及び固定オフセットから決定することができる。代替的に、ヘッダ位置は割り当てられたメモリ領域の終端の直後にあるように構成することができ、それによりリミット・アドレスを使用して決定することができる。やはり、代替的に、メモリ領域の終端より固定オフセット後にあってもよい。
【００９６】
なおさらなる実例として、ヘッダは、その位置が何らかの定められたメカニズムを使用してメモリ領域のアドレスから決定することが可能であるとすれば、メモリ領域に対して任意の別個の位置に配置することができる。実例として、二分探索木を使用することが可能な場合があり、この場合、割り当てられたメモリ領域のアドレスを探索キーとし、ヘッダを対応する値とする。
【００９７】
一部の実例の実装形態において、ヘッダ位置をソフトウェア・アドレッシング可能メモリ・ビットとして与えることができるが、代替的に、ＥＣＣビットがメモリ内のデータに関連して与えられ得るのとほとんど同様の方法で、非ソフトウェア・アドレッシング可能メモリ・ビットとして与えることができる。
【００９８】
ヘッダのフォーマットは様々な形態を取ることができるが、あるフォーマットを図７Ｂのブロック３１５によって示す。この実例では、４つのフィールドが与えられており、すなわちスモール・トークン値を格納するためのスモール・トークン・フィールド３２０、ラージ・トークン値を格納するためのラージ・トークン・フィールド３３５、メモリ領域に関連付けられる取り消し可能な有界ポインタに与えられる情報の特定のビットを格納するための追加的なフィールドである。特に、フィールド３２５は範囲情報の一定の部分を格納するために与えられ得る。一実例の実装形態において、このフィールドに格納される部分はヘッダ位置を特定するために必要とされない部分である。ベース・アドレスがヘッダ位置を特定するために使用される図７Ａの実例を考えると、フィールド３２５はリミット・アドレスを格納することができるため、リミット・フィールドと称される。しかしながら、ヘッダ位置を特定するために使用されるのがリミット・アドレスである場合、ベース・アドレスをフィールド３２５において特定することができ、そのフィールドはベース・フィールドと称される。
【００９９】
一実例の実装形態では、フィールド３２５で十分な場合もあるが、所望であれば有界ポインタからさらなる情報のビットをヘッダ内で再現することもできる。例えば、パーミッション・フィールド３３０は、有界ポインタのパーミッション・ビットの少なくとも一部分を格納するよう設けることができる。典型的には、パーミッション・フィールドは、割り当てられたメモリ領域に関連する使用のために作成されるあらゆる有界ポインタに共通であるこれらのパーミッション・ビットを格納するために使用される。
【０１００】
図７Ｃは、実例の取り消し可能な有界ポインタ３４０、特にそこで与えることができる様々なフィールドを図示している。示されるように、取り消し可能な有界ポインタは、ポインタ値を格納するためのポインタ・フィールド３４５、メモリ領域のベース・アドレスを特定するベース・フィールド３５０、リミット・アドレスを特定するためのリミット・フィールド３５５、様々なパーミッション・ビットを格納するためのパーミッション・フィールド３６０、スモール・トークン値を格納するためのスモール・トークン・フィールド３６５、及び示される追加的なビット・フィールドを含む。特に、有界ポインタが取り消し可能な有界ポインタであることを特定するためにセットされ、有界ポインタが標準的な有界ポインタである場合にはクリアされる、Ｒビット・フィールド３７０を使用することができる。さらには、図３を参照して先に議論したＴビット情報を、Ｔビット・フィールド３８０に格納することができる。任意選択で、有界ポインタの内容がエンコードされているか、又はそうでないかを特定するために使用されるＥビット・フィールド３７５を設けることができる。
【０１０１】
いくつかの実装形態において、Ｅビットの使用は必須ではない。例えば一実装形態において、取り消し可能な有界ポインタが有界ポインタ・レジスタ６０のうちの１つに格納される時いつもデコードされ、メモリ５０に格納される時いつもエンコードされる可能性がある。その事例の場合、Ｅビットの情報は推論することができ、別個のフィールドを設ける必要性はない。しかしながら、エンコードされた有界ポインタが有界ポインタ・レジスタ６０のうちの１つに存在することが望ましい実装形態では、Ｅビット・フィールド３７５を設けることができ、それにより特定の取り消し可能な有界ポインタが現在エンコードされた形態（メモリ・アクセスを生成する時に使用することができない）にあるかどうか、又はデコードされた形態（使用認可チェックのプロセスをパスすれば、メモリ・アクセスを実施する時に使用することができる）にあるかどうかを確かめることができる。
【０１０２】
一実例の実装形態において、有界ポインタが生成される時は、有界ポインタ・レジスタ６０のうちの１つ、例えば図７Ｃに示される有界ポインタ・レジスタ３８５で作成される。有界ポインタが有界ポインタ・レジスタ内に格納される時、部分３９０などの追加的な記憶装置９４の関連付けられている部分は、関連するラージ・トークンを格納するため、すなわち対応するメモリ領域用のヘッダ３１５のラージ・トークン・フィールド３３５にラージ・トークンを格納するために使用される。
【０１０３】
メモリ・アドレスを生成する際使用される有界ポインタについては、まずそれは有界ポインタ・レジスタ６０のうちの１つに存在しなければならず、したがって有界ポインタが使用される時、追加的な記憶装置はラージ・トークン情報をキャプチャする。図７Ｃで示されるように、追加的な記憶装置は、所望であれば少なくとも一部のタイプのソフトウェアによってソフトウェア・アクセス不能に構成することができ、したがってラージ・トークン値のソフトウェア修正についての可能性を妨げることによりラージ・トークン情報のセキュリティを向上させる。
【０１０４】
取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用される時、図８に図示するようなハードウェア制御の下で使用認可チェック・プロセスを実装することができる。
【０１０５】
特に、命令がメモリ・アドレスを生成させる実行パイプライン内で実行されている時、ステップ４００においてプロセッサ・ハードウェアは取り消し可能な有界ポインタがメモリ・アドレスを生成するために使用されることを判断することができ、この時点でプロセスはステップ４０５に進むことができる。ステップ４０５において、取り消し可能な有界ポインタ内に与えられる範囲情報の少なくとも一部分は、メモリ領域用のヘッダを特定するために使用される。図７Ａの実例において、ベース・フィールド３５０内に格納されるベース・アドレス情報がこの目的のために使用されることを考えるが、先に議論したように、代替的な実装形態では、この目的のために使用されるのはリミット・アドレス情報であってもよい。
【０１０６】
いったんヘッダ位置が特定されると、ステップ４１０で、ヘッダのスモール・トークン・フィールド及びラージ・トークン・フィールドに保持されるトークン値が取り出される。ヘッダのスモール・トークン・フィールド及びラージ・トークン・フィールドを取得するために主メモリにアクセスする必要はなくてもよいことに留意すべきである。例えば、多くのシステムでは、処理パイプライン４によるアクセスのためにデータをキャッシュするために使用することができる、先に議論したレベル１及びレベル２のキャッシュ３６、４４などの１つ又は複数のレベルのキャッシュがある。したがって、使用認証が実施される必要がある場合にアクセス回数を改善するために、ヘッダの内容をキャッシュすることが可能である。
【０１０７】
その後、ステップ４１５において、取り消し可能な有界ポインタのスモール・トークン値及び関連付けられている追加的な記憶装置のラージ・トークン値が、ヘッダから取り出された値に一致するかどうか判断される。一致しない場合、プロセスはステップ４２５に進み、取り消し可能な有界ポインタが取り消され、それによってメモリ・アドレスを生成するリクエストが失敗させられ、取り消し可能な有界ポインタのすべてのさらなる使用を妨げる。
【０１０８】
しかしながら、チェック４１５をパスしたと仮定すると、ステップ４２０で取り消し可能な有界ポインタはメモリ・アドレスを生成するために使用することができる。いったんメモリ・アドレスが生成されていると、生成されたメモリ・アドレスが本当に関連付けられるメモリ領域の範囲内に入ること、及びリクエストされるアクセスのタイプがパーミッション情報に関して実施できることを保証するために、通常の境界及びパーミッションのチェックのすべてが実施される、ことに留意すべきである。
【０１０９】
先に言及したように、ラージ・トークンが使用される実装形態において、取り消し可能な有界ポインタが有界ポインタ記憶要素６０とメモリとの間で転送される際、エンコード及び関連するデコードのメカニズムが使用され得る。特に、取り消し可能な有界ポインタをメモリに格納する際、有界ポインタの一部分を、取り消し可能な有界ポインタのその部分がデコード演算の間の後の時点で第２のトークン値及びエンコードされた有界ポインタを使用して再作成される方法で、ラージ・トークンを使用してエンコードすることができる。実施され得るエンコード演算の実例が、図９のフロー図によって図示されている。ステップ４５０において、メモリに格納される取り消し可能な有界ポインタがあるかどうか判断され、その状況が生じれば、プロセスはステップ４５５に進み、有界ポインタ制御回路９０はエンコード演算を実施し、一方で有界ポインタを関連する有界ポインタ・レジスタ６０からメモリに移動させる。特に、ステップ４５５において有界ポインタの特定された部分は、取り消し可能な有界ポインタを格納する有界ポインタ・レジスタに関連付けられる追加的な記憶装置９４に格納されたラージ・トークンを使用してエンコードされる。リミット・フィールド及びパーミッション・ビットのサブセットがヘッダ内に保持される図７Ｂの実例を考えると、これらはラージ・トークンを使用してエンコードされる有界ポインタの部分を形成するビットである。特に、ヘッダはその情報の複製を含んでいるため、後に関連するデコード演算を実施する時に、ラージ・トークン・フィールド３３５の内容が変更されたかどうか、したがってデコードが実施される時に取り消し可能な有界ポインタを取り消すかどうかを判断することができる。図１０のフロー図を参照して、後でこのことをより詳細に議論する。
【０１１０】
いったんステップ４５５でエンコード演算を実施してしまうと、エンコードされた取り消し可能有界ポインタはステップ４６０でメモリに格納され、有界ポインタのフォーマットがＥビットを含む場合は、Ｅビットがセットされる。次いで、ステップ４６５において、関連する有界ポインタ・レジスタ及び関連付けられている追加的な記憶装置の内容が、所望であれば無効にされ得る。この時点で、取り消し可能な有界ポインタはメモリに移行されているが、ラージ・トークン値を考慮するエンコードされた形態にある。ステップ４６５で、関連する有界ポインタ・レジスタ及び関連付けられている追加的な記憶装置の内容を無効にすることの代替として、所望であればその情報を単に保持することができ、この場合、取り消し可能な有界ポインタはエンコードされた形態でメモリに複製されてしまっている一方で、取り消し可能な有界ポインタはなお有界ポインタ・レジスタに残ったままであることが了解されよう。
【０１１１】
一実施例において、取り消し可能な有界ポインタが有界ポインタ・レジスタのうちの１つからメモリに格納される時はいつでもエンコード演算が実施される。そのようにエンコードされた有界ポインタは、続いて有界ポインタ・レジスタ６０のうちの１つに格納し戻すためにメモリから取り出される際、有界ポインタ・レジスタに書き込まれるのに先立ってデコードすることができる。特に有界ポインタのフォーマットが、有界ポインタがエンコードされているか、そうでないかを特定する情報を含まない状況では、いつもこの手法が取られ、代わりに取り消し可能な有界ポインタがいつもエンコードされた形態でメモリに格納され、また非エンコードされた形態でレジスタ内に格納されることが予め定められる。しかしながら、Ｅビットを含む有界ポインタのフォーマットについては、エンコードされた有界ポインタはメモリから有界ポインタ・レジスタに取り出されることが可能であるが、とはいえ、有界ポインタのそのエンコードされた形態はデコードされてしまうまではメモリ・アドレスを生成するために使用することができない。これは、例えば有界ポインタをメモリの異なる領域同士の間で移行させる特定の状況で有用であると証明でき、そのプロセスの間、有界ポインタは有界ポインタ・レジスタのうちの１つにロードすることができ、次いで異なるメモリ・アドレスに格納し戻される。
【０１１２】
図１０は、一実例の実装形態におけるデコード演算を図示するフロー図である。ステップ５００において、有界ポインタがデコードされると決定される場合、プロセスはステップ５０５に進み、範囲情報の少なくとも非エンコードされた部分を使用して関連付けられるメモリ領域用のヘッダを特定する。図７Ａ〜図７Ｃを参照して先に議論した実例を考えると、リミット・フィールド情報はエンコードされる範囲情報の部分であるため、ベース・アドレス情報はヘッダを特定するために使用される情報となる。しかしながら、逆にヘッダを特定するために使用されるのがリミット情報である場合、エンコードされていたのはベース情報ということになり、ステップ５０５では、そのリミット・アドレスがヘッダを特定するために使用されることになる。
【０１１３】
ステップ５１０において、ヘッダの内容が取り出され、その後ステップ５１５において取り消し可能な有界ポインタのエンコードされた部分は、ヘッダ３１５のラージ・トークン・フィールド３３５内の値を使用してデコードされる。ラージ・トークン・フィールド３３５内に保持される値が、取り消し可能な有界ポインタがエンコードされた時のラージ・トークン値とまだ同じあると仮定すると、これは取り消し可能な有界ポインタの関連部分をデコードされた形態で再作成することになる。ステップ５２０において、デコードされる部分がヘッダ内に格納された有界ポインタのビット値に一致するかどうか判断される。図７Ｂの実例を考えると、これはデコードされたリミット・アドレス情報及び様々なパーミッション・ビット値を、ヘッダ３１５のフィールド３２５、３３０に保持される対応するデータと比較することを伴う。
【０１１４】
あらゆる理由のため、ステップ５２０において不一致が検出され、ステップ５３０において取り消し可能な有界ポインタは無効にされる。そうでなければ、ステップ５２５において、取り消し可能な有界ポインタ内のスモール・トークン値が、ヘッダ３１５のスモール・トークン・フィールド３２０内の値に一致するかどうか判断される。一致しない場合、やはりこれはステップ５３０において取り消し可能な有界ポインタを無効化させるが、一致する場合プロセスはステップ５３５に進み、デコードされた取り消し可能な有界ポインタは選ばれた有界ポインタ・レジスタに格納され、ヘッダから取り出されたラージ・トークン値は関連付けられている記憶装置９４内の適当な位置に格納される。さらには、Ｅビットが使用される実施例では、取り消し可能な有界ポインタ内のＥビットはこの時点でクリアされ、取り消し可能な有界ポインタがデコードされた形態にあることを確かにする。
【０１１５】
図１１は、前述のエンコード及びデコードのプロセスを概略的に図示している。図１１の上部に示されるように、エンコードされていない有界ポインタ６００は、図７Ｃを参照して先に議論された、この実例では有界ポインタをメモリに格納する時にエンコードされる有界ポインタの部分を形成するリミット・フィールド及びパーミッション・フィールド６１０、６１５を含む様々なフィールドのすべてを含む。先に言及したように、この目的のためにすべてのパーミッション・ビットが含められなくてもよい。追加的な記憶装置６０５は、対応するラージ・トークン値を格納し、そのラージ・トークン値を使用してエンコード演算６２０を実施し、結果としてエンコードされた取り消し可能有界ポインタ６２２がメモリに格納される。これは、リミット・フィールド及びパーミッション・フィールド６１０、６１５以外の元々のエンコードされていない有界ポインタの様々な部分を含んでおり、リミット・フィールド及びパーミッション・フィールド６１０、６１５の代わりにエンコードされた部分６２５がエンコードされた取り消し可能有界ポインタ内に存在する。
【０１１６】
続いてエンコードされた取り消し可能有界ポインタ６２２をデコードするよう決定される場合、ベース・フィールド６３０がアクセスされ、対応するメモリ領域に関連するメモリ内に格納されるヘッダ６３５を特定するために使用される。次いで、ヘッダからラージ・トークンが取り出され、デコードされたリミット情報及びパーミッション情報を作り出すためにエンコードされた部分６２５を使用してデコード演算６４０を実施するために使用される。
【０１１７】
デコードされたリミット情報及びパーミッション情報は、スモール・トークン値とともにマッチング・プロセス６４５に入力され、マッチング・プロセス６４５はヘッダ６３５からリミット情報、パーミッション情報、及びスモール・トークン情報もやはり受信する。一致が検出されると、デコードされた取り消し可能な有界ポインタは関連する有界ポインタ・レジスタに格納され、ヘッダ６３５からのラージ・トークン値は追加的な記憶装置６０５に格納される。したがって、図１１の下部に示されるように、元々のエンコードされていない有界ポインタが再作成されている。ステップ６４５において、一致が検出されない場合、取り消し可能な有界ポインタは無効にされる／取り消される。
【０１１８】
図１１から明らかなように、Ｅビットが使用される実装形態では、取り消し可能な有界ポインタがエンコードされていない形態の場合Ｅビットはクリアされるが、有界ポインタがエンコードされた形態の時はセットされる。
【０１１９】
エンコード、及び関連付けられるデコード演算は様々な形態を取ることができる。主要な要求事項は、エンコード演算によって作り出されたエンコード値が、同一のトークン値がエンコードの際使用されたように使用される状況において、元々の取り消し可能な有界ポインタの同一の連結されたフィールド値にデコードできることである。一部の事例では、エンコードされた値が、あらゆる他のトークン値を使用して同一の連結されたフィールド値にデコードできないことが、やはり望ましいことがある。しかしながら、いくつかの実装形態において、この後者の制限は、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオに対する十分な程度の弾力性を促進するために必要とされないと考えることができる。
【０１２０】
図１２Ａ及び図１２Ｂは、ラージ・トークンのビット数が、エンコードされる有界ポインタの関連部分のビット数と直接同一ではない状況において、使用することができる２つの実例のエンコード・スキームを概略的に図示している。特に、ある適切なエンコード・スキームは、有界ポインタの関連ビットとラージ・トークンの関連ビットとの間で適用されるＸＯＲバイナリ演算を使用することである。ラージ・トークン内及び有界ポインタの関連部分内に同一のビット数がある状況では、これは単純である。代わりに、図１２Ａに示されるように、エンコードされる必要がある有界ポインタ内のビット数７００が、ラージ・トークン７０５内のビット数を超える場合、一実装形態において、ラージ・トークンは、回転などのあらゆる適切なスキームを使用して追加的なビット７１０を追加するよう拡張することができる。その後、ＸＯＲ演算７１５は、エンコードされたビット７２０を作り出すために、有界ポインタ部分７００内のビットと部分７０５、７１０によって形成された拡張されたラージ・トークンとのそれぞれの対応する対に適用することができる。
【０１２１】
図１２Ｂは、ラージ・トークンがエンコードされる必要がある有界ポインタの関連するビット数よりも大きい場合の、代替的な手法を図示している。この事例では、中間的なエンコード７４５を生成するために、関連する有界ポインタのビット７００及びラージ・トークンの対応するビット数７３０を使用してＸＯＲ演算７４０が適用される。次いで、ラージ・トークンの残りのビット７３５を使用して、エンコードされたビット７５５を作り出すために、中間的なエンコードの補完的な演算を実施することができ、示される実例ではこれは回転７５０である。
【０１２２】
図１２Ａ及び図１２Ｂの手法の両方について、同一のラージ・トークンが使用されると仮定すると、元々の有界ポインタ・ビット７００を再作成させる対応するデコード演算が実施され得ることが了解されよう。
【０１２３】
しかしながら、図１２Ａ及び図１２Ｂは、適切なエンコード・スキームの具体的な実例を図示するために与えられるに過ぎないことに留意すべきであり、またエンコード・プロセスの間に使用されていたのと同一のトークン値を使用して有界ポインタ・ビットの再作成を可能にするとすれば、あらゆる他の適切なエンコード・スキームを使用することができることが理解されよう。
【０１２４】
確かに有界ポインタを取り消し、対応するメモリ領域が解放されてしまった後にそれが使用されないことを保証することができる非常に有益である多くの状況がある。一実例の使用事例が、図１３に示されており、第１の装置８００は関連付けられているメモリ８１５を有しており、一時的に第２の装置８０５へ／からのアクセスを許可したいメモリ領域８２０を割り当てることができる。本明細書において説明されるスキームにより、第１の装置８００は、メモリ領域８２０と関連する使用のために取り消し可能な有界ポインタ８１０を生成することができ、本明細書において説明されるメカニズムの結果として、メモリ領域８２０に関連してヘッダ８２５も作成される。
【０１２５】
次いで、取り消し可能な有界ポインタ８１０は第２の装置８０５に渡され、第２の装置８０５がメモリ領域８２０へのアクセスを有することができるようにしている。次いで、第２の装置は、メモリ・アドレスを生成するために取り消し可能な有界ポインタを使用する際、ハードウェアで使用認可チェック８３０を実施する。
【０１２６】
結果として、そのうち第１の装置８００はメモリ領域８２０を解放するよう決定する際、先述のメカニズムは、続いて第２の装置８０５が取り消し可能な有界ポインタ８１０を使用しようとすると、使用認可チェック８３０が失敗し、取り消し可能な有界ポインタが取り消されることを保証し、したがって、第２の装置８０５による、そのさらなる使用を妨げている。
【０１２７】
図面を参照して議論した実例において、取り消し可能な有界ポインタをメモリに格納する際にエンコードされた取り消し可能な有界ポインタの部分は、予め定められることを仮定している。特に、図７Ｂを参照して、その実例ではエンコードされる有界ポインタの部分を形成するのは、リミット・アドレス情報及び所定のパーミッション・ビットであることを仮定している。しかしながら、代替的な実装形態において、使用される実際のビットは構成可能になされ得る。例えば、ヘッダは、取り消し可能な有界ポインタのどのビットがヘッダ内に格納される取り消し可能な有界ポインタの複製された部分を形成するために使用されたか、を特定する制御フィールドを備えることができる。例えば、マスク・フィールドを使用して、取り消し可能な有界ポインタのどのビットがヘッダ３１５のフィールド３２５、３３０内の値によって表現されるかを正確に特定することができ、これらはリミット・アドレス及び一定のパーミッション・ビットであるよう予め定められる必要はない。マスク・フィールドの存在のために、エンコードの時、取り消し可能な有界ポインタのどのビットをエンコード演算への入力として使用するかを決定することができ、同様にデコードの時、デコード演算の間使用されるトークン値が先のエンコード演算において使用されたのと同一のトークン値である時、元々のビットが再作成されることを保証するために、どのビットをデコード演算にかけるかを決定することができる。
【０１２８】
本明細書において説明される技法は、ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオが発生する見込みを大きく軽減させるメカニズムを提供する。ｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオを妨げる確率は、使用されるトークンのサイズに依存する。したがって、トークン・サイズと発生するあらゆるｕｓｅ−ａｆｔｅｒ−ｆｒｅｅシナリオを妨げる確率との間にはトレードオフがある。したがって、トークン・サイズは、実装形態に応じて適当に選ぶことができる。いくつかの実装形態において、スモール・トークンを使用するだけで十分である場合があり、そのような事例では、説明したようなエンコード、及びデコード演算の必要がないこともあるが、それはスモール・トークンは全体的に取り消し可能な有界ポインタ内に収容することができるからである。しかしながら、適切なサイズのトークン全体を作り出すために、しばしば大きなトークン及びスモール・トークンの両方を使用することが適当であると考えられる。純粋に実例として、大きなトークン・フィールドとスモール・トークン・フィールドとの連結されたサイズが４０ビットである場合、特定の選ばれた値を備えるトークンを生成する確率は、約数百万分の一である。
【０１２９】
所望であれば、攻撃者が本明細書において説明される対策をすり抜ける見込みを軽減するための追加的なステップを取ることができる。例えば、攻撃者が大量の乱数を再作成し、異なるトークン値を指定しながらメモリ・アクセスを再試行し続けることが可能であろう。しかしながら、所望であれば、処理装置は、例えば最初のアクセス失敗の後に攻撃コンポーネントがさらなる試行を実施することを停止させることにより、そのようなアクティビティを妨げるように構成することができる。
【０１３０】
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置構成又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
【０１３１】
本発明の図示的な実例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組み合わせが可能である。
【図１】
2021535470.tif 000003
【図２】
2021535470.tif 000004
【図３】
2021535470.tif 000005
【図４】
2021535470.tif 000006
【図５】
2021535470.tif 000007
【図６】
2021535470.tif 000008
【図７Ａ】
2021535470.tif 000009
【図７Ｂ】
2021535470.tif 000010
【図７Ｃ】
2021535470.tif 000011
【図８】
2021535470.tif 000012
【図９】
2021535470.tif 000013
【図１０】
2021535470.tif 000014
【図１１】
2021535470.tif 000015
【図１２Ａ】
2021535470.tif 000016
【図１２Ｂ】
2021535470.tif 000017
【図１３】
2021535470.tif 000018
【国際調査報告】
2021535470.tif 000019
2021535470.tif 000020