JP2020523680A - 命令セット内の変更を制御する装置及び方法 - Google Patents

命令セット内の変更を制御する装置及び方法 Download PDF

Info

Publication number
JP2020523680A
JP2020523680A JP2019567553A JP2019567553A JP2020523680A JP 2020523680 A JP2020523680 A JP 2020523680A JP 2019567553 A JP2019567553 A JP 2019567553A JP 2019567553 A JP2019567553 A JP 2019567553A JP 2020523680 A JP2020523680 A JP 2020523680A
Authority
JP
Japan
Prior art keywords
function
instruction
instruction set
program counter
processing circuit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2019567553A
Other languages
English (en)
Inventor
ピーター バーンズ、グレイム
ピーター バーンズ、グレイム
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2020523680A publication Critical patent/JP2020523680A/ja
Priority to JP2023010685A priority Critical patent/JP2023038361A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/35Indirect addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Processing Or Creating Images (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)

Abstract

命令セット内の変更を制御するための装置及び方法が提供される。装置は命令セットの命令を実行するための処理回路を有し、処理回路は命令を実行する際処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインで動作するように構成される。プログラムカウンタ値を決定するために処理回路によって使用されるプログラムカウンタ機能を格納するためのプログラムカウンタ機能格納要素が使用される。処理回路は命令セットを変更するために機能ベースのメカニズムを採用するように構成される。特に、特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、処理回路は特定される機能に関して機能チェック動作を実施するために、また機能チェック動作が成功したとすれば、命令セットを特定される機能からの命令セット識別子フィールドによって特定させるために、機能ベースのメカニズムを呼び出すように構成される。これは命令セットを変更させる制御されるメカニズムを提供し、それにより命令セットを変更しようとする不注意による又は悪意のある試行のリスクを軽減する。

Description

本技法はデータ処理の分野に関する。
所与の処理についてある機能が定義され、定義された機能以外の動作を実行するような試行があるとエラーをトリガすることができる機能ベースのアーキテクチャに対する興味が高まっている。機能は様々な形態を取ることができるが、機能の1つのタイプは結合ポインタ(「ファットポインタ」とも称され得る)である。
装置の処理回路が一連の命令を実行するように構成される場合、機能を使用してそれらの命令を実行する際に処理回路によって実施される動作を制約することができる。例えば、そのような手法によって、一定の機能に関連付けられる範囲及びパーミッション情報を考慮してメモリアクセスが制約されることを保証することにより、処理回路によってなされるメモリアクセスを効果的に取り締まることが可能である。そのような手法はメモリ内でアクセスされるデータだけではなく、命令が実行のために取り出され得るアドレス範囲を制約するために使用することができる。
いくつかのプロセッサは、異なる命令セットからの命令を実行することができ、それに応じて、制御情報は現在の命令セットを特定するために維持され得、この時その制御情報は、異なる命令セットの実行へ動作をスイッチするよう決定される場合、変更される。
しかしながら、機能ベースのアーキテクチャ内では、命令セットを変更するための能力は、機能の使用を通じて達成可能なセキュリティ上の有益性のうち一部を潜在的に低下させることがある。特に、命令セットを変更することは、メモリからフェッチされた命令データの解釈を変え、ひいてはメモリ内に保持されている読み取り専用コードの解釈を変えることがある。機能ベースのシステム内で命令セットを変更するような不注意による又は悪意のある試行の可能性を軽減することが望ましいであろう。
第1の実例の構成において、提供される装置は、命令セットの命令を実行するための処理回路であって、前記命令を実行する際に処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するように構成される処理回路と、プログラムカウンタ値を決定するために処理回路によって使用されるプログラムカウンタ機能を格納するための、プログラムカウンタ機能格納要素とを備え、処理回路は、特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、命令セットを変更するために機能ベースのメカニズムを採用するように構成され、処理回路は特定される機能に関して機能チェック動作を実施するために、また機能チェック動作が成功したとすれば、命令セットを特定される機能からの命令セット識別子フィールドによって特定させるために、機能ベースのメカニズムを呼び出すように構成される。
別の実例の構成において、提供される方法は、現在の命令セットの命令を実行するための処理回路であり、前記命令を実行する際に処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するように構成される処理回路を有する装置内で命令セット内の変更を制御する方法であって、方法はプログラムカウンタ機能格納要素内に、プログラムカウンタ値を決定するために処理回路によって使用されるプログラムカウンタ機能を格納することと、処理回路が、特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、現在の命令セットの変更を制御するために機能ベースのメカニズムを呼び出すように構成することであって、前記機能ベースのメカニズムは、特定される機能に関して機能チェック動作を実施することと、機能チェック動作が成功したとすれば、特定される機能からの命令セット識別子フィールドによって命令セットを特定させることとを含む、構成することとを含む。
さらなる実例の構成において、提供される装置は、命令セットの命令を実行するための処理手段であって、前記命令を実行する際処理手段によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するための処理手段と、プログラムカウンタ値を決定するために処理手段によって使用されるプログラムカウンタ機能を格納するための、プログラムカウンタ機能格納要素手段とを備え、処理手段は、特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、命令セットを変更するために機能ベースのメカニズムを採用し、処理手段は特定される機能に関して機能チェック動作を実施するために、また機能チェック動作が成功したとすれば、命令セットを特定される機能からの命令セット識別子フィールドによって特定させるために、機能ベースのメカニズムを呼び出す。
なおさらなる実例の構成において、上で議論した第1の実例の構成の装置に対応する命令実行環境を提供するためのホストのデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラムが提供される。一実施例おいて、コンピュータ可読記憶媒体は仮想マシンコンピュータプログラムを格納するために提供されてもよい。
本技法は、単に実例として、その実施例を参照して添付の図面に図示されるように、さらに説明される。
一実施例による装置のブロック図である。 結合ポインタ格納要素のセット内でポインタ値の設定又はポインタ値へのアクセスが試行される場合、関連付けられる範囲情報によって示される範囲の外のアドレスを指定するためにそのポインタ値が使用される場合、エラーがトリガされ得るような、命令のタイプの実例の図である。 一実施例による、結合ポインタに関連付けられるタグビットの使用を示す図である。 一実施例による、命令セット識別子フィールドがどのように機能内に組み込まれ得るかを概略的に示す図である。 一実施例による、命令セット内の変更を制御するための機能ベースのメカニズムを実装するように実施されるステップを示すフロー図である。 一実施例による、機能チェックが機能をプログラムカウンタ機能格納要素にロードするより前に実施される状況における、命令セット内の変更を制御するための機能ベースのメカニズムのさらなる詳細を与えるフロー図である。 一実施例による、機能チェックが機能をプログラムカウンタ機能格納要素にロードした後に実施される状況における、命令セット内の変更を制御するための機能ベースのメカニズムのさらなる詳細を与えるフロー図である。 一実施例による、機能チェック動作の間実施されるステップを図示するフロー図である。 機能をプログラムカウンタ機能格納要素にロードするために分岐命令が実行される場合、命令セット識別子フィールド情報を使用するための代替的な手法を示す図である。 機能をプログラムカウンタ機能格納要素にロードするために分岐命令が実行される場合、命令セット識別子フィールド情報を使用するための代替的な手法を示す図である。 いくつかの実施例において命令セット内で変更できるようにするために使用されることもできる例外ベースのメカニズムを示すフロー図である。 使用され得る仮想マシンの実装形態を示す図である。
添付の図面を参照して実施例を議論する前に、以下に実施例の説明を与える。
先に言及したように、所与の処理についてある機能が定義され、定義された機能以外の動作を実行するよう試行されるとエラーをトリガすることができる機能ベースのアーキテクチャに対する興味が高まっている。様々なタイプの機能が定義され得るが、機能の1つのタイプは結合ポインタ(一実施例においてはポインタ値、並びに関連付けられる範囲及びパーミッション情報の両方を組み込む)である。
そのような機能ベースのアーキテクチャに適合する装置は、典型的には機能を格納するために使用される格納要素(本明細書では結合ポインタ格納要素、又はより一般的には機能格納要素とも称する)を有することになる。格納要素はレジスタ(本明細書では結合ポインタレジスタ、又は機能レジスタとも称する)であってもよく、及び/又は汎用メモリにおけるメモリ位置、例えば、スタックメモリ上の位置であってもよい。所望の機能にアクセスし、その機能に応じた動作を実施するべく、そのような格納要素を参照するためにある命令が使用され得る。例えば、結合ポインタを考えると、そのような命令の実行により結合ポインタを取り出し、次いでその中のポインタ値について、命令の実行の間に要求されるメモリ内のアドレスを導出するために使用できるようにする。ポインタ値はメモリアドレスを直接特定するために使用することができ、又は例えば、ポインタ値へのオフセットの加算によってメモリアドレスを導出するために使用することができる。次いで、メモリアドレスが範囲情報によって指定される範囲内にあり、またパーミッション情報において指定されるあらゆるパーミッションが満たされていれば、動作は進むことができるようになる。
したがって、結合ポインタを使用する際、ポインタ値自身は、例えば、アクセスされるデータ値又は実行のためにフェッチされる命令のアドレスを指し示すことができる、又はそのようなアドレスを決定するために使用することができる。しかしながら、その時例えば、アクセスされるあらゆるアドレスが許容範囲内であり、許可された目的のためにアクセスされることを保証するために、範囲及びパーミッション情報が参照され得る。これは、例えば、ポインタから決定されたアドレスがある境界内に留まり、挙動についてのセキュリティ上又は機能的な正常性を維持することを保証するために有用であり得る。そのような手法によって、処理回路によってなされるメモリアクセスを効果的に取り締まることが可能である。
しかしながら、複数の命令セットの使用をサポートするシステムにおいて、命令セットを変更するための能力は、機能の使用を通じて与えられる保護の一部を潜在的にすり抜けることができる。特に、メモリからフェッチされた命令データの解釈は、いったん命令セットの指標が変更されると、異なるものとなる。したがって、機能ベースのアーキテクチャは、命令がフェッチされ得るアドレスの範囲を限定することができる一方、命令セットを変更しようとする不注意による又は悪意のある試行は、処理回路に第1の命令セットの命令を機能ベースのアーキテクチャの制約によって許可されるように正当にフェッチさせることができるが、処理回路については、第2の命令セットにしたがってそのフェッチされた命令を解釈しようとし、潜在的にプロセッサの望ましくない動作上の挙動をまねく。
本明細書において説明される実施例は命令セットを変更するための制御されるメカニズムを与えようとするものであり、命令セットを変更しようとする不注意による又は悪意のある試行の能力を低減させようとするものである。
一実施例において、装置は命令セットの命令を実行するための処理回路を有し、処理回路は命令を実行する際処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインで動作するように構成される。機能ドメインは現在処理回路からアクセス可能な機能格納要素内に存在する機能によって形成される機能のセット、及びそれらの機能格納要素に保持される機能を介してアクセス可能なあらゆるさらなる機能を備える。機能格納要素のうちの1つは、プログラムカウンタ値を決定するために処理回路によって使用されるプログラムカウンタ機能を格納するために使用されるプログラムカウンタ機能格納要素である。プログラムカウンタ値は次いで、命令をフェッチするメモリ内のアドレスを特定するために使用される。
説明される実施例において、処理回路は命令セットを変更するために機能ベースのメカニズムを採用するように構成することができる。特に、特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、処理回路は特定される機能に関して機能チェック動作を実施するために機能ベースのメカニズムを呼び出すように構成される。機能チェック動作を実施した結果、機能チェック動作が成功したとすれば、命令セットは特定される機能からの命令セット識別子フィールドによって特定される。
この機能ベースのメカニズムを採用した結果、処理回路が特定される機能をプログラムカウンタ機能格納要素にロードするために命令を実行することによってプログラムカウンタ機能を更新しようとする場合、特定される機能内の命令セット識別子フィールドが命令セットを特定できるよりも前に機能チェック動作が成功することが必要である。したがって機能チェック動作が成功すると、このメカニズムによって命令セットを変更することができるが、機能チェック動作に失敗すると、命令セットにおけるこの更新は妨げられ、代わりに、例えば例外を取るなどの代替的なアクションが取られる。
機能チェック動作のタイミングは実施例によって変わってもよい。例えば、一実施例において、処理回路は、特定される機能について、その特定される機能をプログラムカウンタ機能格納要素にロードすることに先立って、機能チェック動作を実施するように構成され得る。そのような手法の結果として、特定される機能をプログラムカウンタ機能格納要素にロードさせるかどうかが決定されるよりも前に、機能チェック動作が成功したか、又は失敗したかが分かる。
しかしながら、代替的な実施例において、処理回路は特定される機能について、その特定される機能をプログラムカウンタ機能格納要素にロードした後、機能チェック動作を実施するように構成されてもよい。このことにより、特定される機能をプログラムカウンタ機能格納要素にロードする命令の実行におけるあらゆる遅延を回避することができる一方で、なおその更新されたプログラムカウンタ機能は、機能チェック動作が実施されるよりも前は信頼されないことを保証する。例えば、次の命令が実行されることになるとすぐに、これは機能チェック動作の実施をトリガすることができ、したがって機能チェック動作が成功したかどうかが判断されるよりも前に、その更新されたプログラムカウンタ機能のあらゆる詳細が使用されることを回避し、ひいては特に、機能チェック動作が成功したと決定されない限り、あらゆるフェッチされた命令を特定される機能からの命令セット識別子フィールドによって示され得る変更された命令セットにしたがって解釈することを回避する。
機能チェック動作の失敗を検出した場合に処理回路が取るように構成され得るアクションは複数あるが、一実施例において、処理回路は例外を取るように構成される。一実施例において、これにより例えばソフトウェア例外ハンドラは、機能チェック動作の失敗に関連するある情報を記録し、次いで命令セットにおける試行された変更に対処するために、適当なエラーハンドリングルーチンに制御を渡すことができる。エラーハンドリングルーチンは様々なステップを取ることができる一方、一実施例において、命令セットにおける変更を呼び出そうとしたアプリケーションを停止することを選択することができるが、それは一実施例において先に言及したように、命令セットにおける変更が機能の使用によって与えられる保護をすり抜けようとするために使用される可能性を軽減するべく、命令セットを変更する能力を厳密に制御することが非常に望ましいからである。
一実施例において、機能チェック動作の失敗を検出することに応答して即時に例外が取られ得る一方、代替的な実施例において、機能チェック動作の失敗を特定するためにフラグがセットされてもよく、この場合次の命令が実行される際フラグをセットすることにより例外を取らせる。これによって、失敗条件が検出されてフラグがセットされる時間と、例外が取られる時間との間に、あるイベントが発生する。例えばそれによって、フラグ情報及びプログラムカウンタ機能(PCC:Program Counter Capability)情報を保存し、次いでフラグをクリアして異なるプログラムカウンタ機能をプログラムカウンタ機能格納要素にロードする、優先度の高い例外/割り込みを取ることができる。優先度の高い例外/割り込みから戻る際、フラグ及びPCC情報は次いで復元され、次の命令が実行されることになる際、セットされたフラグの存在により例外が取られることになる。
特定される機能をプログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令は、様々な形態を取ることができるが、一実施例において、命令は分岐命令であり、それによって処理回路は特定される機能を指定する分岐命令を実行することによって機能ベースのメカニズムを呼び出すように構成される。
分岐命令は様々な形態を取ることができる。例えば、ソースオペランドを介して明示的に特定される機能を特定する分岐命令であってもよい。例えば、装置は典型的に処理回路からアクセス可能であり、命令を実行する際処理回路によって実施される動作を制約するために使用される機能を格納するように構成される、1つ又は複数の機能格納要素を備える。この時、分岐命令はそれらの機能格納要素のうちの1つをソースオペランドとして指定することができ、この場合指定された機能格納要素は特定される機能を含む。
他の実例において、分岐命令は非明示的に特定される機能を特定してもよい。例えば、分岐命令は、特定される機能を形成するリターンアドレス機能をプログラムカウンタ機能格納要素にロードするために実行されるリターン命令の形態を取ることができる。典型的には、リターン命令はリターンアドレス機能を明示的に特定する必要はなく、それはリターンアドレス機能を含むデフォルトの記憶要素があるからであり、一実例においてこれは機能例外リンクレジスタ(CELR:Capability Exception Link Register)と称される。
機能チェック動作は様々な形態を取ることができ、したがって実例として、機能チェック動作が成功するか、又は失敗するかを判断するために、機能チェック動作の実施の間特定される機能内の様々な異なるフィールドが参照され得る。例えば、一実施例において、処理回路は、機能チェック動作を実施する際、特定される機能が有効な機能でない限り機能チェック動作が成功することを妨げるために、特定される機能に関連付けられる有効フラグをチェックするように構成され得る。したがって、これにより、処理回路が有効な機能を表すものではない情報を使用してプログラムカウンタ機能格納要素の内容を更新しようとする場合はいつでも機能チェック動作は失敗することになる。
代替的に、又は追加で、機能チェック動作は特定される機能内に与えられる1つ又は複数のパーミッションフラグを参照するように構成されてもよい。特に、特定される機能は典型的に、特定される機能に関連付けられる1つ又は複数のパーミッションの状態を特定するために使用される1つ又は複数のパーミッションフラグを含む。例えば、パーミッションは、処理回路の特定のタイプの動作、特定のモードの動作などへの機能の使用を制限するために使用することができる。異なるパーミッションはまた、アクセスされる異なるタイプの情報に関連付けられることができ、それによって例えばアクセスされる情報がそれ自身機能であるか、又は通常のデータ値であるかどうかに応じて、異なる書き込み及び読み出しパーミッションが設定され得る。
そのような実施例において、処理回路は、機能チェック動作を実行する際、少なくとも1つのパーミッションが所定の状態にない限り機能チェック動作が成功することを妨げるために、1つ又は複数のパーミッションフラグをチェックするように構成され得る。
そのような手法によって、特定される機能が特定の状態において少なくとも1つのパーミッションを有する状況へと命令セットを変更するために、能力を制約することが可能である。一実例として、少なくとも1つのパーミッションは、特定される機能が、プログラムカウンタ機能として使用される場合、メモリから命令をフェッチするための特定される機能の使用を妨げるあらゆるオーバーライド制御情報にしたがって、メモリから命令をフェッチするために使用できるかどうか、また所定の状態が特定される機能がメモリから命令をフェッチするために使用できることを示すセット状態かどうか、を特定するために使用される実行可能なパーミッションを含むことができる。一実施例において、実行可能なパーミッションがクリア状態にあるとすれば、これは機能がプログラムカウンタ機能を形成している場合、メモリから命令をフェッチするために使用されることを妨げられることを特定することになる。したがって、これは機能がプログラムカウンタ機能として使用されることについて適切ではなかったことを特定することになり、ひいては命令がその機能をプログラムカウンタ機能格納要素にロードしようとする場合、一実施例において、機能チェック動作は失敗し、その特定される機能内の命令セット識別子フィールドの内容が命令セットを特定するために使用されることを妨げることがある。
パーミッションフラグがどのようにチェックされ得るかの別の実例として、少なくともパーミッションは、特定される機能が1つ又は複数の機能修正命令によって修正可能かどうか、また所定の状態が機能が前記1つ又は複数の機能修正命令によって修正不可能であることを示すクリア状態かどうかを特定するために使用される修正可能なパーミッションを含むことができる。特定される機能が修正不可能としてマークされると、これは命令セット識別子フィールドの内容が、機能が(例えば、特定の特権レベルにおいて動作している処理によって)確立された時と、続いて処理(その特権レベルになくてもよい)がその機能をプログラムカウンタ機能にロードしようとする時との間の期間に改ざんされていないという追加的な安心感を与えることができる。
機能チェック動作が成功する状況において、特定される機能からの命令セット識別子フィールドの内容を使用して命令セットを特定することができる、いくつかのやり方がある。一実施例において、機能チェック動作が成功する場合、処理回路は命令セット識別子フィールドを含む特定される機能を使用して、プログラムカウンタ機能格納要素内に新しいプログラムカウンタ機能を形成するように構成される。さらには、新しいプログラムカウンタ機能内の命令セット識別子フィールドの値は、命令セットを決定するために使用される。したがって、そのような実施例において、現在の命令セットはプログラムカウンタ機能内の関連付けられる命令セット識別子フィールドの内容によって特定される。
しかしながら、代替的な実施例において、機能チェック動作が成功する場合、処理回路は特定される機能を使用してプログラムカウンタ機能格納要素内に新しいプログラムカウンタ機能を形成するように構成されるが、この時、命令セット識別子フィールドに対応する新しいプログラムカウンタ機能内のフィールドはデフォルト値にセットされる。処理回路はさらに特定される機能の命令セット識別子フィールド内の値を命令セット制御記憶要素に書き込み、命令セット制御記憶要素内の値は命令セットを決定するために使用される。したがって、そのような実施例において、特定される機能がプログラムカウンタ機能格納要素にロードされると、命令セット識別子フィールドの内容は抽出され、命令セット制御記憶要素に書き込まれる。したがって、そのような実施例において、現在の命令セットを決定するために使用されるのは、命令セット制御記憶要素の内容である。
命令セット制御記憶要素は様々な形態を取ることができるが、一実施例において、現在のプロセッサ状態レジスタ(CPSR:Current Processor State Register)内のフィールドによって与えられる。
一実施例において、命令セットを変更するための前述の機能ベースのメカニズムは、命令セットを変更させるために提供される唯一のメカニズムであり得る。しかしながら、代替的な実施例において、処理回路は命令セットを変更するために例外ベースのメカニズムをさらに提供することができ、例外ベースのメカニズムを呼び出すと、処理回路は、信頼されたソフトウェアが例外からリターンする際使用される命令セットを特定するリターン状態を確立するために実行される予め定義された状態へ例外を取るように構成される。したがって、そのような手法によって、信頼される例外/例外リターンメカニズムを、命令セットを修正するために信頼されるソフトウェアの使用をトリガするために使用することが可能である。
命令セットを変更するために、1つ又は複数のさらなる制御されるメカニズムがやはり提供される一方、特定の一実施例において、処理回路は、機能ベースのメカニズム又は例外ベースのメカニズムのいずれかを使用して命令セットを変更のみできるように、制約されてもよい。命令セットが変更され得るやり方を厳密に制約することによって、これは、機能の使用を通じて設けられるセキュリティ施策のうちの1つ又は複数を潜在的にすり抜けることがある、命令セットを変更しようとする不注意による又は悪意のある試行に対して、強化された弾性力を与える。
次に、図面を参照して特定の実施例を説明する。
図1は命令を処理するための処理パイプライン4を備えるデータ処理装置2の実例を概略的に図示している。この実例において、処理パイプライン4は、フェッチ工程6、デコード工程8、発行工程10、実行工程12、及びライトバック工程14を含む複数のパイプライン工程を含むが、他のタイプの工程又は工程の組合せが提供されてもよいことを了解されたい。例えば、いくつかの実施例ではレジスタのリネームを実施するためのリネーム工程を含むことができる。処理されることになる命令が工程から工程へと移動し、命令がある工程で待ち状態にある間、別の命令はパイプライン4の異なる工程で待ち状態にあり得る。
フェッチ工程6はレベル1(L1:Level 1)の命令キャッシュ20から命令をフェッチする。フェッチ工程6は普通、連続する命令アドレスから逐次に命令をフェッチすることができる。しかしながら、フェッチ工程はまた分岐命令の結果を予測するための分岐予測器22を有することがあり、フェッチ工程6は、分岐すると予測される場合は(非逐次)分岐ターゲットアドレスから、又は分岐しないと予測される場合は次の連続するアドレスから、命令をフェッチすることができる。分岐予測器22は、ある分岐が取られそうか、又は取られそうにないかを予測するための情報を格納するための1つ又は複数の分岐履歴テーブルを含むことができる。例えば分岐履歴テーブルは、前に実行された分岐の実際の結果を追跡するための、又は分岐についてなされた予測についての信頼度を表すカウンタを含むことができる。分岐予測器22はまた分岐命令の前のターゲットアドレスをキャッシュするための分岐ターゲットアドレスキャッシュ(BTAC:Branch Target Address Cache)24を含むことができ、それによって同一の分岐命令との後続の遭遇の際、これらが予測され得る。
フェッチされた命令は命令をデコードしてデコード命令を生成するためのデコード工程8に渡される。デコード命令は適当な処理演算を実行するために実行工程12を制御するための制御情報を含むことができる。キャッシュ20からフェッチされたいくつかのより複雑な命令について、デコード工程8はこれらの命令を複数のデコード命令にマッピングすることができ、これはマイクロ命令(μop又はuop)として知られ得る。したがって、L1の命令キャッシュ20からフェッチされた命令とパイプラインの後方の工程で見られる命令との間には1対1関係がなくてもよい。一般的には、本出願における「命令」との称し方はマイクロ命令を含むものとして解釈するべきである。
デコード命令は発行工程10に渡され、命令の実行に必要なオペランドが利用可能かどうかを判断し、オペランドが利用可能であれば実行のため命令を発行する。いくつかの実施例はインオーダー処理をサポートしていることがあり、それによって、命令がL1の命令キャッシュ20からフェッチされたプログラム順序に対応する順序での実行のために、命令が発行される。他の実施例はアウトオブオーダー実行をサポートしていることがあり、それによって命令は、プログラムの順序とは異なる順序で実行工程12に発行され得る。前方の命令がオペランドを待ってストールしている間、オペランドが利用可能であるプログラムの順序において後方の命令を先に実行できるため、アウトオブオーダー処理はパフォーマンスを改善するために有用であり得る。
発行工程10は命令を実行工程12に発行し、命令は様々なデータ処理演算を実行するために、実行される。例えば、実行工程は、整数値に対して算術又は論理演算を実行するための算術/論理ユニット(ALU:Arithmetic/Logic Unit)30、浮動小数点形式で表現される値に対して演算を実行するための浮動小数点(FP:Floating−Point)ユニット32、及びレベル1(L1)のデータキャッシュ36からのデータ値をレジスタ40にロードするためのロード演算、又はレジスタ40からのデータ値をL1のデータキャッシュ36に格納するためのストア演算を実行するためロード/ストアユニット34を含む複数の実行ユニット30、32、34を含むことができる。これらは、提供され得る実行ユニットのいくつかの実例のタイプに過ぎず、多くの他の種類がやはり提供され得ることを了解されたい。処理演算を実行するために、実行工程12はデータ値をレジスタ40のセットから読み出すことができる。実行された命令の結果は次いでライトバック工程14によってレジスタ40に書き戻すことができる。
L1の命令キャッシュ20及びL1のデータキャッシュ36は、複数のキャッシュのレベルを含むキャッシュヒエラルキーの一部であってもよい。例えば、レベル2(L2:Level 2)のキャッシュ44がやはり提供され得、任意選択でさらなるレベルのキャッシュが提供されてもよい。この実例において、L2のキャッシュ44はL1の命令キャッシュ20とL1のデータキャッシュ36との間で共有されるが、他の実例は別個のL2の命令及びデータキャッシュを有することができる。フェッチされることになる命令がL1の命令キャッシュ20にない場合、L2のキャッシュ44からフェッチすることができ、同様に命令がL2のキャッシュ44にない場合、メインメモリ50からフェッチすることができる。同様に、ロード命令に応答して、データはL1のデータキャッシュ36にない場合L2のキャッシュ44からフェッチすることができ、必要に応じてメモリ50からフェッチすることができる。あらゆる既知のスキームがキャッシュヒエラルキーを管理するために使用され得る。
プログラム命令及びデータ値を参照するためにパイプライン4によって使用されるアドレスは、仮想アドレスであってもよいが、少なくともメインメモリ50、及び任意選択でやはり少なくともキャッシュヒエラルキーのいくつかのレベルは、物理的にアドレッシングされ得る。したがってトランスレーション・ルックアサイド・バッファ(TLB:Translation Lookaside Buffer)52が、パイプライン4によって使用される仮想アドレスを、キャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートするために与えられてもよい。例えば、TLB52はそれぞれが仮想アドレス空間の対応するページの仮想ページアドレスを指定する複数のエントリを含むことができ、仮想ページがアドレッシングする対応する物理ページアドレスは、対応するページ内の仮想アドレスを物理アドレスにトランスレートするためにマッピングされるべきである。例えば、仮想及び物理ページアドレスは対応する仮想アドレス及び物理アドレスの最上位部分に対応することができ、この時残りの最下位部分は仮想アドレスを物理アドレスにマッピングする際変更されないままである。アドレストランスレーション情報と同様に、それぞれのTLBエントリはまた、アドレスのあるページがパイプライン4のあるモードでアクセス可能かどうかを示すことなどのアクセスパーミッションを指定するいくつかの情報を含むことができる。いくつかの実施例において、TLBエントリはまた、キャッシュヒエラルキーのどのレベルが読み出し若しくは書き込み動作に応じて更新されるかを定義するキャッシュポリシ情報(例えば、キャッシュがライトバック又はライトスルーモードで動作すべきであるかどうか)、又は対応するページ内のアドレスへのデータアクセスがメモリシステムによって、データアクセスがパイプライン4によって発行された順序と比べてリオーダすることができるかどうかを定義する情報、などのアドレスの対応するページの他のプロパティを定義することができる。
図1が単一のレベルのTLB52を示す一方、TLBのヒエラルキーがレベル1(L1)のTLB52が複数の最近アクセスされたページ内のアドレスをトランスレートするためのTLBエントリを含み得るように提供され得、またレベル2(L2)のTLBが多数のページについてのエントリを格納するために提供され得ることを了解されたい。必要とされるエントリがL1のTLBに存在しない場合、L2のTLBから、又はヒエラルキー内のさらなるTLBからフェッチすることができる。アクセスされることになるページについて必要とされるエントリがTLBのうちいずれにもない場合、メモリ50のページテーブルにアクセスするためにページテーブルウォークを実施することができる。本技法では、あらゆる既知のTLB管理スキームを使用することができる。
また、いくつかのシステムは複数のレベルのアドレストランスレーションをサポートすることができ、それによって、例えば、第1のTLB(又はTLBのヒエラルキー)は仮想アドレスを中間アドレスにトランスレートするために使用することができ、また1つ又は複数のさらなるTLBを使用するアドレストランスレーションの第2のレベルが、次いで中間アドレスをキャッシュ又はメモリにアクセスするために使用される物理アドレスにトランスレートできることを了解されたい。これは例えば、アドレストランスレーションの第1のレベルがオペレーティングシステムによって管理され得、アドレストランスレーションの第2のレベルがハイパーバイザによって管理され得る場合の仮想化をサポートするために有用であり得る。
図1に示すように、装置2は結合ポインタレジスタ60のセットを有することができる。結合ポインタレジスタのセットは図1において汎用データレジスタ40のセットとは物理的に別個であるように示されるが、一実施例においては汎用データレジスタ及び結合ポインタレジスタの両方を提供するために同一の物理記憶装置が使用されてもよい。
それぞれの結合ポインタレジスタ60は、アクセスされることになるデータ値のアドレスを決定するために使用され得るポインタ値62、及び対応するポインタ62を使用する際アドレスの許容範囲を指定する範囲情報64を含む。結合ポインタレジスタ60はまたポインタの使用に関して1つ又は複数のリストリクション/パーミッションを定義することができるリストリクション情報66(本明細書ではパーミッション情報とも称する)を含むことができる。例えば、リストリクション66は、ポインタ62を使用し得る命令のタイプ、又はポインタが使用され得るパイプライン4のモードを制限するために使用することができる。したがって、範囲情報64及びリストリクション情報66は、ポインタ62を使用できる機能を定義すると考えられ得る。定義された機能以外でポインタ62を使用する試行がなされると、エラーがトリガされ得る。範囲情報64は例えば、ポインタがある既知の境界内に留まっており、重要又はセキュアな情報を含み得るメモリアドレス空間の他のエリアに迷い込んでいないことを保証することのために有用であり得る。汎用データレジスタ及び結合ポインタレジスタの両方のために同一の物理記憶装置が使用される一実施例において、その時一実施例においてポインタ値62は例えば対応する汎用レジスタについて使用されるのと同一の記憶装置の位置に格納され得る。
図2は、許容範囲が、データ又は命令への認可されていないアクセスに対して保護するために使用される命令のタイプの実例を示す。図2の上部で示すように、特定の結合ポインタレジスタPR(Pointer Register)1は所与のポインタ値62及び範囲情報64を含み、この実例においては許容範囲の下位境界を定義する下位境界アドレス68、及び許容範囲の上位境界を定義する上位境界アドレス69を使用して指定されている。例えば、境界68、69はアドレス範囲80000から81000を定義するために設定される。ある命令が結合ポインタレジスタPR1参照し、ポインタ62から決定されるアドレスがこの範囲の外にある場合、エラーがトリガされ得る。
例えば、図2のパートAで示されるように、いくつかのシステムではポインタレジスタ60内のポインタ62の値を範囲情報64によって指定される範囲の外にある値に設定しようとする試行があるとエラーがトリガされ得る(ここではポインタがアドレスを直接指定すると仮定している)。これはポインタ62が指定された範囲の外のいかなる値を取ることも回避し、それによって、ポインタを使用するあらゆるアクセスが許可された範囲内に安全にあることを保証することができる。代替的に、図2のパートBで示されるように、命令がポインタ62のアドレスによって特定される位置にアクセスしようと試行し、その時そのアドレスが指定された範囲の外にある場合、エラーがトリガされ得る。したがって、ポインタ62を指定された範囲の外の値に設定することがなお許容され得るが、そのポインタアドレス(又はそのポインタから導出されるアドレス)においてデータアクセスが試行されると、そのアドレスが許可された範囲の外にある場合、エラーがトリガされ得る。図2のパートA及びBに示される両方のタイプの命令に応じて、他のシステムがエラーをトリガすることもある。
範囲情報64は異なるやり方で設定することができる。例えば、セキュアなコード、又はオペレーティングシステム若しくはハイパーバイザは、所与のポインタについて許可される範囲を指定することができる。例えば、命令セットアーキテクチャは、所与のポインタ62についての範囲情報64を設定するための又は修正するための複数の命令を含むことができ、これらの命令の実行はあるソフトウェア又はプロセッサ4のあるモード若しくは例外レベルに制限することができる。範囲情報64を設定するための又は修正するためのあらゆる既知の技法を使用することができる。
ポインタへの参照を行うある命令を実行する際に実行状態12で使用され得る結合ポインタ格納要素60のセットに加えて、プログラムカウンタ機能(PCC:Program Counter Capability)レジスタ80が、命令がレベル1の命令キャッシュ20からフェッチされる際、フェッチ工程6で類似の機能性を提供するためにやはり使用されてもよい。特に、プログラムカウンタポインタはフィールド82に格納され得、この時PCC80はまた、結合ポインタ格納要素60のセット内のポインタのそれぞれに与えられる範囲及びリストリクション情報と同様に、範囲情報84及び適当なリストリクション情報86を与える。
さらには、一実施例において、非結合ポインタはまた汎用レジスタ40内で指定され、メモリアクセスを実施する際使用され得る。そのような非結合ポインタを使用してアクセスされ得るメモリアドレスを限定するために、機能レジスタのいずれかに含まれる範囲及びリストリクション情報と同様に、範囲情報92及びあらゆるリストリクションデータ94の両方を指定するデフォルトのデータ機能(DDC:Default Data Capability)レジスタ90が提供されてもよい。次に、汎用レジスタ40内の非結合ポインタを参照してメモリアドレスを特定するメモリアクセス命令が実行されると、結合ポインタに関して実施される結合チェック動作に類似する結合チェック動作が、その非結合ポインタから導出されるあらゆるアドレスに基づいてなお実施され得るが、この事例ではDDCレジスタ90内に保持された範囲及びリストリクション情報を考慮している。そのような手法によって、例えば、機能非認識コードを実行する際に汎用レジスタ40からアクセスされるポインタがどのように使用されるかを制約するために、既存のソフトウェアライブラリ内のいくつかの機能非認識コードを利用したいと思う機能認識コードがDDCレジスタ90を設定することが可能である。特に、範囲情報はそのような機能非認識コードを実行する際アクセスされ得るアドレス範囲を限定するために使用することができる。
結合ポインタレジスタ内の結合ポインタによって特定されるメモリアドレスのあらゆる特定の範囲は、データ、命令、及び/又は他の機能(すなわち、他の結合ポインタ)を含むことができる。したがって、時間的なあらゆるポイントにおいて、メモリへアクセスするための処理回路の能力は、結合ポインタレジスタにおいて特定される機能、及びそれらの結合ポインタレジスタで保持される機能を介してアクセス可能なあらゆるさらなる機能を含む機能のセットによって定義され、本明細書において機能のこのセットを機能ドメインと称することを了解されたい。
PCCレジスタ80又はDDCレジスタ90内で指定される範囲情報及びあらゆる関連付けられるリストリクションは、様々なやり方で設定することができる。しかしながら、一実施例において、その情報は現在の機能ドメインで処理回路に利用可能な結合ポインタの1つ又は複数を使用して決定され、それによって現在の機能ドメインについて特定されたメモリアドレス範囲の外にあるPCC又はDDCベースの結合チェックを使用してアクセスできるメモリアドレスはない。
図3は、タグビットが個々のデータブロックに関連付けられて、これらのデータブロックが機能を表しているかどうか(すなわち、結合ポインタ及び関連付けられるリストリクション情報)、又は通常データを表しているかどうかを特定するためにどのように使用されるか概略的に図示している。特に、メモリアドレス空間110は、典型的には指定されたサイズを有することになる一連のデータブロック115を格納することになる。純粋に図示のために、この実例において、それぞれのデータブロックが128ビット含むと仮定する。それぞれのデータブロック115に関連して、タグフィールド120が提供され、一実例において、タグビットと称される単一のビットフィールドであり、関連付けられるデータブロックが機能を表すことを特定するために設定され、関連付けられるデータブロックが通常データを表し、したがって機能として取り扱うことができないことを示すためにクリアされる。セットされた又はクリアな状態に関連付けられる実際の値は、実施例によって異なっていてよいが、純粋に図示のため、一実施例においては、タグビットが値1を有する場合、関連付けられるデータブロックが機能であることを示し、タグビットが値0を有する場合は関連付けられるデータブロックが通常データを含むことを示すことを了解されたい。
機能が、図3で示される機能レジスタ100などの結合ポインタレジスタ(本明細書では機能レジスタとも称する)60のうちの1つにロードされると、次にタグビットは機能情報を伴って移動する。したがって、機能が機能レジスタ100にロードされると、ポインタ102、範囲情報104及びリストリクション情報106(以降でパーミッション情報と称する)が機能レジスタにロードされることになる。加えて、その機能レジスタに関連して、又はその中の特定のビットフィールドとして、タグビット108はその内容が機能を表すことを特定するために設定されることになる。同様に、機能がメモリに格納し戻される場合、関連するタグビット120は機能が格納されるデータブロックに関連付けられて設定されることになる。そのような手法によって、機能と通常データとを区別し、ひいては通常データを機能として使用することができないことを保証することが可能である。
一実施例において、装置は、それぞれの例外レベルが異なるソフトウェア実行特権を有する、異なる例外レベルで動作できるように構成され得る。さらには、例外メカニズムを使用して複数の例外レベルの間を遷移することができる。しかしながら、一実施例において、すべての例外が例外レベルを変更させるわけではない。
図1に示されるように、装置10は処理回路によってその動作中に参照される様々な制御及びステータス情報を格納する様々な制御/ステータスレジスタ70へのアクセスを有しており、制御/ステータスレジスタ70は例外のハンドリングの間に使用される様々なレジスタを含んでいる。
図1に示されるように、現在の処理状態74は制御/ステータスレジスタ70内に維持され、プロセッサの現在の動作に関連する様々な実行状態情報を捉える。単一のボックス74として示される一方、現在の処理状態は必ずしもすべて単一のレジスタ内に格納されるわけではないが、利用可能な制御/ステータスレジスタ70内の、複数の制御及びステータスレジスタ内に格納され得る。
動作中、様々な異なるメカニズム、例えば割り込み、システムコール、フォールトなどによって例外がトリガされ得る。一実施例によると、例外が取られると、例外エントリメカニズムがトリガされ、この処理の間、現在の処理状態74は保存される処理状態72として捉えられる。やはり、保存される処理状態72は単一のレジスタ内、又は複数のレジスタ内に格納することができる。次いで例外を処理するために、処理回路によって例外ハンドリング動作が実施される。続いて処理回路が例外からリターンする場合、保存された処理状態が現在の処理状態に復元され、処理回路が例外が取られる前に実施していた動作を継続できるようになる。
複数の例外レベルについて処理回路の実行状態を維持できるようにするために、別個の保存される処理状態レジスタ(SPSR:Saved Process State Register)72及び現在の処理状態レジスタ(CPSR)74を、所望であれば複数の例外レベルについて維持することができる。
例外エントリの際、プログラムカウンタ機能レジスタ80は機能制御格納要素79に格納される例外エントリアドレス機能情報を使用して更新され得る。特に、レジスタ79は例外エントリの際使用される適当なアドレスについての情報、及びPCCレジスタ80内に格納されるプログラムカウンタ機能を形成するためにそのアドレスに加えて与えられる関連付けられる機能情報もまた格納する。レジスタ79内の例外エントリアドレス情報は様々な形態を取ることができるが、一実施例において、レジスタ79は機能ベクトルベースアドレスレジスタ(CVBAR:Capability Vector Base Address Register)の形態を取る。このレジスタは例外エントリのためのベースアドレスを与え、例外は例外タイプに依存してこのベースアドレスからのオフセットを決定する。したがって例外のタイプについての情報がPCCレジスタ80にロードされるプログラムカウンタ機能を形成するために使用される適当なアドレスを特定するために使用され、この時PCCレジスタについて機能情報の残りの部分はCVBAR内の機能の対応する部分から形成されている。
先に言及したように、例外を取る際、現在の処理状態74が保存される処理状態72として捉えられる。加えて、PCCレジスタ80内に格納される現在のプログラムカウンタ機能は、好ましいリターンアドレス機能を特定するために使用される。好ましいリターンアドレスは例外のタイプに依存するが、典型的にはプログラムカウンタ値、又は命令サイズの分インクリメントされたプログラムカウンタ値(例えばバイトサイズのアドレス指定、及び32ビット命令を仮定すると4インクリメントされる)である。好ましいリターンアドレスに加えて、現在のプログラムカウンタ機能からの残りの機能情報はまた、PCCから生成されるリターンアドレス機能へ複製される。一実施例において、このやり方で生成されるリターンアドレス機能は専用のリターンアドレス機能レジスタ内に格納され、特定の一実施例において、これは機能例外リンクレジスタ(CELR:Capability Exception Link Register)78である。後に例外からリターンする際、CELRレジスタ78の内容は、PCCレジスタ80に復元され、SPSRレジスタ72の内容に加え、関連する例外レベルについてCPSRレジスタ74に復元することができる。
上述のような機能ベースのシステムの使用は、セキュリティ及びシステム挙動の機能的な正常性を著しく強化することができる。例えば、そのような手法の使用を通じて、処理回路によってなされるメモリアクセスを効果的に取り締まること、実行のためにメモリからフェッチされる命令及びプロセッサによって操作されるデータ値の両方を、それらの命令を実行する際に制御することが可能である。しかしながら、先に言及したように、いくつかのシステムは複数の命令セットからの命令の実行を可能とし、この時制御状態は使用されている現在の命令セットを特定するように維持され、ひいてはメモリからフェッチされる命令データが実行のために命令をデコードする際どのように解釈されるべきかを特定する。命令セットを変更するような不注意による又は悪意のある試行は機能の使用によって与えられる保護の一部をすり抜けることがあるが、それはメモリ内に保持される読み取り専用コードの解釈における変更を可能とすることができるからである。本明細書において説明される実施例は、そのようなリスクを緩和することを目的として、命令セットがそのような装置内でどのように変更され得るかを厳密に制御するメカニズムを提供する。
図4は機能を命令セット識別子フィールドとして機能する追加的なフィールドでどのように補うことができるかを図示している。特に、この実例における機能150は結合ポインタであると仮定されており、したがってポインタ値158並びに関連付けられている範囲及びパーミッションフィールド156、154をそれぞれ有している。タグビット152はまた関連付けられている情報が有効な機能を表しているか、そうでないかを示すために与えられる。パーミッションフィールド154内でエンコードされるパーミッションは、それらのフィールド内で与えられる複数のパーミッションフラグの状態によって決定され得、それによってパーミッションフラグの値は1つ又は複数のパーミッションの状態を決定するために使用される。これらのパーミッションは様々な形態を取ることができるが、一実施例においては、関連付けられている機能がプログラムカウンタ機能として使用される際メモリから命令をフェッチするために使用できるかどうかを特定する少なくとも実行可能なパーミッション、及び関連付けられている機能が1つ又は複数の機能修正命令によって修正可能かどうかを特定するために使用される修正可能なパーミッションを含むことができる。一実施例において、パーミッションはそのパーミッションに影響を及ぼし得る他の制御情報との組合せで解釈される必要がある場合もある。したがって、一実施例において、パーミッションがクリア状態にある場合、これはその機能に関してはそのパーミッションが付与されていないことを示している。しかしながら、パーミッションがセット状態にある場合、一実施例において、これはそのパーミッションが、そのパーミッションを付与することに影響を及ぼし得るあらゆるオーバーライド制御情報にしたがって、付与されていることを示す。
やはり図4に示されるように、フィールド160は命令セットを特定するために与えられ得る。このフィールドのサイズはサポートされる命令セットの数に依存するが、実例として、サポートされる命令セットが2つしかない場合、2つの命令セットのそれぞれを特定できるようにするためには単一のビットフィールドで十分である。
命令セット識別子フィールドが別個の専用のフィールドであり得る一方、一実施例において、それはポインタ値フィールドの1つ又は複数の最下位ビットによって形成されてもよい。例えば、ポインタ値に対するメモリのアラインメント制約のため、ポインタ値の1つ又は複数の最下位ビットが使用されないことがあり、それに応じて、それらの使用されないビットは命令セット識別子フィールドを与えるために使用することができる。
一実施例において、機能が汎用機能レジスタ60のうちの1つにおいて汎用機能である間、命令セット識別子フィールドの値は何の関連性も有さない。しかしながら、機能がPCCレジスタ80にロードされて新しいプログラムカウンタ機能を形成する場合、その機能が新しいプログラムカウンタ機能として使用されると適用可能となる命令セットを特定するために、命令セット識別子フィールドの情報を使用することができる。したがって、これは命令セットを変更させることができる単純なメカニズムを提供する。
しかしながら、命令セットを指定するためのそのような命令セット識別子フィールドの使用が、誤使用に対して強健であることを保証するために、命令が特定される機能をPCCレジスタ80にロードするために使用される時は、特定される機能からの命令セット識別子フィールドの情報を使用して命令セットを変更させるよりも前に、特定される機能に関する機能チェック動作を実施するために、いつも機能ベースのメカニズムが呼び出される。
図5は命令セット内の変更を制御するために一実施例において使用される機能ベースのメカニズムの一般的な概要を与えるフロー図である。一実施例において、機能ベースのメカニズムは、あるタイプの命令が特定される機能をプログラムカウンタ機能レジスタ80にロードしようとすると、トリガされる。特に、機能ベースのメカニズムは、分岐命令がその目的のために使用されるとトリガされ得る。したがって、ステップ200において、分岐命令がプロセッサによって実行されることになるかどうかが判断され、この場合その分岐命令は機能を指定する。分岐命令は具体的に機能レジスタ60のセット内のソース機能レジスタを特定することができ、この時、そのソース機能レジスタはPCCレジスタ80にロードされる特定される機能を含む。しかしながら、ステップ200において分岐命令の他の形態がやはり検出されてもよい。例えば、先に取られた例外に続くいくつかの前のコードに戻るために使用されるリターン命令は、やはりステップ200において検出されるべきタイプの分岐命令と考えることができるが、それはやはりPCCレジスタ80の内容を、特定される機能で更新させるからである。リターン命令の実例において、特定される機能を含むレジスタは明示的に特定される必要はない場合があるが、それはリターン命令からは非明示的であるからである。特に、一実施例において、リターン命令はCELRレジスタ78の内容をPCCレジスタ80にロードさせる。
特定される機能をプログラムカウンタ機能レジスタにロードするために使用される分岐命令が実行されることを特定してあるため、処理はステップ205に進み、特定される機能について機能チェック動作が実施される。図6及び図7を参照して後に議論するように、機能チェック動作の実施のタイミングは実施例によって異なることができる。例えば、PCCレジスタの内容を更新するのに先立って実施されてもよく、又はそれらの内容が更新された後に実施されてもよい。しかしながら、一実施例において、どの手法が取られるかに関わらず、機能チェックが実施されてそれが成功したと判断されるまでは、更新されたプログラムカウンタ機能及び関連付けられている命令セット識別子情報に応じてアクションが取られないように、機能チェックが実施される。
ステップ205における機能チェック動作の実施に続いて、ステップ210において機能チェック動作が成功したか、そうでないかが判断される。成功した場合、処理はステップ215に進み、新しい有効なプログラムカウンタ機能が特定される機能から形成され、さらには命令セットが特定される機能からの命令セット識別子フィールドを使用して決定される。図9A及び図9Bを参照して後により詳細に議論するように、命令セット識別子フィールドの内容はプログラムカウンタ機能に複製することができるか、又は代わりに抽出して別個の制御レジスタ内に格納することができる。
ステップ210において機能チェックが成功していないと判断される場合、処理はステップ220に進み所定のアクションが取られる。所定のアクションは様々な形態を取ることができるが、一実施例において、機能チェック動作が失敗したと判断されると直接例外を取ることを伴うことができる。代替的に、例外を取ることを延期することができ、代わりに後々実行される次の命令によって例外をトリガすることができる。
図6は機能チェック動作が特定される機能をPCCレジスタ80にロードすることに先立って実施される実施例をより詳細に図示するフロー図である。ステップ250において、ソースレジスタ内に存在するものとして特定される機能について機能チェック動作が実施される。次いでステップ255において、機能チェック動作が成功したか、又はそうでないかが決定される。成功した場合、処理はステップ260に進み、PCCレジスタ80の内容を更新するために、及び特定される機能からの命令セット識別子フィールドを使用して命令セット示すことができるように、分岐動作を完了させる。したがって、命令セット識別子フィールド内の情報が、分岐動作の実施に先立って命令セットを特定する情報と違っている場合、そのようなメカニズムによって命令セットが変更されることが了解されよう。続いてフェッチされた命令は、新しく特定される命令セットにしたがってデコードされる。
ステップ255においてテストに失敗した場合、一実施例において、これはステップ270において即時に例外を取ることを伴うことができる。しかしながら、代替的な実施例において、ある期間について例外を取ることを延期することが可能であってもよい。したがって、ステップ265において、例外を取ることを延期するべきか、又はそうでないかを判断することができる。延期しない場合、ステップ270において即時に例外が取られる。
しかしながら、例外が延期される場合、処理はステップ275に進み、機能チェック動作の失敗状態を特定するためにフラグがセットされる。フラグをセットできる複数のやり方がある。例えば、機能チェック動作の失敗状態を特定するために設定される制御レジスタ内に専用の制御フィールドがあってもよい。代替的に、ステップ280において分岐動作を完了させる場合、特定される機能を使用して作成されるプログラムカウンタ機能のいくつかのプロパティは変更することができ、それによって更新されたPCCはそれを使用するようなあらゆる試行がなされると例外をトリガする。特定の実例として、PCCレジスタ内に格納される際、更新されたPCCにおいてタグビットをクリアして、PCCレジスタが有効な機能を格納していないことを示すことができる。
ステップ280において分岐動作が完了され、その結果としてPCCの内容が更新され、命令セットについての情報が特定される機能からの命令セット識別子フィールドを使用して更新される。ステップ285において、次の命令が実行されるかどうか判断され、実行される場合処理はステップ290に進み、フラグがセットされているかどうか判断される。フラグがセットされていると仮定すると、ステップ292において例外が取られ、フラグはクリアされる。しかしながら、フラグがセットされていない場合、命令はステップ294で実行される。
フラグのメカニズムを使用することによって、フラグがセットされてから例外が取られるまでの間にあるイベントが起こるようにする。例えばそれにより、フラグ情報及びプログラムカウンタ機能情報を保存し、次いでフラグをクリアして異なるプログラムカウンタ機能をプログラムカウンタ機能レジスタ80にロードする、優先度の高い例外/割り込みが取られ得る。その優先度の高い例外/割り込みから戻る際、フラグ及びPCC情報は次いで復元され、次の命令が実行されることになる際、セットされたフラグの存在により例外が取られる。
ステップ270又はステップ292のいずれかにおいて例外が取られると、ソフトウェア例外ハンドラは、命令セットにおける試行された変更に対処するために、適当なエラーハンドリングルーチンに制御を渡す。エラーハンドリングルーチンが取り得る複数のステップがある。しかしながら、一実施例において、例外を取ることは機能チェック動作に成功しなかった機能を使用して命令セットを変更する試行がなされた事実によって生じた結果であるため、分岐命令を実行させたアプリケーションを停止することが適当であると考えられ得る。代替的に、例外ハンドリングルーチンは、分岐動作の完了によって命令セットを変更させることが安全であることを確実にするために、いくつかの追加的なチェック及び/又はクリーンアップ動作を実施するように構成されてもよい。
図7は機能チェック動作が特定される機能をPCCレジスタ80にロードした後に実施される、図6に対する代替的な手法を図示するフロー図である。したがって、ステップ300において示されるように、分岐動作を完了させ、その結果、PCCレジスタの内容は特定される機能を使用して更新され、加えて、特定される機能からの命令セット識別子フィールドは命令セットを示すために使用される。
処理は次いでステップ305に進み、次の命令が実行されることになるかどうかを特定され、処理がステップ310に進む場合は、機能チェック動作は、現在PCCレジスタに存在する形態で特定される機能について実施される。ステップ315において機能チェックが成功したと考えられる場合、処理はステップ320に進み、今度は処理によって特定される機能から新しい有効なプログラムカウンタ機能が形成され、また特定される機能からの命令セット識別子フィールドを使用して命令セットが決定される。しかしながら、ステップ315において機能チェック動作が失敗したと判断される場合、処理はステップ325に進み例外が取られる。図6のステップ270又はステップ292について先に議論したような同一のやり方で例外が扱われる。
機能チェック動作は様々な形態を取ることができるが、図8のフロー図によって一実施例が図示される。ステップ350において、特定される機能が有効かどうか判断される。一実施例において、これはタグビットの値を見ることによって判断される。特に、タグビットがセットされている場合、特定される機能は有効な機能であると考えられ、タグビットがクリアされていれば機能は有効ではないと見なされる。特定される機能が有効ではないと判断される場合、処理はステップ370に進み、機能チェックは失敗したものとして示される。
しかしながら、特定される機能が有効であると分かったと仮定すると、一実施例において、関連付けられている機能に与えられる1つ又は複数のパーミッションを参照して1つ又は複数の追加的なチェックを実施することができ、これらのパーミッションの状態は、機能のパーミッションフィールド内に保持される1つ又は複数のパーミッションフラグの値を参照して決定される。
例えば、一実施例において、ステップ355において機能に関連付けられる修正可能なパーミッションがクリア状態にあるかどうか判断される。特に、パーミッションフラグは修正可能なパーミッションをエンコードするために使用することができ、修正可能なパーミッションがクリア状態にある場合、これは関連付けられている機能が1つ又は複数の機能修正命令によって修正不可能であることを示すために使用することができる。したがってこれは、機能のプロパティにおいて、それが修正不可能であるとしてマークされた後、その調整を妨げることによって、その特定の機能について向上したセキュリティを提供することができる。例えば、結合ポインタに関連してその結合ポインタによって処理回路に与えられる機能を増やそうとするために、処理回路が通常の動作において範囲を拡張することができない、又はパーミッションフラグをセットすることができない一方で、結合ポインタが修正不可能であるとしてマークされていな場合、処理回路はその結合ポインタに関連付けられる範囲を減らすため及び/又はパーミッションフラグをクリアするためのステップを取ることが可能であり得る。しかしながら、機能が修正不可能としてマークされている場合、処理回路はいかなるそのような調整も行うことができない。
逆に、修正可能なパーミッションがセット状態にある場合、これは処理回路により範囲を減らすこと及び/又はあるパーミッションフラグをクリアすることが、そのような修正を妨げるようなオーバーライド制御情報がないとすれば、できることを示している。
機能チェック動作の一実施例において、ステップ355によって示されるように、修正可能なパーミッションがクリア状態にない場合、機能チェックは失敗したと判断される。特に、この実施例において、修正不可能な機能をPCCレジスタにロードした結果として命令セットにおいて変化させることだけが適当であると判断されるが、これは機能が現在の処理による使用のために与えられたため命令セット識別子フィールドの内容は変更されていないという追加的な安心感を与えるからである。
したがって、図8に示される実施例において、修正可能なパーミッションがクリア状態にある場合のみ、処理は機能チェックが成功するような状況に進むことができる。一実施例において、追加的なチェックは必要ないことがあり、したがって、修正可能なパーミッションがクリア状態にあると判断されると処理は直接ステップ365に進むことができ、機能チェックが成功したと判断される。しかしながら、代替的な実施例において、1つ又は複数のさらなるチェックが、例えばパーミッションフラグによってエンコードされる1つ又は複数の他のパーミッションの状態を考慮して実施され得る。例えば、ボックス360によって示されるように、実行可能なパーミッションがセット状態にあるかどうか判断することができる。実行可能なパーミッションは機能に関連付けられるが、機能がプログラムカウンタ機能レジスタにロードされる時に関連性があるだけである。特に、実行可能なパーミッションは機能がプログラムカウンタ機能を形成する際、メモリから命令をフェッチするために使用できるかどうかを特定する。したがって、PCCレジスタ内の機能がクリア状態にある実行可能なパーミッションを有する場合、これは機能がメモリから命令をフェッチするために使用されることを妨げられることを示している。したがって、これは分岐命令がPCCレジスタ80にプログラムカウンタ機能として使用されることを意図されていない機能をロードしようとするために使用されていることを示している。したがって、実行可能なパーミッションがクリア状態にある場合、処理はステップ370に進むことができ、機能チェックは失敗していると考えられる。
逆に、実行可能なパーミッションがセット状態にあり、機能がメモリから命令をフェッチするために使用できることを示している場合、いかなるオーバーライド制御情報もその使用を妨げていないとすると、処理はステップ365に進むことができ、機能チェックは成功したと判断される。
図9A及び図9Bは、機能チェックが成功したと判断された状況において、分岐命令を実行する場合、命令セット識別子フィールド情報を使用するための2つの選択肢を図示している。先の議論から明らかとなるように、機能チェックが成功したと判断される状況において、ソース機能レジスタC内の機能を使用してPCCレジスタ80内に新しいプログラムカウンタ機能を形成する。したがって、図9Aの選択肢1によって示されるように、ソース機能レジスタC内の特定される機能400は、新しいPCC410を形成するためにPCCレジスタに複製される。この実施例において、特定される機能400内の命令セット識別子フィールド405はやはりPCCレジスタに複製され、更新されたプログラムカウンタ機能410内に新しいフィールド415を形成する。この実施例において、処理回路は、命令セットを特定するためにPCCレジスタのフィールド415の値を使用するように構成される。したがって、特定される機能405内の命令セット識別子が分岐命令が実行される前に使用されていた命令セットとは異なる命令セットを指定する場合、分岐命令が実行され、それに応じてPCCレジスタ80の内容が更新されていると、フィールド415内の更新された情報により命令セット内の変更が起こる。
図9Bはソース機能レジスタC内の特定される機能420がやはり本質的にPCCレジスタ80に複製され、新しいプログラムカウンタ機能435を形成する、代替の実施例を図示している。しかしながら、この実施例においては、特定される機能420内の命令セット識別子フィールド425が抽出され、PCCレジスタ80に別個に与えられる命令セット制御レジスタ430内に格納される。この実施例において、デフォルトの値は、そうでなければ命令セット識別子フィールドに対応するであろうPCCのフィールド440に書き込まれる。一実施例において、PCC435を使用する際フィールド440内の値は参照されず、したがって、あらゆる所望の値にセットすることができる。
一実施例において、命令セット制御レジスタ430は、命令セット情報を格納するための別個の専用のレジスタであってもよい。しかしながら、代替的な実施例において、既存のレジスタ、例えば現在の処理状態レジスタ74内のフィールドによって与えられてもよい。
一実施例において、前述の機能ベースのメカニズムは、命令セットを変更させる唯一のメカニズムであり得る。しかしながら、別の実施例において、命令セットにおける変更を可能にするさらなるメカニズムとして、追加的な、例外ベースのメカニズムが提供されてもよい。図10において、この処理が概略的に図示されている。ステップ450において、例外が取られ、その結果としてステップ455においてプロセッサは予め定義された状態に遷移する。例外により、例えば、例外が取られた処理も高いレベルのソフトウェア実行特権を有する、より高い例外レベルへ遷移することができる。一実施例において、例外をハンドリングする際プロセッサによって使用される命令セットが予め定められる。例えば、設定レジスタは予め定義された状態にある間実行される例外ハンドラコードに適用可能な命令セットを指定するために使用することができる。代替的に、先に参照された機能ベクトルベースアドレスレジスタ(CVBAR)内のフィールドが命令セットを指定するために使用されてもよい。特定の一実例において、CVBARのビット0がこの目的のために使用されてもよい。別の代替として、命令セットは、特定の命令セットが例外ハンドラコードのために常に使用されるように、全体的に固定されていてもよい。
ステップ455において予め定義された状態に遷移しているため、例外から戻った後に使用されるリターン状態を確立すべく、プロセッサは信頼される例外ハンドリングコードを実行する。この処理の間、例外から戻る際に使用されることになる命令セットを、適当な制御レジスタ内でセットすることができる。例えば、命令セットがPCCレジスタ内のフィールドから直接導出される場合、図9Aを参照して先に議論した実例にしたがって、CELRレジスタ78の内容はリターンアドレス機能内の関連付けられているフィールドが例外から戻る際に適用されるべき命令セットを特定するように更新され得る。代替的に、図9Bの手法が使用される場合、例えば命令セットがCPSR74内のフィールドによって与えられると、例外から戻る際に適用されるべき命令セットを指定するためにSPSR72内の適当なフィールドを信頼されるソフトウェアによって操作することができる。
ステップ460に続き、例外から戻るためにステップ465においてリターン命令を実行することができる。この処理の一部として、CELR78の内容がPCCレジスタ80に復元され、SPSR72の内容はCPSR74に復元される。この後、続いてフェッチされた命令は、新しく特定される命令セットにしたがって解釈される。
さらなる実施例において、命令セットを変更するために、1つ又は複数の追加的な制御されるメカニズムを提供することができる一方、特定の一実施例において、本明細書において説明される機能ベースのメカニズム又は例外ベースのメカニズムの使用により命令セットを変更するだけのために、プロセッサが制約されてもよい。
図11は使用され得る仮想マシンの実装形態を示す。前述の実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、ハードウェアデバイスのいわゆる仮想マシンの実装形態を提供することも可能である。これらの仮想マシンの実装形態は、仮想マシンプログラム510をサポートするホストオペレーティングシステム520を実行させるホストプロセッサ530上で実行する。典型的には、適度な速度で実行する仮想マシンの実装形態を提供するためには大きくパワーのあるプロセッサが要求されるが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再使用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。仮想マシンプログラム510はコンピュータ可読記憶媒体(非一時的媒体であってもよい)に記憶され得、アプリケーションプログラム500にアプリケーションプログラムインターフェース(命令実行環境)を提供し、アプリケーションプログラムインターフェースは仮想マシンプログラム510によってモデリングされるデバイスである現実のハードウェアによって提供されるであろうアプリケーションプログラムインターフェースと同一のものである。命令セット内の変更を制御するための上述の技法は、仮想マシン環境に実装されてもよい。例えば、仮想マシンで実行するソフトウェア、又は仮想マシンを制御するソフトウェアは、そのような特徴を実装するハードウェアを利用することができる。
上述の実施例から、これらの実施例は機能ベースのアーキテクチャ内で命令セットを変更するための高度に制御され制約される技法を提供することが分かるであろう。そのような技法の使用を通じて、これは命令セットを変更しようとする不注意による又は悪意のある試行に対する保護を与え、ひいては機能ベースのアーキテクチャによって与えられる保護の態様をすり抜けようとするために命令セットにおける変更が使用され得る可能性を緩和する。
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスはファンクションを実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変更される必要があることを含意するものではない。
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形、付加、及び修正がそこになされ得ることを理解されたい。例えば、本発明の範囲を逸脱することなく、従属請求項の特徴と独立請求項の特徴との様々な組合せが可能である。

Claims (21)

  1. 命令セットの命令を実行するための処理回路であって、前記命令を実行する際に前記処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するように構成される処理回路と、
    プログラムカウンタ値を決定するために前記処理回路によって使用されるプログラムカウンタ機能を格納するための、プログラムカウンタ機能格納要素と
    を備える装置であって、
    前記処理回路は、特定される機能を前記プログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、前記命令セットを変更するために機能ベースのメカニズムを採用するように構成され、前記処理回路は前記特定される機能に関して機能チェック動作を実施するために、また前記機能チェック動作が成功したとすれば、前記命令セットを前記特定される機能からの命令セット識別子フィールドによって特定させるために、前記機能ベースのメカニズムを呼び出すように構成される、
    装置。
  2. 前記処理回路は、前記特定される機能について、前記特定される機能を前記プログラムカウンタ機能格納要素にロードすることに先立って、前記機能チェック動作を実施するように構成される、請求項1に記載の装置。
  3. 前記処理回路は、前記特定される機能について、前記特定される機能を前記プログラムカウンタ機能格納要素にロードした後、前記機能チェック動作を実施するように構成される、請求項1に記載の装置。
  4. 前記処理回路は、前記機能チェック動作の失敗を検出することに応答して例外を取るように構成される、請求項1から3までのいずれか一項に記載の装置。
  5. 前記処理回路は、前記機能チェック動作の失敗を特定するためにフラグをセットするように構成され、次の命令が実行される際前記フラグをセットすることにより前記例外を取らせる、請求項4に記載の装置。
  6. 前記処理回路は、前記特定される機能を指定する分岐命令を実行することによって、前記機能ベースのメカニズムを呼び出すように構成される、請求項1から5までのいずれか一項に記載の装置。
  7. 前記処理回路からアクセス可能であり、前記命令を実行する際前記処理回路によって実施される動作を制約するために使用される機能を格納するように構成される、1つ又は複数の機能格納要素
    をさらに備え、
    前記分岐命令は前記1つ又は複数の機能格納要素のうちの1つをソースオペランドとして指定し、前記指定された機能格納要素は前記特定される機能を含む、
    請求項6に記載の装置。
  8. 前記分岐命令は、前記特定される機能を形成するリターンアドレス機能を前記プログラムカウンタ機能格納要素にロードするために実行されるリターン命令を含む、請求項6又は7に記載の装置。
  9. 前記処理回路は、前記機能チェック動作を実施する際、前記特定される機能が有効な機能でない限り前記機能チェック動作が成功することを妨げるために、前記特定される機能に関連付けられる有効フラグをチェックするように構成される、請求項1から8までのいずれか一項に記載の装置。
  10. 前記特定される機能は、前記特定される機能に関連付けられる1つ又は複数のパーミッションの状態を特定するために使用されるより多くのパーミッションフラグのうちの1つを含み、
    前記処理回路は、前記機能チェック動作を実施する際、少なくとも1つのパーミッションが所定の状態でない限り前記機能チェック動作が成功することを妨げるために、前記1つ又は複数のパーミッションフラグをチェックするように構成される、請求項1から9までのいずれか一項に記載の装置。
  11. 前記少なくとも1つのパーミッションは、前記特定される機能が、前記プログラムカウンタ機能として使用される場合、メモリから命令をフェッチするための前記特定される機能の使用を妨げるあらゆるオーバーライド制御情報にしたがって、メモリから命令をフェッチするために使用できるかどうか、また前記所定の状態が前記特定される機能がメモリから命令をフェッチするために使用できることを示すセット状態かどうか、を特定するために使用される実行可能なパーミッションを含む、請求項10に記載の装置。
  12. 前記少なくとも1つのパーミッションは、前記特定される機能が1つ又は複数の機能修正命令によって修正可能かどうか、また前記所定の状態が前記機能が前記1つ又は複数の機能修正命令によって修正不可能であることを示すクリア状態かどうかを特定するために使用される修正可能なパーミッションを含む、請求項10又は11に記載の装置。
  13. 前記機能チェック動作が成功する場合、前記処理回路は前記命令セット識別子フィールドを含む前記特定される機能を使用して、前記プログラムカウンタ機能格納要素内に新しいプログラムカウンタ機能を形成するように構成され、
    前記新しいプログラムカウンタ機能内の前記命令セット識別子フィールドの値は、前記命令セットを決定するために使用される、請求項1から12までのいずれか一項に記載の装置。
  14. 前記機能チェック動作が成功する場合、前記処理回路は前記特定される機能を使用して前記プログラムカウンタ機能格納要素内に新しいプログラムカウンタ機能を形成するように構成されるが、前記命令セット識別子フィールドに対応する前記新しいプログラムカウンタ機能内のフィールドはデフォルト値にセットされ、前記処理回路はさらに前記特定される機能の前記命令セット識別子フィールド内の前記値を命令セット制御記憶要素に書き込み、
    前記命令セット制御記憶要素内の前記値は前記命令セットを決定するために使用される、
    請求項1から12までのいずれか一項に記載の装置。
  15. 前記命令セット制御記憶要素は現在のプロセッサ状態レジスタ(CPSR)内のフィールドによって与えられる、請求項14に記載の装置。
  16. 前記処理回路は前記命令セットを変更するために例外ベースのメカニズムをさらに提供し、前記例外ベースのメカニズムを呼び出すと、前記処理回路は、信頼されたソフトウェアが前記例外からリターンする際使用される前記命令セットを特定するリターン状態を確立するために実行される予め定義された状態へ例外を取るように構成される、請求項1から15までのいずれか一項に記載の装置。
  17. 前記処理回路は、前記機能ベースのメカニズム又は前記例外ベースのメカニズムのいずれかを使用して前記命令セットを変更のみできるように制約される、請求項16に記載の装置。
  18. 現在の命令セットの命令を実行するための処理回路であり、前記命令を実行する際に前記処理回路によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するように構成される処理回路を有する装置内で命令セット内の変更を制御する方法であって、前記方法は
    プログラムカウンタ機能格納要素内に、プログラムカウンタ値を決定するために前記処理回路によって使用されるプログラムカウンタ機能を格納することと、
    前記処理回路が、特定される機能を前記プログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、前記現在の命令セットの変更を制御するために機能ベースのメカニズムを呼び出すように構成することであって、前記機能ベースのメカニズムは、
    前記特定される機能に関して機能チェック動作を実施することと、
    前記機能チェック動作が成功したとすれば、前記特定される機能からの命令セット識別子フィールドによって前記命令セットを特定させることと
    を含む、構成することと
    を含む、方法。
  19. 命令セットの命令を実行するための処理手段であって、前記命令を実行する際前記処理手段によって実施される動作を制約するために使用される機能を備える機能ドメインにおいて動作するための処理手段と、
    プログラムカウンタ値を決定するために前記処理手段によって使用されるプログラムカウンタ機能を格納するための、プログラムカウンタ機能格納要素手段と
    を備える装置であって、
    前記処理手段は、特定される機能を前記プログラムカウンタ機能格納要素にロードするために使用される少なくとも1つのタイプの命令の実行に応答して、前記命令セットを変更するために機能ベースのメカニズムを採用し、前記処理手段は前記特定される機能に関して機能チェック動作を実施するために、また前記機能チェック動作が成功したとすれば、前記命令セットを前記特定される機能からの命令セット識別子フィールドによって特定させるために、前記機能ベースのメカニズムを呼び出す、
    装置。
  20. 請求項1から17までのいずれか一項に記載の装置に対応する命令実行環境を提供するためのホストデータ処理装置を制御するためのプログラム命令を含む、仮想マシンコンピュータプログラム。
  21. 請求項20に記載の前記仮想マシンコンピュータプログラムを記憶するコンピュータ可読記憶媒体。
JP2019567553A 2017-06-15 2018-04-27 命令セット内の変更を制御する装置及び方法 Pending JP2020523680A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2023010685A JP2023038361A (ja) 2017-06-15 2023-01-27 命令セット内の変更を制御する装置及び方法

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1709511.8A GB2563580B (en) 2017-06-15 2017-06-15 An apparatus and method for controlling a change in instruction set
GB1709511.8 2017-06-15
PCT/GB2018/051116 WO2018229455A1 (en) 2017-06-15 2018-04-27 An apparatus and method for controlling a change in instruction set

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2023010685A Division JP2023038361A (ja) 2017-06-15 2023-01-27 命令セット内の変更を制御する装置及び方法

Publications (1)

Publication Number Publication Date
JP2020523680A true JP2020523680A (ja) 2020-08-06

Family

ID=59462226

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2019567553A Pending JP2020523680A (ja) 2017-06-15 2018-04-27 命令セット内の変更を制御する装置及び方法
JP2023010685A Pending JP2023038361A (ja) 2017-06-15 2023-01-27 命令セット内の変更を制御する装置及び方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2023010685A Pending JP2023038361A (ja) 2017-06-15 2023-01-27 命令セット内の変更を制御する装置及び方法

Country Status (9)

Country Link
US (1) US11080058B2 (ja)
EP (1) EP3639132B1 (ja)
JP (2) JP2020523680A (ja)
KR (1) KR102547479B1 (ja)
CN (1) CN110709817B (ja)
GB (1) GB2563580B (ja)
IL (1) IL270935B1 (ja)
TW (1) TWI786111B (ja)
WO (1) WO2018229455A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2563580B (en) * 2017-06-15 2019-09-25 Advanced Risc Mach Ltd An apparatus and method for controlling a change in instruction set
US10607015B1 (en) * 2019-05-16 2020-03-31 Cyberark Software Ltd. Security risk assessment and control for code
GB2592069B (en) * 2020-02-17 2022-04-27 Advanced Risc Mach Ltd Address calculating instruction

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62123552A (ja) * 1985-11-22 1987-06-04 Nec Corp 中央処理装置割当て方式
JPH0844557A (ja) * 1994-06-10 1996-02-16 Advanced Risc Mach Ltd データ処理装置
JPH09512651A (ja) * 1994-05-03 1997-12-16 アドバンスド リスク マシーンズ リミテッド 複数命令セットのマッピング
JP2004259143A (ja) * 2003-02-27 2004-09-16 Nec Electronics Corp プロセッサ、システムlsi、システムlsiの設計方法、及び、それを記録した記録媒体
JP2008257734A (ja) * 2007-04-03 2008-10-23 Arm Ltd メモリドメインを基にしたデータ処理システム内のセキュリティ制御
JP2013539574A (ja) * 2010-08-11 2013-10-24 アーム・リミテッド 不正なモード変更の操作
JP2013546100A (ja) * 2010-12-16 2013-12-26 マイクロソフト コーポレーション セキュリティサンドボックス
WO2017032969A1 (en) * 2015-08-27 2017-03-02 Arm Limited An apparatus and method for controlling instruction execution behaviour
WO2017081438A1 (en) * 2015-11-12 2017-05-18 Arm Limited An apparatus and method for controlling use of bounded pointers
WO2017093708A1 (en) * 2015-12-02 2017-06-08 Arm Limited An apparatus and method for managing bounded pointers

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08194504A (ja) * 1995-01-13 1996-07-30 Matsushita Electric Works Ltd プログラマブルコントローラ
GB2376097B (en) * 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
JP2004013556A (ja) * 2002-06-07 2004-01-15 Matsushita Electric Ind Co Ltd プロセッサ装置、コンパイル装置及びその方法
US7340588B2 (en) * 2003-11-24 2008-03-04 International Business Machines Corporation Extending the number of instruction bits in processors with fixed length instructions, in a manner compatible with existing code
US7802252B2 (en) * 2007-01-09 2010-09-21 International Business Machines Corporation Method and apparatus for selecting the architecture level to which a processor appears to conform
GB2448149B (en) * 2007-04-03 2011-05-18 Advanced Risc Mach Ltd Protected function calling
TWI484413B (zh) * 2012-04-03 2015-05-11 Mstar Semiconductor Inc 基於功能性的程式比較方法
US9672164B2 (en) * 2012-05-31 2017-06-06 Nxp Usa, Inc. Methods and systems for transitioning between a user state and a supervisor state based on a next instruction fetch address
US20160026486A1 (en) * 2014-07-25 2016-01-28 Soft Machines, Inc. An allocation and issue stage for reordering a microinstruction sequence into an optimized microinstruction sequence to implement an instruction set agnostic runtime architecture
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
GB2563009B (en) * 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for interpreting permissions associated with a capability
GB2563010B (en) * 2017-05-25 2019-12-25 Advanced Risc Mach Ltd An apparatus and method for managing a capability domain
GB2563580B (en) * 2017-06-15 2019-09-25 Advanced Risc Mach Ltd An apparatus and method for controlling a change in instruction set
US10635445B2 (en) * 2018-05-29 2020-04-28 Arm Limited Handling modifications to permitted program counter ranges in a data processing apparatus

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62123552A (ja) * 1985-11-22 1987-06-04 Nec Corp 中央処理装置割当て方式
JPH09512651A (ja) * 1994-05-03 1997-12-16 アドバンスド リスク マシーンズ リミテッド 複数命令セットのマッピング
JPH0844557A (ja) * 1994-06-10 1996-02-16 Advanced Risc Mach Ltd データ処理装置
JP2004259143A (ja) * 2003-02-27 2004-09-16 Nec Electronics Corp プロセッサ、システムlsi、システムlsiの設計方法、及び、それを記録した記録媒体
JP2008257734A (ja) * 2007-04-03 2008-10-23 Arm Ltd メモリドメインを基にしたデータ処理システム内のセキュリティ制御
JP2013539574A (ja) * 2010-08-11 2013-10-24 アーム・リミテッド 不正なモード変更の操作
JP2013546100A (ja) * 2010-12-16 2013-12-26 マイクロソフト コーポレーション セキュリティサンドボックス
WO2017032969A1 (en) * 2015-08-27 2017-03-02 Arm Limited An apparatus and method for controlling instruction execution behaviour
WO2017081438A1 (en) * 2015-11-12 2017-05-18 Arm Limited An apparatus and method for controlling use of bounded pointers
WO2017093708A1 (en) * 2015-12-02 2017-06-08 Arm Limited An apparatus and method for managing bounded pointers

Also Published As

Publication number Publication date
TW201905705A (zh) 2019-02-01
GB2563580B (en) 2019-09-25
GB2563580A (en) 2018-12-26
US11080058B2 (en) 2021-08-03
GB201709511D0 (en) 2017-08-02
TWI786111B (zh) 2022-12-11
KR102547479B1 (ko) 2023-06-26
CN110709817A (zh) 2020-01-17
EP3639132A1 (en) 2020-04-22
IL270935B1 (en) 2024-05-01
JP2023038361A (ja) 2023-03-16
WO2018229455A1 (en) 2018-12-20
US20200117458A1 (en) 2020-04-16
EP3639132B1 (en) 2024-05-29
KR20200013049A (ko) 2020-02-05
IL270935A (en) 2020-01-30
CN110709817B (zh) 2023-09-22

Similar Documents

Publication Publication Date Title
CN108292272B (zh) 用于管理有界指针的装置和方法
JP7128206B2 (ja) 機能の使用を管理するための装置および方法
KR102548226B1 (ko) 제한 포인터의 사용을 제어하는 장치 및 방법
JP7280196B2 (ja) 機能ドメインを管理するための装置及び方法
CN110663024B (zh) 用于诠释与能力相关联的权限的装置及方法
JP2023038361A (ja) 命令セット内の変更を制御する装置及び方法
KR20230101826A (ko) 캐퍼빌리티들을 사용하여 메모리에 대한 액세스를 제약하기 위한 기술
CN110622133B (zh) 用于管理能力域的设备及方法
JP2024517627A (ja) ケイパビリティを使用してメモリへのアクセスを制約するための技法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210420

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220328

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220413

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20221011