JP6272875B2 - データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 - Google Patents
データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 Download PDFInfo
- Publication number
- JP6272875B2 JP6272875B2 JP2015533687A JP2015533687A JP6272875B2 JP 6272875 B2 JP6272875 B2 JP 6272875B2 JP 2015533687 A JP2015533687 A JP 2015533687A JP 2015533687 A JP2015533687 A JP 2015533687A JP 6272875 B2 JP6272875 B2 JP 6272875B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- domain
- data
- safety
- guard
- 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.)
- Active
Links
- 238000012545 processing Methods 0.000 claims description 165
- 230000004044 response Effects 0.000 claims description 22
- 238000000034 method Methods 0.000 claims description 18
- 238000013500 data storage Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 11
- 239000003550 marker Substances 0.000 claims description 3
- 238000003672 processing method Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 27
- 230000007704 transition Effects 0.000 description 13
- 238000012790 confirmation Methods 0.000 description 9
- 238000012795 verification Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 210000003813 thumb Anatomy 0.000 description 3
- 230000001960 triggered effect Effects 0.000 description 3
- 239000008186 active pharmaceutical agent Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000007423 decrease Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 230000003278 mimic effect Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 231100000279 safety data Toxicity 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 208000011580 syndromic disease Diseases 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/629—Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/554—Detecting local intrusion or implementing counter-measures involving event detection and direct action
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting 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
- G06F21/74—Protecting 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 operating in dual or compartmented mode, i.e. at least one secure mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2105—Dual mode as a secondary aspect
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Description
プログラム命令に応答して、データ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、
データと命令とを格納するためのデータ・ストアであって、各領域が操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理回路によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理回路によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ・ストアとを備える、データ処理装置を提供し、
前記処理回路は、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証し、
前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するように構成されている。
プログラム命令に応答してデータ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータ、並びにデータ及び命令を格納するためのデータ・ストアにアクセスすることができ、前記データ・ストアが複数の異なる安全領域を備え、各領域が操作の前記複数のドメインのうちの1つに対応する、処理回路を備える、装置のためのデータ処理方法を提供し、前記方法は、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域のドメインが、前記処理回路の操作の現在のドメインに対応することを検証するステップと、
前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証するステップと、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるステップと、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するステップとを備える。
プログラム命令に応答してデータ処理操作を実施するための処理手段であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理手段と、
データと命令とを格納するためのデータ格納手段であって、それぞれが操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理手段によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理手段によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ格納手段と
を備えるデータ処理装置であって、
前記処理手段が、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ格納手段の領域が、前記処理手段の操作の現在のドメインに対応することを検証し、
前記プログラム命令が、前記処理手段の操作の前記現在のドメインに対応しない前記データ格納手段の領域に格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ格納手段の前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するためのものである、データ処理装置を提供する。
・<register name>−特定のバージョンは指定されず、現在の状態に関連付けられるバージョンが使用される。この通知は、バンクされていないレジスタのためにも使用される。
・<register_name>_P−レジスタのプライベート・バージョンが使用される。
・<register_name>_NP−レジスタの非プライベート/パブリック・バージョンが使用される。
図9に示されるように、既存のスレッド/ハンドラ・モードに直交するコア(及びより広範なシステム)に、新しいプライベート状態が追加される。システムがパブリック状態のうちの1つで実行しているときに、プライベートとしてマークされているリソースにアクセスしようとすることは、障害をもたらす。
enumeration PrivacyState {PrivacyState_Public,PrivacyState_Private};
PrivacyState CurrentState;
プライベートとしてマークされ得るすべてのメモリ、及び周辺にマッピングされた他のメモリは、チップ上にあると仮定され、したがってそれらを保護するための暗号化は必要ない。アドレス空間への任意のアクセスは、トランザクションをパブリック又はプライベートとしてマークするために使用される、新しい属性P−Attrを含む。P−Attrの伝達は、処理系定義(implementation defined)である。
・プライベートとしてマークされたアドレス空間の領域は、プライベートに設定されたP−Attrを有するトランザクションによってのみアクセス可能でなければならない。パブリックに設定されたP−Attrを有するプライベートアドレスへのどのアクセスも、要求を生成したコンポーネントに報告されるエラーをもたらさなければならない。
・プロセッサは、アドレスのプライバシー状況を決定することができ、これは以下のオプションのうちの1つによって達成される:
・A PAU(privacy attribution unit)
資産保護拡張は、以下の方法でMPU機能性を拡張する:
・MPUコンフィギュレーション・レジスタが、プライバシーでバンクされる。MPUメモリ属性及び特権確認は、現在プライバシー状態を実行しているプロセッサに対応するコンフィギュレーション・レジスタを使用する。
・プライバシー属性ユニット(PAU)−この新しいブロックは、パブリック又はプライベートのいずれかとしてメモリ領域を帰属することを担当する。
プライバシー属性ユニット(PAU)が以下の機能を実行する:
・トランザクションの早期スクリーニング。これによって、プライバシー侵害を早期に(すなわち、メモリ・アクセスが実行される前に)捕えて、BusFaultとして報告される代わりに、有意義な形で報告することができるようになる。
・命令がフェッチされる、プライバシー・ドメインについての情報を提供する。
・データ・アクセスのためにP−AttrがP−Reqに設定され、命令フェッチのためにプライベートに設定される。
・命令フェッチの目的で、アドレス空間全体がプライベートであると報告される。これによって、ブート処理の間にプロセッサが不注意にパブリック状態に移行することを防止する。
プライバシー属性ユニット制御レジスタ、アドレス0xE000EDD0、0×0又はIMPLEMENTATION DEFINEDにリセットする(以下のメモを参照)
ENABLE(ビット[0])1に設定される場合、PAUは使用可能である
RMNP(ビット[1])非プライベートとしてマークされた領域、このビットが、メモリの領域が領域によってマークされる方法を制御する。
0:領域が、メモリの領域をプライベートとしてマークし、領域のいずれとも一致しないアドレスがパブリックとしてマークされる。
1:領域が、メモリの領域をパブリックとしてマークし、領域のいずれとも一致しないアドレスがプライベートとしてマークされる。
プライバシー属性ユニット・タイプ・レジスタ、アドレス0xE000EDD4、読出し専用
PREGION(ビット[7:0])実装されたPAU領域の数。このフィールドがゼロとして読める(reads−as−zero)場合、プロセッサはPAUを実装しない。
プライバシー属性ユニット領域ベースのアドレス・レジスタ、アドレス0xE000EDD8、UNKNOWNにリセットする
REGION(ビット[7:0])PAU_RBAR及びPAU_RASRレジスタによって現在アクセスされている領域を選択する。
プライバシー属性ユニット領域ベースのアドレス・レジスタ、アドレス0xE000EDDC、UNKNOWNにリセットする
REGION(ビット[7:0])どの領域が修正されるべきかを選択する。
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
BADDR(ビット[31:5])領域のベース・アドレスのビット31:5、注:ベース・アドレスのビット[4:0]は、0×0として定義される。
プライバシー属性ユニット領域のリミット・アドレス・レジスタ、アドレス0xE000EDE0、UNKNOWNにリセットする
REGION(ビット[7:0])どの領域が修正されるべきかを選択する
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
LADDR(ビット[31:5])領域のリミット・アドレスのビット31:5、注:ベース・アドレスのビット[4:0]は、0×0として定義される。
プライバシー属性ユニット領域の属性レジスタ、アドレス0xE000EDE4、UNKNOWNにリセットする
REGION(ビット[7:0])どの領域が修正されるべきかを選択する
VALID(ビット[4])0に設定される場合、REGIONフィールドが無視されて、どの領域が修正されるべきかを定義するためにPAU_RNRレジスタにおける値が使用される。
NPC(ビット[31])非プライベート呼出し可能。NPCが1に設定されると、領域は他のプライバシー状態から呼出し可能とマークされる。NPCが1に設定された領域をターゲットとしないプライバシー状態に移行を生じさせる任意の分岐は、生じているフォールトをもたらす。これによって、PGガード命令にさらなるレベルの保護を提供し、リテラル・プールに存在しているガード命令操作コードに関連付けられるリスクを排除するために使用され得る。必要なPAU領域の数を減らすために、プライベート・コードへのすべてのエントリ・ポイントを単一の領域内にグループ化することが好都合である。この領域内のコードは、実行専用としてコンパイルすることができるので、どのようなリテラル・プールも含まない。
データ
データ・アクセスは、以下のように設定されたP−Attrで生成される:
・P−Reqがパブリックに設定される場合(たとえば、プロセッサがパブリック状態である)、P−Attrもパブリックに設定される。
・PAUを有するプロセッサの場合−P−Reqがプライベートに設定される場合(たとえば、プロセッサがプライベート状態である)、また、アドレスがPAU内の領域のうちの1つに一致する場合、P−AttrはPAU_CTRL.RMNPに設定され、アドレスがPAU領域に一致しない場合、P−Attrは逆プライバシー状態のPAU_CTRL.RMNPに設定される。
これによって、PAUを有するより容易な統合M−profileコアをTrustZone対応システムに提供しながら、パブリック・コードが、プライベートとマークされた位置から読み取られる/そこに書き込まれることを防止する。
命令フェッチ行動は、プロセッサがPAUを含むかどうかに依存する:
・PAUを含む場合−アドレスがPAU領域のうちの1つに一致する場合、命令は、PAU_CTRL.RMNPに設定されたP−Attrとともにフェッチされる。このP−Attr値は、プロセッサのプライバシー状態を決定するためにも使用される。
命令が実行されるべきプライバシー状態は、命令がフェッチされた位置のプライバシー状況から推測される。結果として、パブリック状態でプライベート・コードを実行すること、又はプライベート状態でパブリック・コードを実行することは不可能である。しかしながら、攻撃(リターン指向プログラミング)を防ぐために、プライバシー状態へのエントリは以下のメカニズムによって厳密に制御される:
・プロセッサの状態にかかわらず、すべての命令フェッチが、メモリ・アクセスによっていかなるプライバシー違反も生成されないように設定されたP−Attrで実行される。
・命令がフェッチされた位置のプライバシー状態が、PCがパブリック・コードに移動したことを示す場合、以下の動作のうちの1つが発生する。
○分岐がドメイン・クロッシングとしてマークされる場合、コアがパブリック状態に移行する。
○そのようにマークされない場合、PrivateFaultが生じる。この状況は、プライベート・コードがクラッシュすると発生する場合があり、フォールトの発生によってあらゆるプライベート・レジスタがパブリック・ドメインにさらされることを防止することができる。
・プライベート状態への移行は、PGガード命令の存在によって有効なエントリ・ポイントとしてマークされたプライベート・メモリ位置に分岐することによって行われる。パブリック・メモリ内のPGへの分岐は、プライベート状態への移行を生じさせない。
//PrivateEntryPointCheck()
//==========================
PrivateEntryPointCheck()
instState=InstMemState();
CurrentState!=instPrivateの場合、
//例外、リニア・コード・フロー、又は分岐のいずれかによってプライベート・コードに移行している場合、新しい命令が有効なエントリ・ポイント(すなわち、PG)か確認する。
InstState==PrivacyState_Private&&OpCode!=0xE97FE97Fの場合、
ExceptionEntry(PrivateFault TRUE);
return;
//パブリック状態に移行した場合、プライベート状態からの制御されない出口がある。したがってフォールトが生じる。
instState==PrivacyState_Publicの場合、
ExceptionEntry(PrivateFault TRUE);
return;
・エントリは、SVC例外ではなく、PG命令によってゲートされる。
○実行優先順位に変更なし−割込み優先計画に織り込まれる必要はない
○単一のエントリ・ポイントに限定されない−ルーティング/プロキシ・オーバーヘッドがない
○引数はレジスタを介して渡すことができる(SVC命令とSVC例外ハンドラとの間に発生する例外の可能性のために、SVCでは不可能である)
○必要に応じて(たとえば、5以上の引数がある場合)、複数の条件付きMRS命令がスタック・ポインタを取得せずに、スタックを介して引数を渡すことを迅速に行うことができる
・各エントリ・ポイントは、パブリック状態とプライベート状態の両方から呼び出すことができる。
いくつかの状況では、プロセッサが、新しいドメインから第1の命令をフェッチする前に、どの状態に移行するかを知っている場合、アーキテクチャを単純化する。ARMv7−Mアーキテクチャは、ARM命令セットを含まず(また、将来それを必要とする可能性は極めて低く)、したがって、分岐ターゲット・アドレスのそのようなビット・ゼロ(ARMv7−ARアーキテクチャにおいてARM/Thumb相互作用ビットとして使用される)は現在使用されない。資産保護拡張は、プライベート状態における分岐のターゲット状態を信号で通知するために、このビットを以下のように再使用する:
・ターゲット・アドレス[0]=1、分岐のターゲット状態はプライベートである。Thumb命令セットを指定するために、以前に使用されている。
・ターゲット・アドレス[0]=0、分岐のターゲット状態はパブリックである。ARM命令セットを指定するために、以前に予約されている。
・パブリック・コードがこのビットを潜在的な攻撃ベクタとして利用する(use leverage)ことを防止する。
・LSBが1に設定されたアドレスに分岐する、レガシー・ライブラリ、又はレガシー・ツールでコンパイルされたコードの既存の行動を保存する。
要約すると、パブリック・コードを呼び出すプライベート関数だけが、呼出しアドレスのLSBを0に設定する必要がある。
何らかの分岐(又は、リニア・コード・フロー)がパブリック・コードからプライベート・コードへの移行を生じさせる場合、プライベート・コードの第1の命令はPG命令でなければならない。
PG
プライベート・ゲートウェイ。このガード命令は、アドレスが、非プライベート・コードからの分岐にとって有効な分岐ターゲットであることを示すために使用される。注:この命令は、LDRD(リテラル)のTl符号化におけるUNPREDICTABLE空間にフィットする。ARM ARMv7−M issue D section A7.7.50を参照されたい。この符号化は、上位及び下位の16ビットの語が同じ値を有し、ちょうど上部16ビットが命令を現在のISAにおけるUNPREDICTABLEとしてマークするので、意図的に選ばれる。これは、たとえ32ビット命令の中間で分岐が実行されても、このビット・パターンが通常コード内で見つかる可能性を極めて低くする。
PG
InITBlock()の場合、UNPREDICTABLE;
instState = InstMemState();
LR=CurrentState==PrivacyState_Privateの場合、LR<31:1>:‘1’
そうではない場合、LR<31:1>:‘0’;
CurrentState=instState;
ベクトル・テーブル
資産保護拡張は、新しいVTORPレジスタによって指摘された、現在のVTORレジスタと同様のセマンティックを有し、既存のVTORレジスタと同じアドレス(プライベート状態からVTORPにアクセスする)でバンクされる、第2のベクトル・テーブルを追加する。プライベート状態をターゲットとするあらゆる例外は、ベクトル・テーブルのベース・アドレスを決定するために、VTORではなくVTORPレジスタを使用する。プライベート・ベクトル・テーブルを保護するために、VTORPが、プライベートとしてマークされており、したがってパブリック状態からアクセスすることができないメモリの領域を指摘することが重要である。以下のルールは、例外がターゲットとするのはどの状態かを決定するために使用される:
・例外数<16:一般的に、ほとんどの低い数値の例外は、CurrentState変数によってとして決定されるように、プロセッサが現在入っている状態をターゲットとする。以下の例は、一般的なルールから逸脱する:
○PrivateFault−常にプライベート状態をターゲットとする
例外数が7である、新しいPrivateFault例外が定義される。この例外は、実行される様々な安全性確認によってトリガされる(たとえば、パブリック・コードから、有効なエントリ・ポイントとしてマークされていないプライベート・コード内のアドレスにジャンプするときに)。この例外を生成することができるすべてのケースの完全な詳細は、本明細書を通じて擬似コードにおいて見ることができる。
プライベート・フォールト・ステータス・レジスタ、アドレス0xE000ED8C、UNKNOWNにリセットする、ARMv6−Mに存在しないレジスタ
利用制限:
・対応するフォールトを消去するために、レジスタビットに1を書く。
・フォールト・ビットは付加的である;すなわち、複数のフォールトが発生すると、すべての関連ビットが1に設定される。
・プライベート特権状態からのみアクセス可能であり、他の状態からのアクセスはBusFaultを生成する。
INVEP(ビット[0])無効なエントリ・ポイント。パブリック状態からの関数呼出し又は例外が、プライベート状態における非PG命令をターゲットとする場合、このビットが設定される。
INVMS(ビット[1])無効なマジック・シグネチャ。アンスタッキング操作中に、例外スタック・フレーム内のマジック・シグネチャが無効であることが分かった場合、このビットが設定される。
INVER(ビット[2])無効な例外リターン。パブリック状態の例外から戻るときにEXC_RETURN.SCRSが0であったことを示す。
PAUVIOL(ビット[3])PAU違反。パブリックに設定されたトランザクションのためにP−Reqでプライベートとしてマークされたアドレス空間の一部にアクセスする試みが行われたことを示す。
INVALIGN(ビット[4])無効な整列。この例外は、命令がプライベート・ドメイン境界に整列していない場合に発生する。すなわち、命令は境界を横切る。
INVTRAN(ビット[5])無効な移行。この例外は、ドメイン・クロッシングとしてフラグ付けされていない分岐が、プライベート・メモリからパブリック・メモリに移行を生じさせるときに発生する。
InstMemState()
この擬似コード関数は、現在の命令がフェッチされたメモリのPrivacyStateに戻る。
Claims (23)
- プログラム命令に応答して、データ処理操作を実施するように構成された処理回路であって、異なる安全レベルを有する複数の操作ドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、
データと命令とを格納するためのデータ・ストアであって、それぞれの領域が操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理回路によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理回路によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ・ストアとを備える、データ処理装置であって、
前記処理回路が、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証し、
前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するように構成されている、データ処理装置。 - 前記さらなる異なる安全ドメインが、前記安全ドメインよりも低安全であるドメインを備える、請求項1に記載のデータ処理装置。
- 前記処理回路が、前記処理回路の操作の現在のドメインの前記安全レベルよりも高安全レベルを有する前記ドメインのうちの1つに対応する前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することだけに応答して、前記プログラム命令がガード命令を備えるかどうかを検証するように構成されている、請求項1又は2に記載のデータ処理装置。
- 操作の現在のドメインの前記安全レベルよりも低安全レベルである前記ドメインのうちの1つに対応する前記データ・ストアの領域に格納されている前記プログラム命令に応答して、前記処理回路が、前記命令が前記ガード命令を備えるかどうかにかかわらず、操作の前記ドメインを、前記低安全レベルに切り替えるように構成されている、請求項3に記載のデータ処理装置。
- 例外を生成して、フォールト・ハンドリング・コードを実行するために、前記処理回路が前記安全性違反表示に応答する、請求項1から4までのいずれか一項に記載のデータ処理装置。
- 前記処理回路が、異なる長さの命令を有する命令セットからプログラム命令を実行するように構成され、前記処理回路によって必要とされる命令アドレス整列が前記異なる長さに依存し、前記ガード命令の長さが、前記ガード命令の先頭が前記プログラム命令のうちの1つの中の前記命令アドレス整列ポイントの少なくとも1つのサブセットのうちの1つに配置されていたとしたら、前記ガード命令の一部が次の命令の先頭と重複し、常に前記命令を超えるほどの長さである、請求項1から5までのいずれか一項に記載のデータ処理装置。
- 前記命令アドレス整列ポイントの少なくとも1つのサブセットが、前記命令アドレス整列ポイントのすべてを備える、請求項6に記載のデータ処理装置。
- 前記ガード命令の前記長さが、前記命令セットからの最長プログラム命令の長さと等しい、請求項6又は7に記載のデータ処理装置。
- 前記ガード命令が複数の部分で構成され、前記複数の部分のうちの少なくとも2つが、前記処理回路によって必要とされる前記命令アドレス整列間の最小距離の長さを有し、前記複数の部分のうちの前記少なくとも2つが同じ値を有する、請求項6から8までのいずれか一項に記載のデータ処理装置。
- 前記ガード命令が前記2つの部分を備える、請求項9に記載のデータ処理装置。
- 前記同じ値が、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭セグメントでもない、請求項9又は10に記載のデータ処理装置。
- 前記処理回路によって必要とされる前記アドレス整列と整列する場合、前記命令セットからの別の命令と重複し得る前記ガード命令の任意の部分の値が、前記命令セットからの他の任意の命令の有効な操作コードでもなく、操作コードの先頭でもない、請求項6から11までのいずれか一項に記載のデータ処理装置。
- 前記データ・ストアが、前記ガード命令と同じ値を有するプログラム・コード内のリテラルとして、どのデータ値も格納しないように構成されている、請求項1から12までのいずれか一項に記載のデータ処理装置。
- 前記データ・ストアの少なくとも1つのあらかじめ定められたセクションが、前記ガード命令を有効に格納することを許可されるように前記データ・ストアをセグメント化するように構成されており、前記少なくとも1つのあらかじめ定められたセクションではない、前記データ・ストアのセグメント内に配置された前記ガード命令を検出することに応答して、安全性違反表示を生成するように構成されている、請求項1から13までのいずれか一項に記載のデータ処理装置。
- 前記少なくとも1つのあらかじめ定められたセクションが、前記ガード命令と同じ値を有するどのデータ値も格納しないように構成されている、請求項14に記載のデータ処理装置。
- 前記データ・ストアの低安全領域に格納されたプログラム・コードによって呼び出すことができる前記プログラム・コードの一部が、少なくとも1つのあらかじめ定められたセクションに格納されている、請求項14又は15に記載のデータ処理装置。
- 前記データ・ストアが、前記少なくとも1つのあらかじめ定められたセクション内の命令だけを格納するように構成されている、請求項14から16までのいずれか一項に記載のデータ処理装置。
- 前記データ・ストアへのアクセスを制御するためのメモリ・アクセス制御回路を備え、前記メモリ・アクセス制御回路が、前記メモリ・アクセス制御回路内の少なくとも1つのメモリ属性マーカを設定することによって、前記データ・ストアの少なくとも1つのあらかじめ定められたセクションを示すように構成されている、請求項14から17までのいずれか一項に記載のデータ処理装置。
- 前記処理回路が、前記ガード命令をドメイン切替え命令として処理し、前記ガード命令に応答して、操作の前記ドメインを、前記ガード命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるように構成されている、請求項1から18までのいずれか一項に記載のデータ処理装置。
- 前記処理回路が、操作の前記現在のドメインを示しているドメイン・フラグから、操作の前記現在のドメインを決定するように構成されている、請求項1から19までのいずれか一項に記載のデータ処理装置。
- 分岐命令のリターン・アドレスを格納するように構成されたリンク・レジスタを備え、
前記リンク・レジスタに格納された前記リターン・アドレスに分岐するための、前記少なくとも1つの安全領域に格納された分岐命令の実行に続き、前記処理回路が、操作の前記現在のドメインを前記さらなる異なる安全ドメインに切り替えるように構成されている、請求項1から20までのいずれか一項に記載のデータ処理装置。 - プログラム命令に応答してデータ処理操作を実施するための処理回路であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理回路と、データと命令とを格納するためのデータ・ストアであって、複数の異なる領域を備え、各領域が操作の前記複数のドメインのうちの1つに対応する、データ・ストアと
を備える装置のためのデータ処理方法であって、
(i)実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ・ストアの領域が、前記処理回路の操作の現在のドメインに対応することを検証するステップと、
(ii)前記処理回路の操作の前記現在のドメインに対応しない前記データ・ストアの領域に前記プログラム命令が格納されていることを検出することに応答して、
(iii)前記プログラム命令がガード命令を備えるかどうかを検証するステップと、
(iv)前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ・ストアの前記領域に対応するドメインに切り替えるステップと、
(v)前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するステップとを備える、データ処理方法。 - プログラム命令に応答してデータ処理操作を実施するための処理手段であって、異なる安全レベルを有する操作の複数のドメインを有し、安全ドメイン及びさらなる異なる安全ドメインを備え、前記安全ドメイン内で動作するときに、前記さらなる異なる安全ドメインではアクセスすることができない少なくともいくつかのデータにアクセスすることができる処理手段と、
データと命令とを格納するためのデータ格納手段であって、それぞれが操作の前記複数のドメインのうちの1つに対応する複数の領域を備え、また、前記安全ドメイン内で動作している前記データ処理手段によってアクセスすることができ、前記さらなる異なる安全ドメイン内で動作している前記データ処理手段によってアクセスすることができない、機密データを格納するための少なくとも1つの安全領域と、機密性の低いデータを格納するための低安全領域とを備えるデータ格納手段と
を備えるデータ処理装置であって、
前記処理手段が、
実行されるべきプログラム命令のために、前記プログラム命令を格納している前記データ格納手段の領域が、前記処理手段の操作の現在のドメインに対応することを検証し、
前記プログラム命令が、前記処理手段の操作の前記現在のドメインに対応しない前記データ格納手段の領域に格納されていることを検出することに応答して、
前記プログラム命令がガード命令を備えるかどうかを検証し、
前記プログラム命令が前記ガード命令を備える場合、操作の前記ドメインを、前記プログラム命令を格納している前記データ格納手段の前記領域に対応するドメインに切り替え、
前記プログラム命令が前記ガード命令を備えない場合、安全性違反表示を生成するためのものである、データ処理装置。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1217531.1 | 2012-10-01 | ||
GB201217531A GB201217531D0 (en) | 2012-10-01 | 2012-10-01 | ARMv7-M Asset Protection Proposal |
GB1313869.8A GB2506501A (en) | 2012-10-01 | 2013-08-02 | A secure mechanism to switch between different domains of operation |
GB1313869.8 | 2013-08-02 | ||
PCT/GB2013/052423 WO2014053806A1 (en) | 2012-10-01 | 2013-09-17 | A secure mechanism to switch between different domains of operation in a data processor |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015534689A JP2015534689A (ja) | 2015-12-03 |
JP6272875B2 true JP6272875B2 (ja) | 2018-01-31 |
Family
ID=47225487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015533687A Active JP6272875B2 (ja) | 2012-10-01 | 2013-09-17 | データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 |
Country Status (12)
Country | Link |
---|---|
US (1) | US9122890B2 (ja) |
EP (2) | EP2888691B1 (ja) |
JP (1) | JP6272875B2 (ja) |
KR (2) | KR102160916B1 (ja) |
CN (1) | CN104756129B (ja) |
AR (1) | AR092752A1 (ja) |
GB (2) | GB201217531D0 (ja) |
IL (2) | IL237180B (ja) |
IN (1) | IN2015DN01188A (ja) |
MY (2) | MY176723A (ja) |
TW (1) | TWI607342B (ja) |
WO (2) | WO2014053802A1 (ja) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160314296A1 (en) * | 2013-12-17 | 2016-10-27 | Sequitur Labs ,Inc. | Method and System for Dynamic Runtime Selection and Modification of Conditional Expressions in Computations |
US9703733B2 (en) * | 2014-06-27 | 2017-07-11 | Intel Corporation | Instructions and logic to interrupt and resume paging in a secure enclave page cache |
CN105988713B (zh) * | 2015-01-29 | 2019-01-08 | 深圳市硅格半导体有限公司 | 存储装置及存储方法 |
US9747218B2 (en) * | 2015-03-20 | 2017-08-29 | Mill Computing, Inc. | CPU security mechanisms employing thread-specific protection domains |
US9870466B2 (en) * | 2015-09-26 | 2018-01-16 | Mcafee, Inc. | Hardware-enforced code paths |
CN111651202B (zh) * | 2016-04-26 | 2023-09-22 | 中科寒武纪科技股份有限公司 | 一种用于执行向量逻辑运算的装置 |
US20180004946A1 (en) * | 2016-07-01 | 2018-01-04 | Intel Corporation | Regulating control transfers for execute-only code execution |
US10650156B2 (en) | 2017-04-26 | 2020-05-12 | International Business Machines Corporation | Environmental security controls to prevent unauthorized access to files, programs, and objects |
GB2562102B (en) * | 2017-05-05 | 2019-09-04 | Advanced Risc Mach Ltd | An apparatus and method for managing use of capabilities |
CN109754062B (zh) * | 2017-11-07 | 2024-05-14 | 上海寒武纪信息科技有限公司 | 卷积扩展指令的执行方法以及相关产品 |
US11914726B2 (en) | 2018-08-30 | 2024-02-27 | Micron Technology, Inc. | Access control for processor registers based on execution domains |
US11182507B2 (en) * | 2018-08-30 | 2021-11-23 | Micron Technology, Inc. | Domain crossing in executing instructions in computer processors |
GB2577878B (en) * | 2018-10-08 | 2020-11-11 | Advanced Risc Mach Ltd | Transition disable indicator |
CN111353595A (zh) * | 2018-12-20 | 2020-06-30 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN111339060B (zh) * | 2018-12-19 | 2024-03-12 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN111400341B (zh) * | 2019-01-02 | 2022-12-09 | 上海寒武纪信息科技有限公司 | 标量查找指令处理方法、装置及相关产品 |
GB2589895B (en) * | 2019-12-11 | 2022-03-16 | Advanced Risc Mach Ltd | Intermodal calling branch instruction |
GB2589897B (en) * | 2019-12-11 | 2022-03-23 | Advanced Risc Mach Ltd | Domain transition disable configuration parameter |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4087856A (en) * | 1976-06-30 | 1978-05-02 | International Business Machines Corporation | Location dependence for assuring the security of system-control operations |
US7383587B2 (en) * | 2002-11-18 | 2008-06-03 | Arm Limited | Exception handling control in a secure processing system |
GB0226875D0 (en) * | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Control of access to a memory by a device |
GB0226874D0 (en) * | 2002-11-18 | 2002-12-24 | Advanced Risc Mach Ltd | Switching between secure and non-secure processing modes |
US20040168047A1 (en) * | 2003-02-24 | 2004-08-26 | Matsushita Electric Industrial Co., Ltd. | Processor and compiler for creating program for the processor |
CN101076778A (zh) * | 2004-12-14 | 2007-11-21 | 皇家飞利浦电子股份有限公司 | 可编程信号处理电路和交织方法 |
US8621607B2 (en) * | 2006-05-18 | 2013-12-31 | Vmware, Inc. | Computational system including mechanisms for tracking taint |
US8136091B2 (en) * | 2007-01-31 | 2012-03-13 | Microsoft Corporation | Architectural support for software-based protection |
GB2448149B (en) * | 2007-04-03 | 2011-05-18 | Advanced Risc Mach Ltd | Protected function calling |
US8578483B2 (en) * | 2008-07-31 | 2013-11-05 | Carnegie Mellon University | Systems and methods for preventing unauthorized modification of an operating system |
GB2482701C (en) * | 2010-08-11 | 2018-12-26 | Advanced Risc Mach Ltd | Illegal mode change handling |
US9798873B2 (en) * | 2011-08-04 | 2017-10-24 | Elwha Llc | Processor operable to ensure code integrity |
-
2012
- 2012-10-01 GB GB201217531A patent/GB201217531D0/en not_active Ceased
-
2013
- 2013-08-02 GB GB1313869.8A patent/GB2506501A/en not_active Withdrawn
- 2013-08-07 WO PCT/GB2013/052105 patent/WO2014053802A1/en active Application Filing
- 2013-08-07 EP EP13750108.6A patent/EP2888691B1/en active Active
- 2013-08-07 MY MYPI2015700654A patent/MY176723A/en unknown
- 2013-08-07 KR KR1020157008994A patent/KR102160916B1/ko active IP Right Grant
- 2013-09-06 US US14/019,580 patent/US9122890B2/en active Active
- 2013-09-09 TW TW102132457A patent/TWI607342B/zh active
- 2013-09-17 IN IN1188DEN2015 patent/IN2015DN01188A/en unknown
- 2013-09-17 EP EP13773826.6A patent/EP2885738B1/en active Active
- 2013-09-17 WO PCT/GB2013/052423 patent/WO2014053806A1/en active Application Filing
- 2013-09-17 JP JP2015533687A patent/JP6272875B2/ja active Active
- 2013-09-17 CN CN201380049974.2A patent/CN104756129B/zh active Active
- 2013-09-17 MY MYPI2015700648A patent/MY168636A/en unknown
- 2013-09-17 KR KR1020157009802A patent/KR102186675B1/ko active IP Right Grant
- 2013-09-30 AR ARP130103541A patent/AR092752A1/es active IP Right Grant
-
2015
- 2015-02-11 IL IL237180A patent/IL237180B/en active IP Right Grant
- 2015-02-17 IL IL237280A patent/IL237280B/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
IL237280A0 (en) | 2015-04-30 |
IN2015DN01188A (ja) | 2015-06-26 |
TWI607342B (zh) | 2017-12-01 |
KR102186675B1 (ko) | 2020-12-04 |
TW201415287A (zh) | 2014-04-16 |
MY168636A (en) | 2018-11-16 |
KR20150065735A (ko) | 2015-06-15 |
AR092752A1 (es) | 2015-04-29 |
EP2888691A1 (en) | 2015-07-01 |
US9122890B2 (en) | 2015-09-01 |
EP2888691B1 (en) | 2018-11-21 |
WO2014053806A1 (en) | 2014-04-10 |
GB201217531D0 (en) | 2012-11-14 |
GB201313869D0 (en) | 2013-09-18 |
CN104756129A (zh) | 2015-07-01 |
EP2885738B1 (en) | 2016-10-26 |
KR102160916B1 (ko) | 2020-09-29 |
CN104756129B (zh) | 2017-11-28 |
MY176723A (en) | 2020-08-19 |
KR20150064069A (ko) | 2015-06-10 |
WO2014053802A1 (en) | 2014-04-10 |
IL237280B (en) | 2018-04-30 |
IL237180B (en) | 2018-06-28 |
JP2015534689A (ja) | 2015-12-03 |
US20140075581A1 (en) | 2014-03-13 |
GB2506501A (en) | 2014-04-02 |
EP2885738A1 (en) | 2015-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6272875B2 (ja) | データ・プロセッサ内の異なる操作ドメイン間を切り替える安全な手段 | |
Shanbhogue et al. | Security analysis of processor instruction set architecture for enforcing control-flow integrity | |
JP5000573B2 (ja) | 保護された関数呼び出し | |
US20120216281A1 (en) | Systems and Methods for Providing a Computing Device Having a Secure Operating System Kernel | |
KR102192835B1 (ko) | 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호 | |
US10210349B2 (en) | Data processing apparatus and method using secure domain and less secure domain | |
TWI811456B (zh) | 用於驗證堆疊指標的設備、方法、電腦程式及電腦可讀取儲存媒體 | |
US20220366037A1 (en) | Domain transition disable configuration parameter | |
EP4073635B1 (en) | Intermodal calling branch instruction | |
TW202343257A (zh) | 記憶體管理 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20160909 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170823 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170830 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170907 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20171212 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20180104 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6272875 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |