IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特表2024-518706境界外参照を行うプログラムの安全な実行
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-02
(54)【発明の名称】境界外参照を行うプログラムの安全な実行
(51)【国際特許分類】
   G06F 21/52 20130101AFI20240424BHJP
【FI】
G06F21/52
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023562235
(86)(22)【出願日】2022-03-22
(85)【翻訳文提出日】2023-10-10
(86)【国際出願番号】 EP2022057546
(87)【国際公開番号】W WO2022223224
(87)【国際公開日】2022-10-27
(31)【優先権主張番号】17/236,748
(32)【優先日】2021-04-21
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】チェン、トン
(72)【発明者】
【氏名】ブユクトスノグル、アルパー
(72)【発明者】
【氏名】ボイヴィー、リチャード
(72)【発明者】
【氏名】サイレシュワール、グルラジ
(57)【要約】
バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定することと、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、または境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することとを含む、境界外メモリ参照を行うことからプログラムを保護するための方法、システム、および装置。
【特許請求の範囲】
【請求項1】
境界外メモリ参照を行うことからプログラムを保護するための方法であって、前記方法が、
バッファからデータをロードするまたは前記バッファにデータを格納する命令が前記バッファの前記境界の外側のアドレスを参照する境界外参照を前記命令が行うかどうかを判定することと、
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された開始アドレス、前記命令で指定されたデータ長、または境界外参照の値を修正することを含む、前記ロードまたは前記格納の実行を変更することと
を含む、方法。
【請求項2】
完全に境界外のアドレスを前記命令が参照すると前記判定することに応答して、ロードまたは格納コマンドを発行しないことと、
実行後にどの境界外参照が直されなければならないかを識別することと、
前記境界外参照の格納済みバージョンから、前記識別された境界外参照を直すことと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記境界外参照をログ記録することをさらに含み、
ロードが、部分的または完全に境界外であると判定されたとき、前記ロードの境界外部分の戻されたデータが、所定または任意の値である、
請求項1または2のいずれかに記載の方法。
【請求項4】
境界外参照を防ぐために、前記ロードおよび格納命令から境界内マスクを作り出すことをさらに含む、請求項1ないし3のいずれかに記載の方法。
【請求項5】
例外が、前記境界外参照をログ記録または格納するために使用される、請求項1ないし4のいずれかに記載の方法。
【請求項6】
アドレス内のインデックス値の予備のコピーが、レジスタに格納され、
アドレス内の前記インデックス値が、命令が境界外参照を行うかどうかを判定する際に、前記予備のコピーと比較される、請求項1ないし5のいずれかに記載の方法。
【請求項7】
前記判定することが、ポインタの前記値を前記ポインタに関連付けられた境界情報と比較することを含む、請求項1ないし6のいずれかに記載の方法。
【請求項8】
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された前記開始アドレス、前記命令で指定された前記データ長、および境界外参照の前記値のうちの少なくとも1つを修正することを含む、前記ロードまたは前記格納の前記実行を変更する、請求項1に記載の方法。
【請求項9】
境界外メモリ参照を行うことからプログラムを保護するためのシステムであって、前記システムが、
コンピュータ命令を格納するメモリと、
プロセッサであって、
バッファからデータをロードするまたは前記バッファにデータを格納する命令が前記バッファの前記境界の外側のアドレスを参照する境界外参照を前記命令が行うかどうかを判定すること、および
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された開始アドレス、前記命令で指定されたデータ長、または境界外参照の値を修正することを含む、前記ロードまたは前記格納の実行を変更すること
を行うための前記コンピュータ命令を実行するように構成された、プロセッサと
を備える、システム。
【請求項10】
完全に境界外のアドレスを前記命令が参照すると前記判定することに応答して、ロードまたは格納コマンドを発行しないことと、
実行後にどの境界外参照が直されなければならないかを識別することと、
前記境界外参照の格納済みバージョンから、前記識別された境界外参照を直すことと
をさらに含む、請求項9に記載のシステム。
【請求項11】
前記境界外参照をログ記録することをさらに含み、
ロードが、部分的または完全に境界外であると判定されたとき、前記ロードの境界外部分の戻されたデータが、所定または任意の値である、
請求項9または10のいずれかに記載のシステム。
【請求項12】
境界外参照を防ぐために、前記ロードおよび格納命令から境界内マスクを作り出すことをさらに含む、請求項9ないし11のいずれかに記載のシステム。
【請求項13】
例外が、前記境界外参照をログ記録および格納するために使用され、
アドレス内のインデックス値の予備のコピーが、レジスタに格納される、
請求項9ないし12のいずれかに記載のシステム。
【請求項14】
前記判定することが、ポインタの前記値を前記ポインタに関連付けられた境界情報と比較することを含む、請求項9ないし13のいずれかに記載のシステム。
【請求項15】
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された前記開始アドレス、前記命令で指定された前記データ長、および境界外参照の前記値のうちの少なくとも1つを修正することを含む、前記ロードまたは前記格納の前記実行を変更する、請求項9に記載のシステム。
【請求項16】
境界外メモリ参照を行うことからプログラムを保護するためのコンピュータ・プログラム製品であって、請求項1ないし8のいずれかに記載の方法を実施するための、処理回路によって可読の、および前記処理回路による実行のための命令を格納する、コンピュータ可読ストレージ媒体を備える、コンピュータ・プログラム製品。
【請求項17】
コンピュータ可読媒体に格納され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されるときに、請求項1ないし8のいずれかに記載の方法を実施するためのソフトウェア・コード部分を備える、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラムの安全な実行のための方法、装置、およびシステムの実施形態に関し、より詳細には、しかし限定のためではなく、境界外参照を行うプログラムの安全な実行のための方法、装置、およびシステムに関する。
【背景技術】
【0002】
メモリ安全脆弱性(例えば、バッファ・オーバーフロー、競合状態、ページ・フォールト、ヌル・ポインタ、スタック枯渇、ヒープ枯渇/破損、ユース・アフター・フリー、またはダブル・フリー等)は、ソフトウェアが、システム・メモリのアロケート・サイズおよびメモリ・アドレスを越えてシステム・メモリに、偶然または意図的にアクセスするときに起こる。
【0003】
特定のオペレーティング・システムおよび他のプログラムで広く使用されてきたCおよびC++などのプログラムは、リモート・コード実行または特権昇格不備などの危険かつ侵入性の結果を伴う、攻撃者が活用可能な複数のメモリ安全性エラーにつながり得る。例えば、境界外メモリを読むことによって、攻撃者は、保護メカニズムを迂回可能な、メモリ・アドレスなどの秘密の値を得ることができることがある。
【0004】
したがって、メモリ安全脆弱性を効率的に低減または取り除くことが可能な技術を有し、前述の問題に対処する必要がある。
【発明の概要】
【0005】
第1の態様から見ると、本発明は、境界外メモリ参照を行うことからプログラムを保護する方法を提供し、方法は、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定することと、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、または境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することとを含む。
【0006】
さらなる態様から見ると、本発明は、境界外メモリ参照を行うことからプログラムを保護するためのシステムを提供し、システムは、コンピュータ命令を格納するメモリと、プロセッサであって、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定すること、および、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、または境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することを行うためのコンピュータ命令を実行するように構成された、プロセッサとを備える。
【0007】
さらなる態様から見ると、本発明は、境界外メモリ参照を行うことからプログラムを保護するためのコンピュータ・プログラム製品であって、本発明のステップを実施するための方法を実施するための、処理回路によって可読の、および処理回路による実行のための命令を格納する、コンピュータ可読ストレージ媒体を備える、コンピュータ・プログラム製品を提供する。
【0008】
さらなる態様から見ると、本発明は、コンピュータ可読媒体に格納され、デジタル・コンピュータの内部メモリにロード可能なコンピュータ・プログラムであって、前記プログラムがコンピュータ上で実行されるときに、本発明のステップを実施するためのソフトウェア・コード部分を備える、コンピュータ・プログラムを提供する。
【0009】
さらなる態様から見ると、本発明は、プログラム命令を具体化したコンピュータ可読ストレージ媒体を備えるコンピュータ・プログラム製品を提供し、プログラム命令が、境界外メモリ参照を行うことからプログラムを保護するための方法をコンピュータに実施させるためにコンピュータによって可読かつ実行可能であり、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定することと、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、または境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することとを含む。
【0010】
さらなる態様から見ると、本発明は、境界外メモリ参照を行うことからプログラムを保護するための方法を提供し、方法は、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照するかどうかを立証することと、命令がバッファの境界の外側のアドレスを参照すると判定することに応答して、バッファの境界内部にあるデータを命令がロードまたは格納するように、命令で指定された開始アドレスまたは命令で指定されたデータ長、あるいは命令で指定された開始アドレスおよび命令で指定されたデータ長の両方を修正することとを含む。
【0011】
さらなる態様から見ると、本発明は、境界外参照を行うアプリケーションをセキュアにするためのシステムを提供し、システムは、コンピュータ命令を格納するメモリと、プロセッサであって、プログラムのために境界外にある参照を識別すること、ロード動作のために、部分的に境界外参照のアドレス、長さ、または値を変更すること、および、格納動作のために、部分的に境界外参照のためのアドレスまたは長さを変更することを行うためのコンピュータ命令を実行するように構成された、プロセッサとを備える。
【0012】
前述の背景技術の前述および他の問題、短所、および欠点を考慮して、開示の発明の例示的な態様は、境界外参照を行うプログラムの安全な実行のための方法、装置、およびシステムを提供する。
【0013】
実施形態は、境界外メモリ参照を行うことからプログラムを保護するための方法を含み、方法は、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定することと、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、および境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することとを含む。
【0014】
実施形態は、境界外メモリ参照を行うことからプログラムを保護するためのシステムを含み、システムは、コンピュータ命令を格納するメモリと、プロセッサであって、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定すること、ならびに、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、および境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することを行うためのコンピュータ命令を実行するように構成された、プロセッサとを備える。実施形態は、インデックス値の別個のコピーを保つために、レジスタ内にある未使用ビットを含むことができる。
【0015】
別の実施形態は、プログラム命令を具体化したコンピュータ可読ストレージ媒体を備えるコンピュータ・プログラム製品を含み、プログラム命令が、境界外メモリ参照を行うことからプログラムを保護するための方法をコンピュータに実施させるためにコンピュータによって可読かつ実行可能であり、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照する境界外参照を命令が行うかどうかを判定すること、部分的に境界外のアドレスを命令が参照すると判定することに応答して、バッファの境界内部にあるデータをロードまたは格納するために、命令で指定された開始アドレス、命令で指定されたデータ長、または境界外参照の値を修正することを含む、ロードまたは格納の実行を変更することを含む。実施形態は、インデックス値の別個のコピーを保つために、レジスタ内にある未使用ビットを含むことができる。
【0016】
別の実施形態は、境界外メモリ参照を行うことからプログラムを保護する方法を含み、方法は、バッファからデータをロードするまたはバッファにデータを格納する命令がバッファの境界の外側のアドレスを参照するかどうかを立証することと、命令がバッファの境界の外側のアドレスを参照すると判定することに応答して、バッファの境界内部にあるデータを命令だけがロードまたは格納するように、命令で指定された開始アドレスまたは命令で指定されたデータ長あるいはその両方を修正することとを含む。
【0017】
別の実施形態は、境界外参照を行うアプリケーションをセキュアにするためのシステムのためのシステムを備え、システムは、コンピュータ命令を格納するメモリと、プロセッサであって、プログラムのために境界外にある参照を識別すること、ロード動作のために、部分的に境界外参照のアドレス、長さ、または値を変更すること、および、格納動作のために、部分的に境界外参照のためのアドレスまたは長さを変更することを行うためのコンピュータ命令を実行するように構成された、プロセッサとを備える。
【0018】
このように、本明細書の詳細な説明がより良く理解され得るように、および、技術への本貢献がより良く認識され得るように、本発明の特定の実施形態がやや広く概説されてきた。当然、下記で説明され、本明細書に添付の特許請求の範囲の主題を形成することになる、本発明の追加の実施形態がある。
【0019】
本発明は、以下の説明において説明される、または図面に示される、構成の詳細に、および構成要素の配置に、その用途が限定されないことを理解されたい。本発明は、説明されるものに追加して具体化する能力、ならびに様々な方式で実践および実行される能力がある。また、本明細書で採用される専門語および専門用語、ならびに要約は、説明のためのものであり、限定とみなされるべきではないことを理解されたい。
【0020】
したがって、当業者は、本開示が基づく概念が、本発明のいくつかの目的を実行するための、他の構造、方法、およびシステムのデザインの基礎として容易に利用され得ることを理解するであろう。したがって、特許請求の範囲は、本発明の範囲から逸脱しない限り、このような同等の構造を含むとみなされることが重要である。
【0021】
本発明の例示的態様は、図面を参照しながら、本発明の例示的実施形態の以下の詳細な説明から、より良く理解されるであろう。
【図面の簡単な説明】
【0022】
図1】境界外参照の例の図である。
図2】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法の図である。
図3】本明細書で説明される1つまたは複数の実施形態による、ロードおよび格納の実行を変更することを含む実例の非限定的な方法の図である。
図4】本明細書で説明される1つまたは複数の実施形態による、境界外参照が例外を通じてログ記録可能であることを含む実例の非限定的な方法の図である。
図5】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法の図である。
図6】本明細書で説明される1つまたは複数の実施形態による、境界情報が利用可能であることを含む実例の非限定的な方法の図である。
図7】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な境界情報レジスタ・ファイルの図である。
図8】本明細書で説明される1つまたは複数の実施形態による、境界内マスクを生成することを含む実例の非限定的な方法の図である。
図9】本明細書で説明される1つまたは複数の実施形態による、境界外をチェックすることを含む実例の非限定的な方法の図である。
図10】本明細書で説明される1つまたは複数の実施形態による、アドレスの変更を含む実例の非限定的な方法の図である。
図11】本明細書で説明される1つまたは複数の実施形態による、値の変更を含む実例の非限定的な方法の図である。
図12】本明細書で説明される1つまたは複数の実施形態による、インデックスを保護する実例の非限定的な方法の図である。
図13】本明細書で説明される1つまたは複数の実施形態による、レジスタの実例の非限定的な図である。
図14】本明細書で説明される1つまたは複数の実施形態による、予備のビットをレジスタに追加することについての実例の非限定的な図である。
図15】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法の図である。
図16】本明細書で説明される1つまたは複数の実施形態による、インデックス・フィールドをセットすることを含む実例の非限定的な方法の図である。
図17】本明細書で説明される1つまたは複数の実施形態による、メモリにポインタを格納することを含む実例の非限定的な方法の図である。
図18】本明細書で説明される1つまたは複数の実施形態による、メモリからポインタをロードすることを含む実例の非限定的な方法の図である。
図19】本明細書で説明される1つまたは複数の実施形態による、ポインタ・インデックスを生成することを含む実例の非限定的な方法の図である。
図20】本明細書で説明される1つまたは複数の実施形態による、インデックスをチェックすることについての実例の図である。
図21】本明細書で説明される1つまたは複数の実施形態による、保護の例としてレジスタ値を示す図である。
図22】本明細書で説明される1つまたは複数の実施形態による、保護の例としてレジスタ値を示す図である。
図23】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的なシステムの図である。
図24】本明細書で説明される1つまたは複数の実施形態による、境界情報(BI:boundsinformation)テーブルの実例の非限定的な図である。
図25】本明細書で説明される1つまたは複数の実施形態による、実例の非限定的なシステムの図である。
図26】本明細書で説明される1つまたは複数の実施形態による、境界情報(BI)テーブルの実例の非限定的な図である。
図27】本発明の実例の実施形態を組み込むための例示的なハードウェア/情報ハンドリング・システムの図である。
図28】本発明の実例の実施形態による、クラウド・コンピューティング・ノードの図である。
【発明を実施するための形態】
【0023】
以下の詳細な説明は例証にすぎず、実施形態、または実施形態の用途もしくは使用法、あるいはその両方を限定することを意図するものではない。さらに、前述の背景技術もしくは発明の概要セクションで、または発明を実施するための形態セクションで提示された、いずれかの表現または示唆した情報によって束縛される意図はない。
【0024】
1つまたは複数の実施形態が、描かれた図を参照しながらここで説明され、図では全体を通して、同様の参照番号が同様の部品を指す。一般的なやり方に従って、図面の様々な特徴は、必ずしもスケーリングされていないことが強調される。反対に、様々な特徴の寸法は、明瞭さのために、任意に拡大または縮小されることがある。例示的実施形態が、例証のために下記で提供されるが、特許請求の範囲を限定しない。その上、ステップのいずれかは、異なるシーケンスで、または組み合わされて、または同時に、実施可能であることに注意されたい。追加として、示された構造および実施形態のいずれかは、修正または組み合わされることが可能である。
【0025】
メモリの境界から外れたメモリ参照は、深刻なセキュリティ問題を引き起こし得る。例えば、モリス・インターネット・ワーム(1988)といった、バッファ・オーバーフロー脆弱性が、少なくとも30年間、問題になってきた。バッファ・オーバーフローのバグは、バッファ-オーバーフロー・ベースのコード・インジェクション、リターン・オリエンテッド・プログラミング(ROP)、「HeartBleed」を含む、多くの形の攻撃を可能にしてきた。
【0026】
既存の方法は、境界外参照が検出されると、プログラム実行を異常終了させる。利点は、リリース前にデバッグするのに安全かつ良いということである。それでも、問題は、現実のアプリケーションが、いくつかの無害の境界外アクセスを含み得ることである。より良い性能のためのソフトウェアの投機的ロード、およびリリース前に検出されない小さなバグがあり得る。
【0027】
例えば「スタック・カナリー」、W XOR Xメモリ・ページ、ASLR、「シャドー・スタック」&「制御フロー完全性」を保護するための他のアプローチといった、バッファ・オーバーフロー攻撃またはバッファ・オーバーフロー攻撃の影響に対処するために、いくつかの作業が行われてきた。
【0028】
Oracle Silicon Secured Memory(SSM)は、メモリ内のデータに「色」をつけ、「間違った色」を有するポインタによるアクセスを防ぐ。SSMには、非常に限定的な数の色しかサポートせず、保護されるデータの粒度が64バイトであることなど、いくつかの限界がある。
【0029】
各メモリ参照、ロード、または格納が、そのメモリ境界内部であるかどうかをチェックすることが重要である。1つの既存の解決策は、INTEL(R) Memory Protection Extensions(MPX)システムである。MPXは、正確な境界チェックのための新しい命令およびハードウェア・サポートを導入した。メモリに、各バッファについての境界情報(BI)が、ポインタ値をキーとして格納/取り出される。コアにおいて、ポインタおよびそのBIが、レジスタ内にあり、マッピングが、コンパイラによって追加された予備の命令で維持される。元の計算および境界保護動作が、同じハードウェア・リソースを共有する。メモリ安全脆弱性を除去または低減させようとする他の方法がある。Intelは、Intel Corporationまたは米国および他の国のその子会社の商標または登録商標である。
【0030】
それでも、これらすべての他の解決策には、複数の命令を追加する必要があり、また、実装が高価であるという、1つの大きな問題がある。その結果として、命令の数が、4倍以上に増えることがあり、境界チェックがオフにされたときでも、実行時間が2倍以上に増える恐れがある。
【0031】
INTEL MPXは、正確な境界情報(BI)を用いて境界外参照からバッファを保護する。MPXは、ポインタ値のハッシングを通じて、バッファのBIをBIテーブルに格納する。ポインタについてのBIは、ポインタがロードされたときに、汎用レジスタに入れられる。ブックキーピング・コードは、レジスタ内のBIをその利用者、すなわちロードおよび格納命令に、伝搬させるために追加される。境界チェック命令は、ロードおよび格納前に挿入される。
【0032】
MPXに伴う追加の問題は、BIのロードが使用されないことがあり、BIのための2レベルのメモリ・アクセスがあることである。他の従来の方法には、BIエントリのロード・リクエストが過度になるという問題があり、BIは、同じ命令でロードおよび使用され、したがって、レイテンシが隠されない。
【0033】
アレイ要素へのポインタ参照を含むアレイ要素への参照がいつ境界外になるかを検出する必要がある(例えば、x[i]、*p++、p->foo)。
【0034】
既存のプログラムを書き換えることなく、および著しい空間または時間オーバヘッドがない状態で、これを行える必要がある。
【0035】
例えば、オフラインでバグを修復できることを含む、割り込まずに安全に実行することを、境界外参照をプログラムが行えるメカニズムを有する必要がある。
【0036】
ポインタ内の「未使用ビット」が境界情報のテーブルへのインデックスとして使用される場合の別の問題は、アレイ・インデックス作成またはポインタ計算が、インデックス値に「オーバーフロー」して破損させ得ることである。この場合、インデックス値が破損した場合、境界外参照は検出されないことがある。
【0037】
この種のシステムでは、ポインタ内のインデックス値の完全性を保護する必要もある。本発明は、実行される命令の数を増やさずに、上述の問題を解決する。
【0038】
本発明の実施形態は、正確な保護を提供し、バイトへの精度であらゆるバッファを保護する。本システムは、メモリ問題を有し得るC/C++アプリケーションおよび他のプログラムに適用可能であり、これらには、任意のポインタ計算があり、1つのアプリケーションにおいて保護されるべきバッファの数は、数千から数百万までに及び得る。
【0039】
図1は、境界外参照の例を示している。
【0040】
ツールを使用することによって、Intelアーキテクチャのためのglibcライブラリ(GNU(GNU's Not Unix(R))Cライブラリ)の様々な文字列ハンドリング関数において、境界外参照が発生したことがわかった。glibcライブラリは、Cプログラミング言語の定義によって振る舞いが指定される関数のセットを提供する。
【0041】
例えば、コンパイラが、クアッド・ワード2の投機的ロードを作り出した部分的な境界外参照が示されている。コンパイラが、クアッド・ワード4の投機的ロードを作り出した完全な境界外参照が示されている。
【0042】
これらの境界外参照の多くが、しばらく存在してきた。これらは、性能を改善するために導入されたものであり、セキュリティまたは他の問題を引き起こしたことがあることもないこともある。これらのバグはおそらく、修復されるべきだが、これは、しばらくかかることがある。
【0043】
実施形態では、マイクロアーキテクチャ・レベルで、ロードおよび格納命令内の境界情報が利用可能であることが想定される。マイクロアーキテクチャ・レベルは、抽象化階層のISA(インストラクション・セット・アーキテクチャ)レベルのすぐ下にあり、したがって、ISAによって定義されたような、コンピュータによってサポートされるべき基礎動作の実行に関係がある。ISAは、プロセッサによってサポートされるべき命令のタイプを定義している。
【0044】
図2は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法を示している。実施形態では、プログラムは、境界外参照が後でデバッグされることを依然として可能にしつつ、割り込むことなくロードおよび格納動作を安全に実行することができる。境界情報はチェックされ、ロードおよび格納動作の振る舞いは、安全な実行のために適宜変更される。
【0045】
実施形態では、境界外参照を行うプログラムの安全な実行20を行うために、ロードおよび格納命令に境界チェックを統合する30。実施形態では、ロードおよび格納のために境界外をチェックすることができる32。境界外の場合、ロードおよび格納の実行を変更することができる34。境界外参照が例外を通じてログ記録されることが可能である36。境界外ロードを行うアプリケーションの安全な実行38。実施形態の方法は、ハードウェアまたはソフトウェアあるいはその両方で実行可能である40。したがって、実施形態には多くの柔軟性がある。
【0046】
図3は、本明細書で説明される1つまたは複数の実施形態による、ロードおよび格納の実行を変更することを含む実例の非限定的な方法を示している。図3を参照すると、実施形態では、アドレスを変更すること102、またはロードおよび格納サイズを変更すること104ができる。保護およびデバッグのために、ロード命令の境界外部分の戻された値を変更すること106もできる。
【0047】
図4は、本明細書で説明される1つまたは複数の実施形態による、境界外参照が例外を通じてログ記録可能であることを含む実例の非限定的な方法を示している。図2および図4を参照すると、境界外参照が例外を通じてログ記録されることが可能であるが、実行の異常終了を引き起こさない36。実施形態では、境界外参照が修復される必要があるかどうかを判定する110。
【0048】
したがって、実施形態では、必要な場合、境界外参照を後で修復することができる112、または図4に示されたように、修復する理由がない場合、境界外参照を変更しない114。
【0049】
実施形態では、図2を再び参照すると、境界外ロードを行うアプリケーションの安全な実行を実現することができる38。アプリケーションの安全な実行、および境界外参照が例外を通じてログ記録されることが可能である。実施形態では、秘密を漏らさない能力がある。実施形態では、アプリケーションを動かし続ける能力がある。
【0050】
実施形態では、ハードウェアまたはソフトウェアあるいはその両方で実行される能力がある40。実施形態では、マイクロアーキテクチャに追加される能力がある。実施形態では、プログラムに搭載される能力がある。1つまたは複数の実施形態の方法は、また、ハードウェアおよびソフトウェア両方の混合として実施されることが可能である。
【0051】
図5は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法を示している。
【0052】
実施形態では、境界情報がマイクロアーキテクチャ・レベルでロードおよび格納命令内で利用可能であること70が想定される。システムは、次いで、下記でさらに詳述されるような、境界外情報をチェックするのに役立つ境界内マスクを生成することができる72。システムは、生成された境界内マスク72から、境界外情報をチェックすることができる74。実施形態では、アドレスは変更されることが可能である76、または移送されるべきバイト数は、境界内データだけをカバーするように変更可能である、あるいはその両方である。例えば、命令が、サイズ8のロード・アドレスpを指定する場合、およびバッファが、p+4からp+8に進む場合、ロードの開始アドレスがp+4に、およびサイズが4に変更される。
【0053】
実施形態では、境界外情報に対応するロードについての戻される値は変更可能である78。リード/ロードの場合、これは、機密情報を漏らすのを避けるために、現実の「境界外」データの代わりに(例えば、すべて0であることが可能な)にせのデータを戻す命令である。それでも、実施形態では、システムは、これが有効なデータを破損させることがあるので、ライト/格納時に境界外情報を変更しない79。
【0054】
図6は、本明細書で説明される1つまたは複数の実施形態による、境界情報が利用可能であることを含む実例の非限定的な方法を示している。実施形態では、境界情報がマイクロアーキテクチャ・レベルでロードおよび格納命令内で利用可能であること70が想定される。バッファの境界は、下限(LB)および上限(UB)であることが可能である82。
【0055】
図7は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な境界情報レジスタ・ファイルを示している。
【0056】
図7を参照すると、境界情報レジスタ・ファイル2018の各BI(境界情報)レジスタ92は、例えば、少なくとも3つのフィールド(インデックス94、LB(下限:lower bounds)96、UB(上限:upper bounds)98)を有する。例でわかるように、上限(UB)98は、一番右のセルである。
【0057】
ポインタ内の「未使用ビット」は、ポインタを介してアクセス可能なアドレスの範囲をチェックするか、または追跡し続けるために再利用可能である。例えば、64ビット・アーキテクチャでは、48ビット以下の情報を有する仮想アドレスを一般に格納するので、オブジェクト・ポインタには未使用ビットがある。開示の技術は、後で論じられるように、インデックスのコピーを保管するために、これらの未使用ビットを活用することができる。
【0058】
図6を再び参照すると、ロードまたは格納されることになるデータのアドレスおよびサイズは、ロードまたは格納命令から利用可能である84。実施形態では、データのサイズは、バイトで表現される86。
【0059】
図8は、本明細書で説明される1つまたは複数の実施形態による、境界内マスクを生成することを含む実例の非限定的な方法を示している。
【0060】
実施形態では、システムは、以下のように境界内マスクを生成する72。システムは、生成された境界内マスク72から、境界外情報をチェックすることができる74。システムは、例えばr_mask102を登録し、マスク内のビットが「1」のとき、その結果参照のためのデータの対応するバイトが境界内にある。r_mask内のエントリは、境界外の場合、「ゼロ」である。システムは、次いで、以下の例においてマスクを初期化し104、ここで、アドレスは、下限(LB)以上かつ上限(UB)以下であり、変数「i」は、ゼロ以上かつデータ・サイズ未満である。
初期化する:LB≦addr+i≦UBの場合、r_mask[i]=1であり、そうでなければ0であり、ここで、0≦i<datasizeである。
【0061】
図9は、本明細書で説明される1つまたは複数の実施形態による、境界外をチェックすることを含む実例の非限定的な方法を示している。
【0062】
実施形態では、境界外は、システムによってチェックまたは判定される74。システムは、r_mask[0:datasize)がすべて「1」である場合、データが境界内にあると判定する110。したがって、r_mask内のエントリすべてが「1」のとき、その結果これは、すべて境界内である。次いで、参照は、正常にハンドリングされる116。
【0063】
ロードまたは格納で指定されたアドレスが、バッファの境界内部にあるいくつかのアドレス、および、バッファの境界内部にないいくつかのアドレスを含む場合、バッファへのロードまたは格納は、部分的に境界外である。ロードまたは格納で指定されたアドレスが、すべてバッファの境界の外側にある場合、バッファへのロードまたは格納は、全面的または完全に境界外である。
【0064】
システムは、マスク内のエントリがすべてゼロの場合、対応するデータが全面的または完全に境界外であると判定する112。r_mask[0:datasize)がすべて0の場合、対応するデータが全面的に境界外であると判定される。次いで、システムは、ロードおよび格納コマンドを発行しない118。システムは、「ゼロ」および「1」両方であるエントリをマスクが含む場合(すなわち、r_mask[:datasize)が、0および1両方を含む場合)、対応するデータが部分的に境界外であると判定する114。対応するデータが部分的に境界外であるとシステムが判定すると114、システムは、特殊なハンドリング命令を発行する120。
【0065】
命令の特殊なハンドリング120に関して、部分的な境界外をハンドリングするための少なくとも2つのアプローチがある。1つのアプローチは、必要な場合、いくつかの修正された参照を使用して、データ・アドレスまたは参照のサイズあるいはその両方を修正することによって、参照を修正すること202である。別のアプローチは、結果を修正することである。つまり、明らかにされないように境界外値を(リードのために)マスクする204。
【0066】
図10は、本明細書で説明される1つまたは複数の実施形態による、アドレスの変更を含む実例の非限定的な方法を示している。
【0067】
システムは、以下のように、アドレスを変更する76。ハードウェアによってサポートされるロード/格納命令のためのデータ・サイズに対するいくつかの限界があり得る。アドレスおよびサイズを単に変更することは、機能しないことがある。
【0068】
システムは、部分的な参照を発行する120。1つのアプローチでは、システムは、以下の例に示された1バイト・サイズなど、システムによってサポートされる、より小さいデータ・サイズで、ロードおよび格納動作を使用する122。
【0069】
例えば、元の参照が、サイズ8バイトであり、最初の3バイトだけが境界内にある場合、ほとんどのハードウェアは、サイズ3バイトの参照をサポートしない。システムは、マスク値に応じて、3つの1バイト参照を発行しなければならなくなる。
【0070】
境界内のバイトは、データ内の任意の場所にあってもよい。システムは、マスクをスキャンし、バイト・サイズ参照を適宜発行するだけである。下限/上限表現が想定される場合、境界内のバイトは、連続することになる。実例の実施形態に示された方法は、この想定に限定されない。
【0071】
別のアプローチでは、システムは、以下のように、1つまたは複数の動作で境界内データすべてをカバーする124。
For(i=0;i<datasize;i++){
if r_mask[i]==1
対応するデータで/に対してaddr+iのためのバイト参照を発行する
}
ロードのために、最終結果を組み立てる。
【0072】
これは、第2のアプローチである。例えば、元のロードが、サイズ8バイトであり、最初の3バイトだけが境界内の場合、ロードは、修正せずに発行され、8バイトの結果がある。システムは、8バイトすべてではなく、最初の3バイトだけをユーザに与えるはずである。残りの5バイトについて、システムは、値をゼロまたはランダム値に置き換えることができる。マスク値は、このような置換えを誘導するために使用される。
【0073】
この例の詳細は、戻り値が0x0102030405060708(バイトに対して16進法で2桁)であることを想定する。マスクは、2進法で11100000であるはずである。マスクで誘導された結果値は、ゼロを使用する場合、0x0102030000000000に変更可能である。
【0074】
図11は、本明細書で説明される1つまたは複数の実施形態による、値の変更を含む実例の非限定的な方法を示している。
【0075】
実施形態では、値は、以下のように変更される78。境界内部分の値は、プログラムが継続できるように、そのままにされる。境界外部分には、ゼロまたはランダム値が与えられることが可能である130。例えば、ファズ・テスト140が使用可能である。ファジングまたはファズ・テストは、無効の、予期しない、またはランダムなデータを、コンピュータ・プログラムへの入力として提供することを伴う、自動化されたソフトウェア・テスト技術である。プログラムは、次いで、クラッシュ、ビルトイン・コード・アサーションの失敗、または潜在的なメモリ・リークなどの例外についてモニタされる。
【0076】
以下は、詳細な実装形態である。前に言及されたように、r_mask[i]が0の場合、データ内の対応するバイト(8ビット)は、0であるはずである。前の例では、d_maskは、0xffffff0000000000になるはずである。したがって、(値&d_mask)は、0x0102030000000000を与えるはずである。
【0077】
システムは、以下のように、データのバイト・マスクをビット・マスクに拡大する132。
d_mask[8*i+j]=r_mask[i] (r_mask範囲内のi、および0≦j<8)
したがって、新しいビットd_maskは、バイト・マスクr_maskを拡大することによって生成される132。
システムは、ランダム値:random_vを生成する134。
【0078】
ロードについて136、システムは、元のロードget r_valueを発行し142、戻り値r_destを生成し144、ここで、r_dest=(r_value&d_mask)|(random_v&~d_mask)である。
【0079】
格納について138、システムは、格納されるべき値の境界内部分しか格納しない148。
【0080】
したがって、境界外チェックをロードおよび格納命令と統合するための、ハードウェアまたはソフトウェアあるいはその両方の解決策が提供される。実施形態では、システムは、終了させることなく、および、境界外値を明らかにすること/修正することなく、境界外ロードおよび格納命令を安全に実行することができる。ランダム値は、より良い脆弱性検出およびデバッグのために、上記に示されたように、ロードの境界外部分に挿入可能である。実施形態は、部分的および完全に境界外のロードおよび格納を安全にハンドリングすることができる。
【0081】
図12は、本明細書で説明される1つまたは複数の実施形態による、インデックスを保護する実例の非限定的な方法を示している。
【0082】
前に言及したように、インデックス・ビットがポインタ算術演算によって変更され得るので、現在のシステムには問題がある。その上、境界外アクセスは、インデックス破損のため、検出されないことがある。これらの問題を解決するために、実施形態は、インデックスを保護する。
【0083】
システムは、302においてインデックスを保護し始める。システムは、ポインタ内のインデックス値の別個のコピーを保つために予備のビットをレジスタに導入する304。実施形態では、システムは、ポインタとは別個に元のインデックス値を格納する316。追加として、別個のコピーを用いて、算術演算がインデックスのこのコピーに触れることはない318。
【0084】
システムは、破損したポインタがメモリに格納されたとき、正しいインデックスを格納するためのテーブルを導入する306。正しいインデックスは、算術演算ならびにロードおよび格納を通じてハードウェアによって自動的に維持される308。ロードおよび格納動作のための境界チェックでは、アドレス・ポインタ内のインデックス値は、別個に格納されたインデックス値と最初に照合される310。アドレス・ポインタ内のインデックス値および別個に格納されたインデックス値が同じでないと判定された場合、例外が引き起こされる312。
【0085】
アドレス・ポインタ内のインデックス値と別個に格納されたインデックス値とが同じであると判定された場合、例外は引き起こされない314。アドレス・ポインタ内のインデックス値および別個に格納されたインデックス値は、ロードおよび格納動作においてのみ、同じでなければならない320。
【0086】
図13は、本明細書で説明される1つまたは複数の実施形態による、レジスタの実例の非限定的な図を示している。
【0087】
例えば、新しいレジスタはRi330であるはずであり、Ri330は、元のレジスタRi.value332、およびレジスタの拡張Ri.index334を含み(ここで、iは、レジスタ番号を表す整数である)、これは、以下で、さらに説明される。拡張Ri.index334と共に、インデックスは、インデックスの別個のコピーを有することによって保護される。
【0088】
図14は、本明細書で説明される1つまたは複数の実施形態による、予備のビットをレジスタに追加することについての実例の非限定的な図を示している。
【0089】
システムは、インデックス値のコピーを保持するために、予備のビットをレジスタに導入する304。各レジスタは、350において2つのフィールドすなわち値(すなわち、Ri.value332)およびインデックス(Ri.index334)を有するものとみなされることが可能である。例えば、第5のレジスタR5は、2つのフィールド:R5.valueおよびR5.indexを有し、ここでi=5である。元の命令は、値フィールド(Ri.value332)だけに対して動作する352。インデックス・フィールド(Ri.index334)に対する追加の動作は、本開示で指定されることになる。
【0090】
インデックス部分(Ri.index334)は、また、非ポインタをマークするために使用される354。インデックス部分は、下記でさらに説明されるように、「NONE」にセット可能である。
【0091】
インデックス・フィールド(Ri.index334)は、マシン状態の一部でもある356。インデックス・フィールド(Ri.index334)は、コンテキスト・スイッチにおいて、保存および復元されることになる。コンテキスト・スイッチは、後でプロセスまたはスレッドの状態を復元および再開できるように、プロセスまたはスレッドの状態を格納するプロセスである。これは、複数のプロセスが単一の中央処理ユニット(CPU)を共有することを可能にし、マルチタスク・オペレーティング・システムの不可欠の特徴である。
【0092】
図15は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的な方法を示している。
【0093】
304において、新しいレジスタ330を作り出すために、予備のビットがレジスタに追加される。342において、レジスタRi330のインデックス・フィールドRi.index334がセットされる。ロードおよび格納において、システムは、インデックスをチェックする343。システムは、ポインタをメモリに格納し344、メモリからポインタをロードし346、これは、以下でさらに説明されることになる。
【0094】
図16は、本明細書で説明される1つまたは複数の実施形態による、インデックス・フィールドをセットすることを含む実例の非限定的な方法を示している。
【0095】
342において、レジスタのインデックス・フィールドのセットが始まる。インデックス・フィールドは、ハードウェアによって自動的にセットされる402。レジスタに即値が割り当てられると、結果レジスタのインデックスは、「NONE」にセットされる404。例えば、第5のレジスタ値がR5=10のとき、インデックスは、以下のようにセットされる:R5.index=NONE。
【0096】
レジスタがメモリからロードされると404、その結果このロードが、ポインタのロードであるとマークされた場合、ロードされたポインタ内のインデックス値は、結果レジスタのインデックス・フィールドにコピーされることになる412。例えば、R5=ロード・ポインタR3のとき:R5.index=get(index(R5.value)と表された)ポインタ値からのインデックスである。そうでなければ、414において、結果レジスタのインデックスは、「NONE」にセットされる。例えば、R5=load R3:R5.index=NONEである。
【0097】
レジスタが1つのレジスタから計算されると408、システムは、インデックスをソース・レジスタから結果レジスタにコピーする。例えば、R5=add R3、100:R5.index=R3.indexである。
【0098】
レジスタが2つのレジスタで計算されると410、ソース・レジスタのうちのただ1つが「NONE」インデックスを有していない場合、システムは、このインデックスを結果レジスタにコピーする416。例えば、R5=Add R3、R4の場合、ならびにR3.index!=NONE、およびR4.index==NONEの場合、R5.index=R3.indexである。
【0099】
そうでなければ、システムは、結果レジスタのインデックスを「NONE」にセットする418。例えば、
R5=Add R4、R3、ならびにR4.index==NONEおよびR3.index==NONEの場合、R5.index=NONEであり、R5=sub R4、R3、ならびにR4.index!=NONEおよびR3.index!=NONEの場合、R5.index=NONEである。
【0100】
図17は、本明細書で説明される1つまたは複数の実施形態による、メモリにポインタを格納することを含む実例の非限定的な方法を示している。
【0101】
システムは、ポインタをメモリに格納し始める344。ポインタのインデックス部分が変更された場合、その結果ポインタの元のインデックスは、格納されなければならない430。予備の情報を格納するために、ソフトウェア内の別個の「pointer_index」(ポインタ・インデックス)テーブルが使用される432。テーブルは、ハッシュ・テーブル434もしくは辞書436、または他の任意のタイプのテーブルであることが可能である。
ポインタをメモリに格納するための疑似コードは、以下の通りである。
// Rx、Riを格納する
Rxの境界、つまりアドレスをチェックする;
Riの値をRx内のアドレスに書き込む;
if (Ri.index != index(Ri.value)) { //インデックスが破損している
pointer_index[Ri.value] = Ri.index;
}
【0102】
図18は、本明細書で説明される1つまたは複数の実施形態による、メモリからポインタをロードすることを含む実例の非限定的な方法を示している。
【0103】
メモリからポインタをロードすることが、346において開始される。ロードがポインタに対するものである場合346、結果レジスタのインデックス・フィールドがセットされなければならない450。ロードされたポインタ値が、pointer_indexテーブル内にある場合、その結果システムは、テーブルからのインデックス値を使用する452。ない場合、システムは、ポインタ値におけるインデックスを使用する454。
【0104】
メモリからポインタをロードするための疑似コードは、以下の通りである。
// Ri=load Rx
Rxの境界、つまりアドレスをチェックする;
Rx内のアドレスからの値をRi.valueフィールドに読み込む
if (pointer_index[Ri.value] != NULL) { // インデックスが破損している
Ri.index = pointer_index[Ri.value];
} else {
Ri.index=index(Ri.value);
}
【0105】
図19は、本明細書で説明される1つまたは複数の実施形態による、ポインタ・インデックスを生成することを含む実例の非限定的な方法を示している。
【0106】
代替実施形態では、ポインタ・インデックス470を生成するために、グローバルなpointer_indexテーブル472を使用する代わりに、境界情報テーブルの各エントリは、独自のpointer_indexテーブルを有することができる474。これは、したがって、ポインタがロードされるときのルックアップを低減させる476。境界情報テーブル内のこのエントリを捜し出すために、正しいインデックスが、ポインタに格納されなければならない478。システムは、破損したインデックスをpointer_indexテーブルに置く480。
【0107】
格納するための実例の疑似コードは、したがって、以下の通りであるはずである。
// Rx、Riを格納する
Rxの境界、つまりアドレスをチェックする;
(Ri.index、addr(Ri.value))を、Rx内のメモリ・アドレスに書き込む;
if (Ri.index != index(Ri.value)) {
BI_table[Ri.index].pointer_index[address(Ri.value)]= index(Ri.value)
}
【0108】
ロードするための実例の疑似コードは、したがって、以下の通りであるはずである。
// Ri=load Rx
Rxの境界、つまりアドレスをチェックする;
Rx内のアドレスからの値をRi.valueフィールドに読み込む;
Ri.index = index(Ri.value);
temp =BI_table[Ri.index].pointer_index[address(Ri.value)]
if(temp != NULL){ // インデックスが破損している
index(Ri.value) = temp;
【0109】
図20は、本明細書で説明される1つまたは複数の実施形態による、インデックスをチェックすることについての実例の図を示している。
【0110】
ロードおよび格納において、システムは、値フィールド内のインデックスが、インデックス・フィールドに格納されたものと同じであるかどうかをチェックする490。例えば、
R5=load R3に対して、R3.value(index(R3.value))内の未使用ビットの値が、R3.indexと同じであるかどうかをチェックする。
【0111】
値フィールド内のインデックスが、インデックス・フィールドに格納されたインデックスと同じである場合、ポインタ内のインデックスは破損していない492。値フィールド内のインデックスが、インデックス・フィールド内の格納されたインデックスと同じでない場合、ポインタは破損しており、境界外例外が発せられるはずである494。
【0112】
図21は、本明細書で説明される1つまたは複数の実施形態による、保護の例としてレジスタ値を示している。
【0113】
この例では、アドレスが2バイトであり、第1のバイトが、未使用/インデックス・ビットであることが想定される。例えば、Index(R.value)は、第1のバイトであり、参照番号502および504で強調され、記されている。図21に見られるように、値「0x28」、およびインデックス値「2」を有するポインタがある。
【0114】
チェック・ロードは、以下の通りである。
index(R3.value)=3
R3.index=2
これにより、エラーが検出される。開示の実施形態がない場合、R3のアドレス値は2であり、これは、index=3について、BI_table(境界情報テーブル)で指定された境界内にあり得る。
【0115】
図22は、本明細書で説明される1つまたは複数の実施形態による、保護の例としてレジスタ値を示している。
【0116】
R3は、[2]において莫大な数で追加された後、[3]においてメモリに格納されることが想定される。インデックスが破損しているので、pointer_indexテーブルが、正しいインデックスを格納するために使用される。このポインタが、後で実行時にR2にロードされる場合、正しいインデックスが、pointer_indexテーブルから取得されることが可能である。システムは、[5]における減算後、[6]においてR3からのロードをチェックする。
命令[5]により、index(R3.value)=2
この前の一定期間に、ポインタのインデックス部分が破損したとしても、このロード時にポインタのインデックス部分の破損はない。
【0117】
開示の実施形態は、ポインタ内の境界情報のインデックスを格納するために、レジスタにフィールドを追加することを示す。実施形態はまた、算術命令のためのハードウェア・サポートのインデックス伝搬を示す。実施形態では、メモリへの破損したポインタの格納には、予備の動作が行われ、システムは、ポインタがメモリからロードされたとき、インデックス・フィールドを正しくセットする。アドレスレジスタ内のインデックス値をチェックするためのロードおよび格納の修正は、正しい境界情報が使用されることを確実にするためのものである。ポインタ内のインデックスが変更された場合、アドレスをロードおよび格納するためにポインタが使用されるときに、例外が引き起こされることになる。開示の実施形態は、偽陽性および偽陰性を取り除く。
【0118】
開示の実施形態は、メモリ参照の境界チェックのためにメタデータの完全性を保護する。開示の実施形態は、インデックスが、アドレス内の「未使用ビット」を使用して、境界外メモリ参照から保護する場合の、境界情報に対するインデックスの完全性を保護する。開示の実施形態は、インデックス値のセキュアなコピーを使用して、インデックス値の完全性を保護する。開示の実施形態は、プログラム実行を通じてセキュアなコピーを自動的に伝搬させる。開示の実施形態は、ロードおよび格納動作において、ポインタ内のインデックス値をセキュアなコピーと自動的に照合し、これらが異なる場合、例外を引き起こすことを含む。
【0119】
図23は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的なシステムを示している。
【0120】
システム2100は、CPU(中央処理ユニット)コア2010およびメモリ2020を含む。CPUコア2010は、命令フェッチおよびデコード2012、ALU(算術論理演算装置)2014、汎用レジスタ・ファイル2016、境界レジスタ・ファイル2018、境界処理ユニット2020を含む。
【0121】
システム2100は、アドレス内のインデックス・ビットを使用して適切な境界-情報にアクセスすることによって、ロードおよび格納命令に対して、境界処理ユニット2020などのハードウェアで境界チェックを実行する。したがって、例として、境界処理ユニット2020は、図2から図11に見られるような境界外参照を使用するプログラムの安全な実行20、およびまた、図12から図22に見られるようなインデックスの保護302など、上記で示された方法を実行するために使用可能である。
【0122】
汎用レジスタ・ファイルは、データ・キャッシュ2022と通信し、その一方で、境界レジスタ・ファイル2018は、境界情報(BI)キャッシュ2024と接続される。BI情報は、専用キャッシュ(BIキャッシュ2024)内のハードウェア編成2100内にキャッシュ可能である。BIキャッシュ2024は、メモリ2020内のBIテーブル2026へのアクセスからの任意の減速を制限する。
【0123】
図7を再び参照すると、境界情報レジスタ・ファイル218は、境界情報を提供するための、下限LB96および上限UB98を有するレジスタBIRn92を含むことができる。
【0124】
図23を参照すると、メモリ2020は、例えば、必要な境界テーブル・エントリの数がインデックス・テーブルのサイズを超過した場合に使用可能な、インデックス・テーブル2028および値/キー・テーブル2030を含む境界情報テーブル2026を含む。境界情報テーブル2026は、他の構成を有することが可能である。
【0125】
CPUコア2010は、インデックス・テーブル2028および値/キー・テーブル2030と情報を通信する。CPUコア10は、データをポインタの値を介して(経路2025)、値/キー・テーブル2030に提供しつつ、ポインタ内のインデックスを介して(経路2023)、データをインデックス・テーブル28に提供する。
【0126】
境界情報(BI)は、各バッファの開始アドレスおよび長さ、または各バッファの開始アドレスおよび終了アドレスを含む。インデックス・テーブル2028は、インデックスによるアクセスを含む。値/キー・テーブル2030は、ポインタ値をキーとして用いるアクセスを含む。CPUコア2010における命令実行は、境界情報を保持するためのBIレジスタ2018を含む。システム2100は、汎用レジスタ・ファイル2016における汎用レジスタと、境界レジスタ・ファイル2018における境界情報レジスタとの間のマッピングを維持する。レジスタ・ファイル2018内のポインタについての境界情報は、元の命令から捜し出されることが可能である。境界処理ユニットは、境界保護のための動作を実行する。
【0127】
境界レジスタ・ファイル18は、以下のようにさらに詳述される。境界レジスタ・ファイル2018内のレジスタ(例えば、128ビット)は、バッファの、開始アドレスおよび長さを含む境界情報を格納する。システム2100は、レジスタ2018内のポインタのBIを、マッピング、例えばFBを介して、見つけることができることを保証する。
【0128】
FB(R)=B:汎用レジスタR内のポインタのBIが境界レジスタB内にあることを意味する。簡単なマッピングが、iのすべての値について、FB(R)=Bであってもよい。
【0129】
このようなマッピングは、ポインタ・レジスタを介して境界情報にアクセスできることを可能にする。システム2100は、MPXのように、境界情報について演算するために別個の命令を使用しない。
【0130】
境界情報(BI)テーブル2026は、以下のようにさらに詳述される。
1つの実施形態では、BIテーブル2026は、インデックス・テーブル2028および値/キー・テーブル2030を含む、2つのサブ・テーブルを含む。境界情報(BI)テーブル2026は、上記で論じられたpointer_indexテーブルなど、他のテーブルを含むことができる。
【0131】
図24は、本明細書で説明される1つまたは複数の実施形態による、境界情報(BI)テーブルの実例の非限定的な図を示している。
【0132】
インデックス・テーブル2028における各エントリは、開始アドレス2040およびバッファ長2042を含む。値/キー・テーブル2030内の各エントリは、ポインタ値(キー)2050、開始アドレス2052、およびバッファ長2054を含む。値/キー・テーブル2030は、必要なときに大きくすることができ、ポインタ値で調べることができる。ポインタ値(キー)2050は、ポインタ2060のポインタ値2064から取得可能である。ポインタ2060のインデックス2062は、インデックス・テーブルのエントリを取得するために使用可能である。
【0133】
インデックス・テーブル2028は、各BIエントリが、ベース・アドレス・フィールド2040およびオブジェクト・サイズまたは長さフィールド2042を含む、複数のBIエントリ2029を含む線形テーブルとして編成可能である。インデックス・テーブル2028の各BIエントリ2029は、ヒープ・オブジェクトに関連付けられることが可能である。所与のオブジェクトに対応するインデックス・テーブル2028の特定のBIエントリ2029にアクセスすることは、単一のテーブル・ルックアップを含むことができる。単一のテーブル・ルックアップは、オブジェクト・アロケーション中に、ポインタ2060に埋込み可能なインデックス2062を使用することを含むことができる。
【0134】
図25は、本明細書で説明される1つまたは複数の実施形態による、実例の非限定的なシステムを示している。これは、非限定的な例であり、他の構成を作ることができる。システム2102は、CPU(中央処理ユニット)コア2010およびメモリ2020を含む。CPUコア2010は、命令フェッチおよびデコード2012、ALU(算術論理演算装置)2014、汎用ファイル・レジスタ2016、境界レジスタ・ファイル2018、境界処理ユニット2020を含む。汎用ファイル・レジスタは、データ・キャッシュ2022と通信し、その一方で、境界レジスタ・ファイル2018は、境界情報(BI)キャッシュ2024とリンクされる。境界情報(または境界-情報)キャッシュ2024は、メモリ2020内の境界情報テーブル2026へのアクセスからの任意の減速を制限するために追加されることが可能である。
【0135】
システム2102は、アドレス内のインデックス・ビットを使用して適切な境界-情報にアクセスすることによって、ロードおよび格納命令に対して、境界処理ユニット2020などのハードウェアで境界チェックを実行する。したがって、例として、境界処理ユニット2020は、図2から図11に見られるような、境界外参照を行うプログラムの安全な実行20、およびまた、図12から図22に見られるような、インデックスの保護302など、上記で示された方法を実行するために使用可能である。
【0136】
図26は、本明細書で説明される1つまたは複数の実施形態による、境界情報(BI)テーブルの実例の非限定的な図を示している。
【0137】
BIテーブル2026は、各BIエントリが、ベース・アドレス・フィールド2040およびオブジェクト・サイズまたは長さフィールド2042を含む、複数のBIエントリ2029を含む線形テーブルとして編成可能である。BIテーブル2026の各BIエントリは、ヒープ・オブジェクトに関連付けられることが可能である。所与のオブジェクトに対応するBIテーブル2026の特定のBIエントリにアクセスすることは、単一のテーブル・ルックアップを含むことができる。単一のテーブル・ルックアップは、例えば、オブジェクト・アロケーション中に、ポインタに埋込み可能なインデックスを使用することを含むことができる。
【0138】
図25を再び参照すると、CPUコア2010は、経路2023および2025を介してメモリ内のBIテーブル2026と情報を通信する。やはり、これは例にすぎないので、異なる構成も提供可能である。
【0139】
一般に、本発明は、境界情報(または、例えば、境界線情報(boundary information)または境界-情報と呼ばれる)を保持するためにBIレジスタ2018を導入する。ロードおよび格納命令のための境界チェックのために境界情報がロードされると、システム2102は、これをBIレジスタ2018に保存する。
【0140】
システム2102は、同じバッファからロードするためのBIのロードを避ける。システム2102は、ハードウェアによってBIレジスタ2018を維持することができる。本発明は、ポインタが単に同じレジスタを使用するのではなく、同じバッファを指し示すように、BIレジスタ2018の間にBIを伝搬させることができる。本発明によってコードに追加される予備の命令はない。システム2102は、ポインタがメモリ2020からロードされるときに、BIレジスタ2018をロードする。本発明は、レイテンシを隠すためにBIをプリフェッチし、BIをより多くのポインタに伝搬させることができ、無駄なプリフェッチを避けるのをコンパイラによって助けられる。
【0141】
実施形態は、ロードおよび格納によってBIレジスタ2018を使用し、この場合、BIレジスタ2018による境界チェックは、ハードウェアによるものであり、このようなチェックに必要なコードの変更はない。
【0142】
図27は、本発明による情報ハンドリング/コンピュータ・システム1100があり、本発明の技術を実行可能な少なくとも1つのプロセッサまたは中央処理ユニット(CPU)1110を有することが好ましい、システムの別のハードウェア構成を示している。
【0143】
CPU1110は、ランダム・アクセス・メモリ(RAM)1114、リード・オンリ・メモリ(ROM)1116、(ディスク・ユニット1121およびテープ・ドライブ1140などの周辺デバイスをバス1112に接続するための)入出力(I/O)アダプタ1118、(キーボード1124、マウス1126、スピーカ1128、マイクロフォン1132、または他のユーザ・インターフェース・デバイス、あるいはその組合せをバス1112に接続するための)ユーザ・インターフェース・アダプタ1122、(データ処理ネットワーク、インターネット、イントラネット、パーソナル・エリア・ネットワーク(PAN)等に情報ハンドリング・システムを接続するための)通信アダプタ1134、ならびに、(ディスプレイ・デバイス1138またはプリンタ1139(例えば、デジタル・プリンタもしくは同様のもの)あるいはその両方にバス1112を接続するための)ディスプレイ・アダプタ1136に、システム・バス1112を介して相互接続される。
【0144】
上述のハードウェア/ソフトウェア環境に加えて、本発明の異なる態様は、上記の方法を実施するためのコンピュータ実行方法を含む。例として、この方法は、上記で論じられた特定の環境で実行されてもよい。
【0145】
このような方法は、一連の機械可読命令を実行するために、デジタル・データ処理装置によって具体化されるような、例えば、コンピュータ動作させることによって、実行されてもよい。これらの命令は、様々なタイプの信号伝達媒体に常駐してもよい。
【0146】
したがって、本発明のこの態様は、本発明の方法を実施するために、CPU1110および上記のハードウェアを組み込んだデジタル・データ・プロセッサによって実行可能な機械可読命令のプログラムを現実に具体化した信号伝達ストレージ媒体を含む、プログラムされた製品を対象とする。
【0147】
この信号伝達ストレージ媒体は、例えば高速アクセス・ストレージによって表されるような、例えばCPU1110内に含まれるRAMを含んでもよい。
【0148】
代替として、命令は、CPUによって直接的または間接的にアクセス可能な、フラッシュ・メモリまたは光ストレージ・ディスケットなど、別の信号伝達ストレージ媒体に含まれてもよい。
【0149】
フラッシュ・メモリ、光ディスク、コンピュータ/CPU、または他の場所に含まれようと、命令は、様々な機械可読データ・ストレージ媒体に格納されてもよい。
【0150】
したがって、本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せでもよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体(または複数の媒体)を含んでもよい。
【0151】
コンピュータ可読ストレージ媒体は、命令実行デバイスによる使用のための命令を保持および格納できる有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せでもよいがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、以下、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、命令を記録したパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。本明細書で使用されるようなコンピュータ可読ストレージ媒体は、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通じて伝送される電気信号などの、本質的に一時的な信号であると解釈されるべきではない。
【0152】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング/処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して、外部コンピュータまたは外部ストレージ・デバイスに、ダウンロード可能である。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含んでもよい。各コンピューティング/処理デバイスのネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【0153】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk(R)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「C」プログラミング言語、もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードでもよい。コンピュータ可読プログラム命令は、全面的にユーザのコンピュータ上で、または、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、あるいは、部分的にユーザのコンピュータ上かつ部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラム可能論理回路機器、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路機器は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機器を個別化することによって、コンピュータ可読プログラム命令を実行してもよい。
【0154】
本発明の態様は、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら本明細書で説明される。流れ図またはブロック図あるいはその両方の各ブロック、ならびに流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行可能であることが理解されよう。
【0155】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するための手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または、機械を生み出すための他のプログラム可能データ処理装置のプロセッサに提供されてもよい。
【0156】
これらのコンピュータ可読プログラム命令はまた、命令を格納したコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為の態様を実行する命令を含む製品を含むべく、コンピュータ可読ストレージ媒体に格納されてもよく、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに特定の様式で機能するように指図することができる。
【0157】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するべく、コンピュータ実行処理を生み出すために、コンピュータ、他のプログラム可能装置、または、他のデバイスで一連の動作ステップを実施するために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされてもよい。
【0158】
図中の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図の中の各ブロックは、指定の論理機能を実行するための1つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または一部を表してもよい。いくつかの代替実装形態では、ブロックに記された機能は、図に記された順序とは無関係に行われてもよい。例えば、連続して示された2つのブロックは、実際には、実質的に同時に実行されてもよく、またはブロックは、時には、含まれる機能に応じて逆の順序で実行されてもよい。ブロック図または流れ図あるいはその両方の各ブロック、および、ブロック図または流れ図あるいはその両方におけるブロックの組合せは、指定の機能もしくは行為を行うか、または、専用ハードウェアとコンピュータ命令との組合せを実行する、専用ハードウェア・ベースのシステムによって実行可能であることも指摘される。
【0159】
図28をここで参照すると、クラウド・コンピューティング・ノードの例の概略図1400が示されている。クラウド・コンピューティング・ノード1400は、適切なクラウド・コンピューティング・ノードの1つの例にすぎず、本明細書で説明される本発明の実施形態の使用法または機能の範囲について、何らかの限定を示唆することを意図するものではない。それにもかかわらず、クラウド・コンピューティング・ノード1400は、上記で説明された機能のいずれかを実行または実施あるいはその両方を行う能力がある。図23のシステム2100および図25のシステム2102は、図28などのクラウド・インフラストラクチャで実行可能である。クラウド・コンピューティング・ノード1400には、数多くの他の汎用または特殊用途のコンピューティング・システム環境または構成で動作可能なコンピュータ・システム/サーバ1412がある。コンピュータ・システム/サーバ1412と共に使用するのに適切であり得るよく知られたコンピューティング・システム、環境、または構成、あるいはその組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラム可能家電製品、ネットワークPC、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、ならびに、上記のシステムまたはデバイスのいずれかおよび同様のものを含む分散クラウド・コンピューティング環境を含むがこれらに限定されない。
【0160】
コンピュータ・システム/サーバ1412は、コンピュータ・システムによって実行されるプログラム・モジュールなど、コンピュータ・システム実行可能命令の一般的な文脈で説明されてもよい。一般に、プログラム・モジュールは、特定のタスクを実施するか、特定の抽象データ型を実行する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含んでもよい。コンピュータ・システム/サーバ1412は、通信ネットワークを通じてリンクされたリモート処理デバイスでタスクが実施される分散クラウド・コンピューティング環境で実践されてもよい。分散クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート両方のコンピュータ・システム・ストレージ媒体に置かれてもよい。
【0161】
本発明の多くの特徴および利点は、詳述された本明細書から明らかであり、したがって、本発明の範囲内に入る本発明のこのような特徴および利点すべてをカバーすることが添付の特許請求の範囲によって意図される。さらに、数多くの変更形態および変形形態が当業者には容易に思いつくので、示され説明された正確な構造および動作に本発明を限定することは望ましくなく、したがって、本発明の範囲内に入るすべての適切な変更形態および同等物が用いられてもよい。
【0162】
本発明は、その用途において、以下の説明において説明されるか、図面に示された構造の詳細に、および構成要素の配置に限定されないことを理解されたい。本発明は、説明されたもの、ならびに様々な方式で実践および実行されたものに加えて具体化する能力がある。また、本明細書で採用される専門語および専門用語、ならびに要約は、説明のためのものであり、限定とみなされるべきではないことを理解されたい。
【0163】
したがって、当業者は、本開示が基づく概念は、本発明のいくつかの目的を実行するための他の構造、方法、およびシステムのデザインの基礎として容易に利用され得ることを理解するであろう。したがって、特許請求の範囲が、本発明の思想および範囲から逸脱することがなければ、このような同等の構造を含むとみなされることが重要である。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
【手続補正書】
【提出日】2023-12-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
境界外メモリ参照を行うことからプログラムを保護するための方法であって、前記方法が、
バッファからデータをロードするまたは前記バッファにデータを格納する命令が前記バッファの前記境界の外側のアドレスを参照する境界外参照を前記命令が行うかどうかを判定することと、
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された開始アドレス、前記命令で指定されたデータ長、または境界外参照の値を修正することを含む、前記ロードまたは前記格納の実行を変更することと
を含む、方法。
【請求項2】
完全に境界外のアドレスを前記命令が参照すると前記判定することに応答して、ロードまたは格納コマンドを発行しないことと、
実行後にどの境界外参照が直されなければならないかを識別することと、
前記境界外参照の格納済みバージョンから、前記識別された境界外参照を直すことと
をさらに含む、請求項1に記載の方法。
【請求項3】
前記境界外参照をログ記録することをさらに含み、
ロードが、部分的または完全に境界外であると判定されたとき、前記ロードの境界外部分の戻されたデータが、所定または任意の値である、
請求項1または2のいずれかに記載の方法。
【請求項4】
境界外参照を防ぐために、前記ロードおよび格納命令から境界内マスクを作り出すことをさらに含む、請求項1ないし3のいずれかに記載の方法。
【請求項5】
例外が、前記境界外参照をログ記録または格納するために使用される、請求項1ないし4のいずれかに記載の方法。
【請求項6】
アドレス内のインデックス値の予備のコピーが、レジスタに格納され、
アドレス内の前記インデックス値が、命令が境界外参照を行うかどうかを判定する際に、前記予備のコピーと比較される、請求項1ないし5のいずれかに記載の方法。
【請求項7】
前記判定することが、ポインタの前記値を前記ポインタに関連付けられた境界情報と比較することを含む、請求項1ないし6のいずれかに記載の方法。
【請求項8】
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された前記開始アドレス、前記命令で指定された前記データ長、および境界外参照の前記値のうちの少なくとも1つを修正することを含む、前記ロードまたは前記格納の前記実行を変更する、請求項1に記載の方法。
【請求項9】
境界外メモリ参照を行うことからプログラムを保護するためのシステムであって、前記システムが、
コンピュータ命令を格納するメモリと、
プロセッサであって、
バッファからデータをロードするまたは前記バッファにデータを格納する命令が前記バッファの前記境界の外側のアドレスを参照する境界外参照を前記命令が行うかどうかを判定すること、および
部分的に境界外のアドレスを前記命令が参照すると前記判定することに応答して、前記バッファの前記境界内部にあるデータをロードまたは格納するために、前記命令で指定された開始アドレス、前記命令で指定されたデータ長、または境界外参照の値を修正することを含む、前記ロードまたは前記格納の実行を変更すること
を行うための前記コンピュータ命令を実行するように構成された、プロセッサと
を備える、システム。
【請求項10】
プロセッサに、請求項1ないし8のいずれか一項に記載の方法を実行させるためのコンピュータ・プログラム。
【請求項11】
請求項10に記載のコンピュータ・プログラムを記憶する記憶媒体。
【国際調査報告】