図面 (/)

技術 安全なドメイン及びより安全性の低いドメインを有するデータ処理装置における例外処理

出願人 エイアールエムリミテッド
発明者 グロカット、トーマスクリストファー
出願日 2013年8月7日 (6年6ヶ月経過) 出願番号 2015-533681
公開日 2015年10月15日 (4年4ヶ月経過) 公開番号 2015-530672
状態 不明
技術分野
  • -
主要キーワード 戻り機構 目標コード 状態保存処理 障害条件 障害チェック 関連レジスタ 極秘データ 分岐動作
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2015年10月15日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (20)

課題・解決手段

処理回路は、安全なドメイン及びより安全性の低いドメインで動作することができる。処理回路によって実行されるバックグラウンド処理からの最初の例外応答して、第1のサブセットレジスタからのデータの状態保存が、例外処理ルーチントリガする前に例外制御回路によって実行され、その例外処理ルーチンは、第2のサブセットのレジスタからのデータの状態保存の実行の責任を有する。バックグラウンド処理がより安全性の低いドメイン内であった、より安全性の低いドメインからの安全なドメインからの遷移を引き起こす第1の例外に応答して、例外制御回路は、例外処理ルーチンをトリガする前に第2のセットのレジスタからのデータの追加の状態保存を実行する。安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾鎖式例外に応答して、例外処理ルーチンが、追加の状態保存を実行することなしにトリガされる。

概要

背景

多数のデータ処理システム及びアーキテクチャが、極秘データ及びコードのセクションを不正な人又はプロセスによるアクセスから隔離及び保護する方法を提供する。セキュリティを提供することができることは重要であるが、この保護に関連するパフォーマンス及び回路領域におけるオーバヘッドが存在する。

マイクロコントローラなどの小さなシステムにおいて、これらのオーバヘッドが低く保たれることは非常に重要であり、したがって、セキュリティのレベルとパフォーマンスの間の何らかの妥協が行われる必要があることがある。

データ及びコードを安全に保つ1つの方法が、英国ケンブリッジのARM(登録商標)によって、同社のTrustzoneアーキテクチャで提供され、Trustzoneアーキテクチャでは、安全な状態及び安全ではない状態が存在し、安全な側のセキュリティを保護するソフトウェアハンドラがそれらの状態間の遷移に使用される。本手法は、高度なセキュリティを実現するが、すべての呼出しがソフトウェア・ハンドラを介してプロキシされる必要があるので、ソフトウェア・ハンドラの形でのかなりのソフトウェア介入が、セキュリティ状態を変更するために必要とされ、システムのパフォーマンスを低減するとともに、安全なソフトウェアのための外部アプリケーションプログラムインターフェースAPIを開発するために必要とされる労力を増やす。同様に、安全ではないドメインにおける処理を必要とする安全なドメインにある間に生じる例外もまた、安全な例外ハンドラを介してプロキシされる必要があり、これが、制御が安全ではない例外ハンドラに移動する前に安全な状態が保護されることを可能にする。

(発明の概要
第1の態様から見ると、本発明は、以下を備えるデータ処理装置を提供する:
プログラム・コードに応答してデータ処理動作を実行するための処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、
データを記憶するための複数のレジスタであって、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含むレジスタと、
データを記憶するためのデータ・ストアであって、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアであり、その安全な領域が、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではない、データを記憶することを目的とする、データ・ストアとを備え、
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に第1のサブセットのレジスタからデータの状態保存を実行するように構成され、例外処理ルーチンが、第2のサブセットのレジスタからデータの状態保存を実行する責任を有し、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、バックグラウンド処理が、その安全なドメインで処理回路によって実行され、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第2のサブセットのレジスタからデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理される。

例外がバックグラウンド処理中に生じるとき、そのバックグラウンド処理は、レジスタ内データ値を置いておくことが可能であり、そして、例外が終了したときにこれらのデータ値が保持及び復元されることを可能にするために、本システムは、データ・ストアにレジスタからデータの状態保存を実行することができる。

前述のように、いくつかのシステムでは、達成されるセキュリティのレベルと処理パフォーマンスの間の妥協が達成されることが重要である。これはまた、例外に応答して状態保存を実行するときにも当てはまる

パフォーマンスを理由として、第1のサブセット及び第2のサブセットでレジスタにおいてデータの状態保存を実行することが有用であり得る。第1のサブセットからのデータの状態保存は、例外処理ルーチンをトリガする前にハードウェアにおいて例外制御回路によって実行され得る。一方、例外処理ルーチン(すなわち、ソフトウェア)は、第2のサブセットのレジスタからデータの状態保存を実行する責任を有し得る。

しかし、セキュリティの観点から、例外処理ルーチンの制御下での第2のサブセットのレジスタの状態保存は、時に、問題があることがある。例外が、安全なドメインからより安全性の低いドメインへの遷移をもたらす場合、安全なドメインで実行されるバックグラウンド処理に続いて、次いで、より安全性の低い例外処理ルーチンが、安全なバックグラウンド・コードによって第2のサブセットのレジスタ内に置かれた安全なデータへのアクセスを得ることが可能である。

このセキュリティ侵害を防ぐために、バックグラウンド処理が安全なドメインにあり、安全なドメインからより安全性の低いドメインへの遷移をもたらす第1の例外が生じた場合、例外制御回路は、より安全性の低いドメインで例外処理ルーチンをトリガする前に、第2のサブセットのレジスタからデータの追加の状態保存を実行する。ハードウェアで第2のサブセットのレジスタの状態を保存するための機構を提供することによって、安全なデータを含み得る、第2のサブセットのレジスタの状態保存を実行することは、より安全性の低い例外処理ソフトウェアに必須ではない。

しかし、ハードウェアで追加の状態保存を実行することは、例外処理ルーチンを開始する前により長い遅延をもたらす。前の例外が完了した時点で別の例外が保留になっていることが起こり得る。この場合、処理回路は、前の例外の前に実行されていたバックグラウンド処理に戻る前に他方の例外にサービスすることができる。この状況は「末尾連鎖」と呼ばれ、他方の例外は「末尾連鎖式」例外と呼ばれる。
バックグラウンド処理が安全なドメイン内である、追加の状態保存のパフォーマンス・インパクトを低減するために、追加の状態保存は、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外について実行される。安全なドメインからより安全性の低いドメインへの遷移を引き起こす次の末尾連鎖式例外では、バックグラウンド処理によって必要とされるデータ値は第1の例外に応答して既に保存されたので、追加の状態保存を繰り返す必要はない。したがって、多数の状況で、追加の状態保存を実行することなしに末尾連鎖式例外のための例外処理ルーチンをトリガすることが可能である。

したがって、本技法は、例外に応答して状態保存を実行するときにセキュリティとパフォーマンスの間の改善されたバランスを達成することができる。本発明のハードウェア機構は、安全な例外ハンドラを介するプロキシの必要なしに、より安全性の低い例外の有効な処理を可能にする。

安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御回路は、処理回路をトリガして例外処理ルーチンを実行する前に第1のサブセットのレジスタ及び第2のサブセット・レジスタをクリアすることができる。これは、より安全性の低いドメインにおける例外処理ルーチンは、安全なドメイン内にある間にレジスタ内に置かれたデータにアクセスすることができないことを意味する。

さらに、一実施例で、前記第1の例外に応答して、データ処理装置は、例外制御回路が処理回路をトリガして例外処理ルーチンを実行する前に、第1のサブセットのレジスタが安全なデータを含まないことを確実にするように構成され得る。これが達成され得るいくつかの方法が存在する。たとえば、ハードウェア又はソフトウェアのいずれかが、それらのレジスタが安全なデータを含まないように第1のサブセットのレジスタがクリアされることを確実にすることができる。別法として、第1のサブセットのレジスタが、処理回路がトリガされて例外処理ルーチンを実行する前に安全ではないデータのみを含むように設計され得る場合があることがあり、その場合には第1のサブセットのレジスタをクリアすることは必要ではないことがある。

本願で、「発呼側レジスタ」及び「被発呼側レジスタ」という用語は、それぞれ、第1のサブセット及び第2のサブセットのレジスタを示すために使用され得る。

例外処理ルーチンは、第2のサブセットのレジスタ(被発呼側レジスタ)からのデータの状態保存を実行する責任を有するが、例外処理ルーチンが第2のサブセットからのデータの状態保存を実際に実行することは必須ではないことがある。たとえば、例外制御回路が、第2のサブセット・レジスタの追加の状態保存を既に実行した場合、次いで、例外処理ルーチンは、これらのレジスタの状態保存を省略することができる。

別法として、たとえ追加の状態保存がハードウェアによって既に実行されたとしても例外処理ルーチンにとっては被発呼側レジスタからのデータの状態保存をいつも実行することがより単純であることがある。レジスタがハードウェアによって既にクリアされ得るとき、例外処理ルーチンは、いかなる方法でも被発呼側レジスタにおいてデータ値へのアクセス権を有さないことがあり、ソフトウェアがクリアされたデータ値をデータ・ストアに保存し、クリアされたデータ値を後から復元することに関連するオーバヘッドは、ハードウェアが既に追加の状態保存を実行したかどうかを例外処理ルーチンが検出することを可能にするための機構によって被られるオーバヘッドよりも少ないことがある。

第1のサブセットのレジスタ(発呼側レジスタ)及び第2のサブセット・レジスタ(被発呼側レジスタ)に関して、レジスタのすべてが第2のサブセット内にあるように、第1のサブセットのレジスタが0レジスタを備えることが起こり得る。この場合、多くの例外について、状態保存は、第2のサブセット内のすべてのレジスタを保存する責任を有する例外処理ルーチンで、例外制御回路によって実行されることになる。しかし、第2の安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、追加の状態保存が、より安全性の低いドメインにおける例外処理ルーチンによるこのデータへのアクセスを防ぐために、例外制御回路を使用し、ハードウェアにおいて第2のサブセット(すべてのレジスタ)を保存することが可能である。

追加の状態保存をトリガする第1の例外は、処理がバックグラウンド処理を実行している間に生じる最初の例外でもよい。別法として、第1の例外は、それ自体、最初の例外の後であるがバックグラウンド処理に戻る前に処理される末尾連鎖式例外でもよい。

本願で、「バックグラウンド処理」という用語は、より高い優先度の例外によって割り込まれた処理を示すために使用される。例外処理ルーチン自体がより高い優先度の例外によって割り込まれた場合、次いで、割り込まれた例外処理ルーチンは、先制する例外の「バックグラウンド処理」になることができ、そして、その先制する例外は、次いで、割り込まれるより前に例外処理ルーチンによって使用されていたデータの状態保存をトリガすることになる。

より安全性の低いドメインから安全なドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路は、第2のサブセットのレジスタへの追加の状態保存で保存されたデータを復元することなしに例外処理ルーチンをトリガするように処理回路を制御することができる。本技法がない場合、第2のサブセットのレジスタのデータは、これらのレジスタ内のデータは安全なドメイン内で例外に可視であることが予期されることになるので、この時点で復元されるべきであることが予期されることになる。しかし、本技法は、この復元動作が必須ではないことを認識する。復元を省略することによって、第2のサブセットのレジスタは、さらなる末尾連鎖式例外が、安全なドメインからより安全性の低いドメインに遷移し、生じるときに、やはり保存されることになり、追加の状態保存がこのさらなる末尾連鎖式例外について省略されることを可能にする。末尾連鎖式例外は、レジスタへのデータの保存又は復元によってもたらされる遅延なしにより速く処理され得るので、これは、多くの場合、パフォーマンスを改善する。

安全なドメインからより安全性の低いドメインへの遷移を引き起こす新しい例外に入るとき、例外制御回路は、状態保存ステータス値を使用して、例外処理ルーチンをトリガする前に追加の状態保存を実行するかどうかを判定することができる。状態保存ステータス値は、追加の状態保存が、より安全性の低いドメインで末尾連鎖式例外を処理する前に実行される必要があるかどうかを示すことができる。追加の状態保存が必要であるかどうかは、例外処理の過去の履歴に依存し、したがって、状態保存ステータス値は、この履歴の一態様が記録されることを可能にして、追加の状態保存が再び実行される必要があるかどうかをシステムが判定できるようにする。

一例で、状態保存ステータス値は、少なくとも1つの例外が、バックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されたかどうかを示すことができ、追加の状態保存が安全な例外からより安全性の低い例外への次の末尾連鎖式遷移に必要であることになるかどうかの指示を与える。

新しい例外に入るとき、追加の状態保存は、
(a)バックグラウンド処理が安全なドメインで実行された場合、及び、
(b)状態保存ステータス値が、例外がバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されなかったことを示す場合に、
実行され得る。

他の場合には、追加の状態保存は、必要ではないことになる。バックグラウンド処理が安全なドメイン内でなかった場合、そのバックグラウンド処理はレジスタ内に安全なデータを置かなかったことになり、したがって、より安全性の低いドメインからのデータを保護するための追加の状態保存の必要はない。また、バックグラウンド処理が安全なドメイン内であった場合でも、例外が安全なドメインにおけるバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで既に処理された場合、そのとき、その例外は追加の状態保存をトリガしたことになり、したがって、それは再度必要とされない。

セキュリティ・ドメイン値は、バックグラウンド処理が安全なドメイン又はより安全性の低いドメインで実行されたかどうかを示すために保持され得る。したがって、セキュリティ・ドメイン値及び状態保存ステータス値に基づいて、例外制御回路は、それが新しい例外の入力時に追加のデータ保存を実行する必要があるか否かを判定することができる。

前述のように、状態保存ステータス値は、例外処理の過去の履歴に関する何らかの情報(たとえば、どのドメインで例外が処理されたか)を提供することができる。しかし、これは、過去の例外に関する何らかの情報がより安全性の低いドメインで推論されることを可能にすることがあり、セキュリティ侵害につながり得る。たとえば、これは、より安全性の低いコードがある種の安全なデータが最近処理されたことを推論することを可能にし得る。したがって、より安全性の低いドメインでの処理中に状態保存ステータスをアクセスできなくすることが望ましい場合がある。

これを行う1つの方法は、より安全性の低いドメインに入るときに状態保存ステータス値を固定値に設定すること、及び、安全なドメインに入るときに状態保存ステータス値を変数値に設定することである。より安全性の低いドメイン内にあるとき、その場合、変数値が有用である安全な状態からより安全性の低い状態への遷移は起こらないことになるので、変数値は、安全なドメインにあるときにのみ必要である。したがって、より安全性の低いドメインに入るときにこの値を固定値に設定することによって、より安全性の低いドメインで実行される処理は、状態保存ステータス値から安全なドメインに関する情報を得ることができない。

状態保存ステータス値で生じるもう1つの潜在的セキュリティ問題は、より安全性の低いドメインでのコードが状態保存ステータス値の値を修正することがあり、それにより状態保存が安全なドメインからより安全性の低いドメインへの遷移で実行されるかどうかに影響を及ぼす可能性である。ハッカーが状態保存が実行されるかどうかの制御を得ることができる場合、これは安全なデータの漏えいにつながり得る。この問題を防ぐいくつかの方法が存在する。

一例で、より安全性の低いドメインでの例外から戻るとき、例外制御回路は、状態保存ステータス値がより安全性の低いドメインに入るときに設定された固定値をまだ有するかどうかをチェックすることができ、状態保存ステータス値がその固定値を有さない場合にはエラーがトリガされ得る。状態保存ステータス値は、より安全性の低いドメインにある間に固定値を有することになっているので、その場合、他のいかなる値も改ざんが生じたことを示すことができ、したがって、障害がトリガされ得る。

別法として、状態保存ステータス値は、より安全性の低いドメインでの処理中に変数値を有し得る。これは、より安全性の低いドメインにおける例外が変数値を有する状態保存ステータス値にアクセスすることを可能にすることがセキュリティの観点から問題ではない場合に適し得る。しかし、その後の状態保存動作に影響を及ぼすより安全性の低いドメインにおけるコードによる状態保存ステータス値への変更を防ぐために、より安全性の低いドメインでの例外から戻るときに、例外制御回路は、状態保存ステータス値の例外処理を独立して制御することができる。状態保存ステータス値を無視すること、及び、状態保存ステータス値が、より安全性の低い例外を出るときに1つの値又は別の値を有するどうかに関わらず同処理を実行することによって、より安全性の低いドメインでのコードによる状態保存ステータス値での改ざんは、システムのセキュリティに影響をもたらさないことになる。

たとえば、より安全性の低い例外ハンドラを離れた後、状態保存ステータス値は、より安全性の低いドメインでの動作中のステータス値への任意の変更を無効にするために、それがそのより安全性の低いドメインで有することになっていた値にリセットされ得る。これは、その後の処理が、より安全性の低い例外から戻るときに状態保存ステータス値が有する値から独立していることを意味する。

もう1つの例で、状態保存ステータス値は、末尾連鎖式例外の間で切り替えるときにドメイン間の最新の遷移が、ドメインから安全なドメインへのものであったかどうかを示すことができる。これは、追加の状態保存が必要かどうかを判定するために、バックグラウンド処理が安全なドメインで実行されたかどうかを示す、セキュリティ・ドメイン値と結合され得る。この方式の利点は、状態保存ステータス値が、より安全性の低いドメインにおける固定値、及び、安全なドメインにおける変数値を有することになることである(より安全性の低いドメインから安全なドメインへの前の遷移が存在したかどうかに応じて)。

たとえば、状態保存ステータス値は、バックグラウンド処理に続く最初の例外を処理するときに第1の値に初期化され得る。バックグラウンド処理が安全なドメイン内であった場合、次いで、末尾連鎖式例外の入力時に、末尾連鎖式例外が安全なドメイン内にあり、より安全性の低いドメイン内の前の例外に続く場合、状態保存ステータス値は第2の値に設定され得る。より安全性の低いドメインにおける例外の入力時に、状態保存ステータス値は、第1の値に設定され得る。より安全性の低いドメインから安全なドメインからの遷移を引き起こす末尾連鎖式例外を入力するとき、次いで、状態保存ステータス値が第1の値を有する場合に、追加の状態保存が実行され得る。このように、追加の状態保存は、必要なときに実行することが可能であり、それが既に実行された又は不必要であるときには省略することができ、そして、状態保存ステータス値は、処理がより安全性の低いドメイン内である間、固定値(第1の値)を有するように制御され得る。

生じる1つの問題は、異なる例外の間を遷移するときに、状態保存ステータス値が保持されることをどのように可能にするかである。状態保存ステータス値は、メモリ内に置かれ得るが、必要とされるときにその値にアクセスするのは比較的遅くなることになる。状態保存ステータス値はまた、レジスタ内に置かれ得るが、その場合、1つの例外から別の例外に切り替えるときに保存され、場合によりクリアされる可能性が高いことになる。

状態保存ステータス値を表す1つの有用な方法は、リンク・レジスタに記憶された例外戻り値の部分にある。リンク・レジスタに記憶された例外戻り値は、例外処理ルーチンからの戻りを制御するために使用される。

例外に入るとき、例外制御回路は、有効な命令アドレスに対応しないダミー例外戻りアドレスにリンク・レジスタを設定することができる。例外処理ルーチンは、リンク・レジスタに記憶されたアドレスへの分岐を含み得る。ダミー例外戻りアドレスへの分岐に応答して、例外制御回路は、その分岐が別のタイプの戻り(たとえば、関数戻り)ではなくて例外戻りであることを検知することができ、それが、バックグラウンド処理に戻る前に、状態保存で前に保存されたデータを復元するための状態復元処理を実行する必要があることを検知することができる。有効な命令アドレスの代わりのダミー例外戻りアドレスの使用は、同分岐及びリンク機構が他のタイプの戻り(たとえば、関数戻り)に関して例外戻りのために使用されることを可能にする。

有用な特性は、リンク・レジスタが各例外への入力で例外戻り値に新たに設定されることである(末尾連鎖式例外で、例外戻りアドレスは、前の例外に関して同値に設定されたことになる)。本技法は、例外戻り値のこのリフレッシュを使用して、例外処理の過去の履歴に関する例外から例外への情報を渡す。例外戻り値の部分として状態保存ステータス値を指示すること、及び、新しい例外戻り値がリンク・レジスタに記憶されるときに状態保存ステータス値を変更することによって、情報は、例外間で渡され、異なる値に設定することが可能であり、追加の状態保存が必要とされるかどうかの判定を可能にすることができる。これは、各末尾連鎖式例外に同じ例外戻り値を使用する従来の技法とは全く異なる。

状態保存ステータス値はまた、例外の先制の場合に有用であり得る。現在の例外より高い優先度の例外が生じた場合、そのとき、現在の処理は停止することができ、より高い優先度の例外が代わりに処理され得る。これは先制として知られる。

しかし、先制が状態保存を実行する間に生じた場合、そのとき、その状態保存が完了されるかどうかは、先制する例外のパフォーマンスに影響を及ぼし得る。第1のサブセットのレジスタの状態保存がまだ完了しておらず、先制する例外に先んじて追加の状態保存が実行されることが必要でない場合、そのとき、たとえその状態保存を最初にトリガした例外にとって必要であったとしても、追加の状態保存を省略することが最も速いことがある。

他方で、先制する例外が第2のサブセットのレジスタの追加の状態保存を実行する間に生じた場合、既に実行された追加の状態保存の停止及び反転はもっと時間を要する可能性があるので、そのとき、たとえこれが先制する例外のために必要ではなくても、追加の状態保存を完了することが最も効率的であり得る。したがって、追加の状態保存が実行されていない場合にセキュリティ侵害を引き起こすことになるさらなるより安全性の低い例外がたとえ存在しなくても、追加の状態保存を完了することがパフォーマンスの観点からやはりより効率的であり得る。

追加の状態保存が実行されたことをその後の例外に指示するために、状態保存ステータス値が、この先制の場合には、設定され得る。先制する例外の後に実行される、安全なドメインからより安全性の低いドメインに切り替えるさらなる末尾連鎖式例外に応答して、追加の状態保存は、状態保存ステータス値がそれが既に実行されたことを示す場合、省略され得る。

状態保存は、様々な場所にデータを記憶することができる。データ・ストアの一般領域にレジスタの内容を記憶することが可能である。しかし、この場合、データ・ストア内のどこにそのレジスタ内容が保存されたかの指示を保持することが必要であることになる。したがって、状態保存の実行のより簡単な方法は、データ・ストア内でスタックを使用することである。スタックを使用するとき、スタックに記憶されたデータの場所は、それらのレジスタのうちの1つのレジスタ内のスタック・ポインタの形で保持され、それが復元される必要があるときにそのデータへの速い、容易なアクセスを可能にする。

安全なドメイン及びより安全性の低いドメインを有する安全なシステムに関して、安全なスタック及びより安全性の低いスタックが存在し得る。第1のサブセットのレジスタの状態保存及び第2のサブセットのレジスタの追加の状態保存で、例外制御回路は、バックグラウンド処理が最初の例外を実行するために停止されたときに処理回路が動作していた現在のドメインに対応する、安全なスタック及びより安全性の低いスタックのうちの1つにデータを保存することができる。最初の例外は、追加の状態保存をトリガした前記第1の例外でもよく、又は、前の例外でもよい。

本願は、概して、より安全性の低いドメイン及び安全なドメインを参照するが、異なるセキュリティ・レベル若しくは同じセキュリティ・レベルを有する複数の安全なドメイン、又は同じ若しくは異なるセキュリティ条件を有する複数のより安全性の低いドメインがそこに存在することが起こり得る。

さらなる一態様から見ると、本発明は、以下を備えるデータ処理装置を実現する:
プログラム・コードに応答してデータ処理動作を実行するための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、
データを記憶するための複数のレジスタ手段であって、第1のサブセットのレジスタ手段及び第2のサブセットのレジスタ手段を含むレジスタ手段と、
データを記憶するためのデータ記憶手段であり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ記憶手段であって、その安全な領域が、安全なドメインで動作するときに処理手段によってアクセス可能であり、より安全性の低いドメインで動作するときに処理手段によってアクセス可能ではないデータを記憶することを目的とする、データ記憶手段とを備え、
処理手段によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御手段が、その処理手段をトリガしてその例外に対応する例外処理ルーチンを実行する前に第1のサブセットのレジスタ手段からデータの状態保存を実行するように構成され、その例外処理ルーチンが、第2のサブセットのレジスタ手段からデータの状態保存を実行する責任を有し、
バックグラウンド処理が安全なドメインでその処理手段によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御手段が、その処理手段をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第2のサブセットのレジスタ手段からデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御手段が、処理手段をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理された、データ処理装置。

もう1つの態様から見ると、本発明は、プログラム・コードに応答してデータ処理動作を実行するための処理回路であり、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであり、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含むレジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアとを備える、データ処理装置のためのデータ処理方法を提供し、安全な領域は、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではないデータを記憶することを目的とし、
本方法は、以下のステップを含む:
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に、第1のサブセットのレジスタからデータの状態保存を実行するステップであり、例外処理ルーチンが、第2のサブセットのレジスタからデータの状態保存を実行する責任を有する、ステップと、
バックグラウンド処理が安全なドメインで処理回路によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に、第2のサブセットのレジスタからデータの追加の状態保存を実行するステップと、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するステップであり、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理される、ステップ。

本発明のさらなる具体的な及び好ましい態様が、添付の独立及び従属請求項提示される。従属請求項の特徴は、必要に応じて独立請求項の特徴と、及び、特許請求の範囲で明示的に提示されたもの以外の組合せで、結合され得る。

本発明は、単に例として、以下のような添付の図面に示すような実施例を参照してさらに説明されることになる。

概要

処理回路は、安全なドメイン及びより安全性の低いドメインで動作することができる。処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、第1のサブセットのレジスタからのデータの状態保存が、例外処理ルーチンをトリガする前に例外制御回路によって実行され、その例外処理ルーチンは、第2のサブセットのレジスタからのデータの状態保存の実行の責任を有する。バックグラウンド処理がより安全性の低いドメイン内であった、より安全性の低いドメインからの安全なドメインからの遷移を引き起こす第1の例外に応答して、例外制御回路は、例外処理ルーチンをトリガする前に第2のセットのレジスタからのデータの追加の状態保存を実行する。安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外処理ルーチンが、追加の状態保存を実行することなしにトリガされる。

目的

多数のデータ処理システム及びアーキテクチャが、極秘データ及びコードのセクションを不正な人又はプロセスによるアクセスから隔離及び保護する方法を提供する

効果

実績

技術文献被引用数
- 件
牽制数
- 件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

該当するデータがありません

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

プログラム・コードに応答してデータ処理動作を実行するための処理回路であって、例外処理を制御するための例外制御回路を備える前記処理回路と、データを記憶するための複数のレジスタであって、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含む前記レジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアであって、前記安全な領域が、安全なドメインで動作するときには前記処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには前記処理回路によってアクセス可能ではない、データを記憶することを目的とする、前記データ・ストアとを備える、データ処理装置であって、前記処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第1のサブセットのレジスタからデータの状態保存を実行するように構成され、前記例外処理ルーチンが、前記第2のサブセットのレジスタからデータの状態保存を実行する責任を有し、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、前記バックグラウンド処理が、前記安全なドメインで前記処理回路によって実行され、前記例外制御回路が、前記処理回路をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第2のサブセットのレジスタから前記データの追加の状態保存を実行するように構成され、そして、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾鎖式例外に応答して、前記例外制御回路が、前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成され、前記末尾連鎖式例外が、前記第1の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、前記データ処理装置。

請求項2

前記第1の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に、前記第1のサブセットのレジスタ及び前記第2のサブセットのレジスタをクリアするように構成された、請求項1に記載のデータ処理装置。

請求項3

前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に前記追加の状態保存を実行した場合に、次いで、前記例外処理ルーチンが、前記第2のサブセットのレジスタの前記状態保存を実行しない、請求項1又は2に記載のデータ処理装置。

請求項4

前記例外制御回路が、前記処理回路をトリガして前記例外処理ルーチンを実行する前に前記追加の状態保存を実行した場合に、次いで、前記例外処理ルーチンはまた、前記第2のサブセットのレジスタの状態保存を実行する、請求項1又は2に記載のデータ処理装置。

請求項5

前記第1の例外が、前記最初の例外を備える、請求項1から4までのいずれか一項に記載のデータ処理装置。

請求項6

前記第1の例外が、前記最初の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される末尾連鎖式例外を備える、請求項1から5までのいずれか一項に記載のデータ処理装置。

請求項7

前記より安全性の低いドメインから前記安全なドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が、前記第2のサブセットのレジスタへの前記追加の状態保存で保存された前記データを復元することなしに前記例外処理ルーチンをトリガするように前記処理回路を制御するように構成された、請求項1から6までのいずれか一項に記載のデータ処理装置。

請求項8

前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす新しい例外に入るときに、前記例外制御回路が、状態保存ステータス値に依存して、前記例外処理ルーチンをトリガする前に前記追加の状態保存を実行するかどうかを判定するように構成された、請求項1から7までのいずれか一項に記載のデータ処理装置。

請求項9

前記状態保存ステータス値が、前記追加の状態保存が、前記より安全性の低いドメインで末尾連鎖式例外を処理する前に実行される必要があるかどうかを指示する、請求項8に記載のデータ処理装置。

請求項10

前記状態保存ステータス値が、少なくとも1つの例外が前記バックグラウンド処理の停止と前記新しい例外の入力の間に前記より安全性の低いドメインで処理されたかどうかを指示する、請求項8又は9に記載のデータ処理装置。

請求項11

前記新しい例外に入るときに、(a)前記バックグラウンド処理が前記安全なドメインで実行された場合、及び、(b)前記状態保存ステータス値が、例外が前記バックグラウンド処理の停止と前記新しい例外の入力の間に前記より安全性の低いドメインで処理されなかったことを指示する場合に、前記例外制御回路が、前記追加の状態保存を実行するように構成された、請求項10に記載のデータ処理装置。

請求項12

前記例外制御回路が、前記バックグラウンド処理が前記安全なドメイン又は前記より安全性の低いドメインで実行されたかどうかを指示するセキュリティ・ドメイン値を設定するように構成された、請求項11に記載のデータ処理装置。

請求項13

前記例外制御回路が、前記より安全性の低いドメインに入るときに前記状態保存ステータス値を固定値に設定するように、及び、前記安全なドメインに入るときに前記状態保存ステータス値を変数値に設定するように構成された、請求項8から12までのいずれか一項に記載のデータ処理装置。

請求項14

前記より安全性の低いドメイン内の例外から戻るときに、前記例外制御回路が、前記状態保存ステータス値が前記固定値をまだ有するかどうかをチェックするように、及び、前記状態保存ステータス値が前記固定値を有さない場合にエラーをトリガするように構成された、請求項13に記載のデータ処理装置。

請求項15

前記状態保存ステータス値が、変数値を有し、そして、前記より安全性の低いドメイン内の例外から戻るときに、前記例外制御回路が、前記状態保存ステータス値とは無関係に例外処理を制御するように構成された、請求項8から14のいずれか一項に記載のデータ処理装置。

請求項16

前記状態保存ステータス値が、末尾連鎖式例外の間で切り替えるときの前記ドメイン間の前記最新の遷移が、前記より安全性の低いドメインから前記安全なドメインへのものであったかどうかを指示する、請求項8から15までのいずれか一項に記載のデータ処理装置。

請求項17

前記レジスタが、前記例外処理ルーチンからの戻りを制御するための例外戻り値を記憶するためのリンク・レジスタを含む、請求項8から16までのいずれか一項に記載のデータ処理装置。

請求項18

例外に入るときに、前記例外制御回路が、有効な命令アドレスに対応しないダミー例外戻りアドレスに前記リンク・レジスタを設定するように構成され、前記例外処理ルーチンが、前記リンク・レジスタで設定された前記アドレスへの分岐を含み、そして、前記リンク・レジスタで指示された前記ダミー例外戻りアドレスへの前記分岐に応答して、前記例外制御回路が、前記処理回路をバックグラウンド処理に戻らせる前に、前記状態保存で保存された前記データを復元するための状態復元処理を実行するように構成された、請求項17に記載のデータ処理装置。

請求項19

前記状態保存ステータス値が、前記ダミー例外戻りアドレスの部分で指示される、請求項17又は18に記載のデータ処理装置。

請求項20

前記第1の例外より高い優先度を有する先制する例外が、前記第2のサブセットのレジスタの前記追加の状態保存を実行する間に生じた場合に、前記例外制御回路が、前記処理回路をトリガして前記先制する例外の前記例外処理ルーチンを処理する前に前記追加の状態保存を完了するように構成された、請求項1から19までのいずれか一項に記載のデータ処理装置。

請求項21

前記追加の状態保存の完了時に、前記例外制御回路が、前記追加の状態保存が実行されたことを指示するための状態保存ステータス値を設定するように構成された、請求項20に記載のデータ処理装置。

請求項22

前記先制する例外の後に実行される前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が、前記状態保存ステータス値が、前記追加の状態保存が前に実行されたことを示す場合に、前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成された、請求項21に記載のデータ処理装置。

請求項23

前記データ・ストアが、安全なスタック及びより安全性の低いスタックを含む複数のスタックを備える、請求項1から22までのいずれか一項に記載のデータ処理装置。

請求項24

前記第1のサブセットのレジスタの前記状態保存及び前記第2のサブセットのレジスタの前記追加の状態保存において、前記例外制御回路が、前記バックグラウンド処理を実行する間に前記最初の例外が発生するときに前記処理回路が動作していた前記現在のドメインに対応する、前記安全なスタック及び前記より安全性の低いスタックのうちの1つに前記データを保存するように構成された、請求項23に記載のデータ処理装置。

請求項25

プログラム・コードに応答してデータ処理動作を実行するための処理手段であって、例外処理を制御するための例外制御手段を備える前記処理手段と、データを記憶するための複数のレジスタ手段であって、第1のサブセットのレジスタ手段及び第2のサブセットのレジスタ手段を含む前記レジスタ手段と、データを記憶するためのデータ記憶手段であり、安全な領域及びより安全性の低い領域を含む複数の領域を備える前記データ記憶手段であって、前記安全な領域が、安全なドメインで動作するときに前記処理手段によってアクセス可能であり、より安全性の低いドメインで動作するときに前記処理手段によってアクセス可能ではないデータを記憶することを目的とする、前記データ記憶手段とを備え、前記処理手段によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御手段が、前記処理手段をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第1のサブセットのレジスタ手段からデータの状態保存を実行するように構成され、前記例外処理ルーチンが、前記第2のサブセットのレジスタ手段からデータの状態保存を実行する責任を有し、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、前記バックグラウンド処理が前記安全なドメインで前記処理手段によって実行され、前記例外制御手段が、前記処理手段をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第2のサブセットのレジスタ手段からデータの追加の状態保存を実行するように構成され、そして、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御手段が、前記処理手段をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するように構成され、前記末尾連鎖式例外が、前記第1の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、データ処理装置。

請求項26

プログラム・コードに応答してデータ処理動作を実行するための処理回路であり、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであり、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含むレジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアとを備え、前記安全な領域が、安全なドメインで動作するときには前記処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには前記処理回路によってアクセス可能ではないデータを記憶することを目的とする、データ処理装置のためのデータ処理方法であって、前記処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、前記例外制御回路が、前記処理回路をトリガして前記例外に対応する例外処理ルーチンを実行する前に前記第1のサブセットのレジスタからデータの状態保存を実行するステップであり、前記例外処理ルーチンが、前記第2のサブセットのレジスタからデータの状態保存を実行する責任を有する、ステップと、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、前記バックグラウンド処理が、前記安全なドメインで前記処理回路によって実行され、前記例外制御回路が前記処理回路をトリガして前記より安全性の低いドメインで前記例外処理ルーチンを実行する前に前記第2のサブセットのレジスタからデータの追加の状態保存を実行するステップと、前記安全なドメインから前記より安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、前記例外制御回路が前記処理回路をトリガして、前記追加の状態保存を実行することなしに前記例外処理ルーチンを実行するステップであって、前記末尾連鎖式例外が、前記第1の例外が処理された後に及び前記バックグラウンド処理に戻る前に処理される、ステップとを含む、方法。

技術分野

0001

本発明は、データ処理の分野に関し、詳細には、安全なドメイン及びより安全性の低いドメインを有するデータ処理に関する。

背景技術

0002

多数のデータ処理システム及びアーキテクチャが、極秘データ及びコードのセクションを不正な人又はプロセスによるアクセスから隔離及び保護する方法を提供する。セキュリティを提供することができることは重要であるが、この保護に関連するパフォーマンス及び回路領域におけるオーバヘッドが存在する。

0003

マイクロコントローラなどの小さなシステムにおいて、これらのオーバヘッドが低く保たれることは非常に重要であり、したがって、セキュリティのレベルとパフォーマンスの間の何らかの妥協が行われる必要があることがある。

0004

データ及びコードを安全に保つ1つの方法が、英国ケンブリッジのARM(登録商標)によって、同社のTrustzoneアーキテクチャで提供され、Trustzoneアーキテクチャでは、安全な状態及び安全ではない状態が存在し、安全な側のセキュリティを保護するソフトウェアハンドラがそれらの状態間の遷移に使用される。本手法は、高度なセキュリティを実現するが、すべての呼出しがソフトウェア・ハンドラを介してプロキシされる必要があるので、ソフトウェア・ハンドラの形でのかなりのソフトウェア介入が、セキュリティ状態を変更するために必要とされ、システムのパフォーマンスを低減するとともに、安全なソフトウェアのための外部アプリケーションプログラムインターフェースAPIを開発するために必要とされる労力を増やす。同様に、安全ではないドメインにおける処理を必要とする安全なドメインにある間に生じる例外もまた、安全な例外ハンドラを介してプロキシされる必要があり、これが、制御が安全ではない例外ハンドラに移動する前に安全な状態が保護されることを可能にする。

0005

(発明の概要
第1の態様から見ると、本発明は、以下を備えるデータ処理装置を提供する:
プログラム・コードに応答してデータ処理動作を実行するための処理回路であって、例外処理を制御するための例外制御回路を備える処理回路と、
データを記憶するための複数のレジスタであって、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含むレジスタと、
データを記憶するためのデータ・ストアであって、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアであり、その安全な領域が、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではない、データを記憶することを目的とする、データ・ストアとを備え、
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に第1のサブセットのレジスタからデータの状態保存を実行するように構成され、例外処理ルーチンが、第2のサブセットのレジスタからデータの状態保存を実行する責任を有し、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、バックグラウンド処理が、その安全なドメインで処理回路によって実行され、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第2のサブセットのレジスタからデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理される。

0006

例外がバックグラウンド処理中に生じるとき、そのバックグラウンド処理は、レジスタ内データ値を置いておくことが可能であり、そして、例外が終了したときにこれらのデータ値が保持及び復元されることを可能にするために、本システムは、データ・ストアにレジスタからデータの状態保存を実行することができる。

0007

前述のように、いくつかのシステムでは、達成されるセキュリティのレベルと処理パフォーマンスの間の妥協が達成されることが重要である。これはまた、例外に応答して状態保存を実行するときにも当てはまる

0008

パフォーマンスを理由として、第1のサブセット及び第2のサブセットでレジスタにおいてデータの状態保存を実行することが有用であり得る。第1のサブセットからのデータの状態保存は、例外処理ルーチンをトリガする前にハードウェアにおいて例外制御回路によって実行され得る。一方、例外処理ルーチン(すなわち、ソフトウェア)は、第2のサブセットのレジスタからデータの状態保存を実行する責任を有し得る。

0009

しかし、セキュリティの観点から、例外処理ルーチンの制御下での第2のサブセットのレジスタの状態保存は、時に、問題があることがある。例外が、安全なドメインからより安全性の低いドメインへの遷移をもたらす場合、安全なドメインで実行されるバックグラウンド処理に続いて、次いで、より安全性の低い例外処理ルーチンが、安全なバックグラウンド・コードによって第2のサブセットのレジスタ内に置かれた安全なデータへのアクセスを得ることが可能である。

0010

このセキュリティ侵害を防ぐために、バックグラウンド処理が安全なドメインにあり、安全なドメインからより安全性の低いドメインへの遷移をもたらす第1の例外が生じた場合、例外制御回路は、より安全性の低いドメインで例外処理ルーチンをトリガする前に、第2のサブセットのレジスタからデータの追加の状態保存を実行する。ハードウェアで第2のサブセットのレジスタの状態を保存するための機構を提供することによって、安全なデータを含み得る、第2のサブセットのレジスタの状態保存を実行することは、より安全性の低い例外処理ソフトウェアに必須ではない。

0011

しかし、ハードウェアで追加の状態保存を実行することは、例外処理ルーチンを開始する前により長い遅延をもたらす。前の例外が完了した時点で別の例外が保留になっていることが起こり得る。この場合、処理回路は、前の例外の前に実行されていたバックグラウンド処理に戻る前に他方の例外にサービスすることができる。この状況は「末尾連鎖」と呼ばれ、他方の例外は「末尾連鎖式」例外と呼ばれる。
バックグラウンド処理が安全なドメイン内である、追加の状態保存のパフォーマンス・インパクトを低減するために、追加の状態保存は、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外について実行される。安全なドメインからより安全性の低いドメインへの遷移を引き起こす次の末尾連鎖式例外では、バックグラウンド処理によって必要とされるデータ値は第1の例外に応答して既に保存されたので、追加の状態保存を繰り返す必要はない。したがって、多数の状況で、追加の状態保存を実行することなしに末尾連鎖式例外のための例外処理ルーチンをトリガすることが可能である。

0012

したがって、本技法は、例外に応答して状態保存を実行するときにセキュリティとパフォーマンスの間の改善されたバランスを達成することができる。本発明のハードウェア機構は、安全な例外ハンドラを介するプロキシの必要なしに、より安全性の低い例外の有効な処理を可能にする。

0013

安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御回路は、処理回路をトリガして例外処理ルーチンを実行する前に第1のサブセットのレジスタ及び第2のサブセット・レジスタをクリアすることができる。これは、より安全性の低いドメインにおける例外処理ルーチンは、安全なドメイン内にある間にレジスタ内に置かれたデータにアクセスすることができないことを意味する。

0014

さらに、一実施例で、前記第1の例外に応答して、データ処理装置は、例外制御回路が処理回路をトリガして例外処理ルーチンを実行する前に、第1のサブセットのレジスタが安全なデータを含まないことを確実にするように構成され得る。これが達成され得るいくつかの方法が存在する。たとえば、ハードウェア又はソフトウェアのいずれかが、それらのレジスタが安全なデータを含まないように第1のサブセットのレジスタがクリアされることを確実にすることができる。別法として、第1のサブセットのレジスタが、処理回路がトリガされて例外処理ルーチンを実行する前に安全ではないデータのみを含むように設計され得る場合があることがあり、その場合には第1のサブセットのレジスタをクリアすることは必要ではないことがある。

0015

本願で、「発呼側レジスタ」及び「被発呼側レジスタ」という用語は、それぞれ、第1のサブセット及び第2のサブセットのレジスタを示すために使用され得る。

0016

例外処理ルーチンは、第2のサブセットのレジスタ(被発呼側レジスタ)からのデータの状態保存を実行する責任を有するが、例外処理ルーチンが第2のサブセットからのデータの状態保存を実際に実行することは必須ではないことがある。たとえば、例外制御回路が、第2のサブセット・レジスタの追加の状態保存を既に実行した場合、次いで、例外処理ルーチンは、これらのレジスタの状態保存を省略することができる。

0017

別法として、たとえ追加の状態保存がハードウェアによって既に実行されたとしても例外処理ルーチンにとっては被発呼側レジスタからのデータの状態保存をいつも実行することがより単純であることがある。レジスタがハードウェアによって既にクリアされ得るとき、例外処理ルーチンは、いかなる方法でも被発呼側レジスタにおいてデータ値へのアクセス権を有さないことがあり、ソフトウェアがクリアされたデータ値をデータ・ストアに保存し、クリアされたデータ値を後から復元することに関連するオーバヘッドは、ハードウェアが既に追加の状態保存を実行したかどうかを例外処理ルーチンが検出することを可能にするための機構によって被られるオーバヘッドよりも少ないことがある。

0018

第1のサブセットのレジスタ(発呼側レジスタ)及び第2のサブセット・レジスタ(被発呼側レジスタ)に関して、レジスタのすべてが第2のサブセット内にあるように、第1のサブセットのレジスタが0レジスタを備えることが起こり得る。この場合、多くの例外について、状態保存は、第2のサブセット内のすべてのレジスタを保存する責任を有する例外処理ルーチンで、例外制御回路によって実行されることになる。しかし、第2の安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、追加の状態保存が、より安全性の低いドメインにおける例外処理ルーチンによるこのデータへのアクセスを防ぐために、例外制御回路を使用し、ハードウェアにおいて第2のサブセット(すべてのレジスタ)を保存することが可能である。

0019

追加の状態保存をトリガする第1の例外は、処理がバックグラウンド処理を実行している間に生じる最初の例外でもよい。別法として、第1の例外は、それ自体、最初の例外の後であるがバックグラウンド処理に戻る前に処理される末尾連鎖式例外でもよい。

0020

本願で、「バックグラウンド処理」という用語は、より高い優先度の例外によって割り込まれた処理を示すために使用される。例外処理ルーチン自体がより高い優先度の例外によって割り込まれた場合、次いで、割り込まれた例外処理ルーチンは、先制する例外の「バックグラウンド処理」になることができ、そして、その先制する例外は、次いで、割り込まれるより前に例外処理ルーチンによって使用されていたデータの状態保存をトリガすることになる。

0021

より安全性の低いドメインから安全なドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路は、第2のサブセットのレジスタへの追加の状態保存で保存されたデータを復元することなしに例外処理ルーチンをトリガするように処理回路を制御することができる。本技法がない場合、第2のサブセットのレジスタのデータは、これらのレジスタ内のデータは安全なドメイン内で例外に可視であることが予期されることになるので、この時点で復元されるべきであることが予期されることになる。しかし、本技法は、この復元動作が必須ではないことを認識する。復元を省略することによって、第2のサブセットのレジスタは、さらなる末尾連鎖式例外が、安全なドメインからより安全性の低いドメインに遷移し、生じるときに、やはり保存されることになり、追加の状態保存がこのさらなる末尾連鎖式例外について省略されることを可能にする。末尾連鎖式例外は、レジスタへのデータの保存又は復元によってもたらされる遅延なしにより速く処理され得るので、これは、多くの場合、パフォーマンスを改善する。

0022

安全なドメインからより安全性の低いドメインへの遷移を引き起こす新しい例外に入るとき、例外制御回路は、状態保存ステータス値を使用して、例外処理ルーチンをトリガする前に追加の状態保存を実行するかどうかを判定することができる。状態保存ステータス値は、追加の状態保存が、より安全性の低いドメインで末尾連鎖式例外を処理する前に実行される必要があるかどうかを示すことができる。追加の状態保存が必要であるかどうかは、例外処理の過去の履歴に依存し、したがって、状態保存ステータス値は、この履歴の一態様が記録されることを可能にして、追加の状態保存が再び実行される必要があるかどうかをシステムが判定できるようにする。

0023

一例で、状態保存ステータス値は、少なくとも1つの例外が、バックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されたかどうかを示すことができ、追加の状態保存が安全な例外からより安全性の低い例外への次の末尾連鎖式遷移に必要であることになるかどうかの指示を与える。

0024

新しい例外に入るとき、追加の状態保存は、
(a)バックグラウンド処理が安全なドメインで実行された場合、及び、
(b)状態保存ステータス値が、例外がバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで処理されなかったことを示す場合に、
実行され得る。

0025

他の場合には、追加の状態保存は、必要ではないことになる。バックグラウンド処理が安全なドメイン内でなかった場合、そのバックグラウンド処理はレジスタ内に安全なデータを置かなかったことになり、したがって、より安全性の低いドメインからのデータを保護するための追加の状態保存の必要はない。また、バックグラウンド処理が安全なドメイン内であった場合でも、例外が安全なドメインにおけるバックグラウンド処理の停止と新しい例外の入力の間により安全性の低いドメインで既に処理された場合、そのとき、その例外は追加の状態保存をトリガしたことになり、したがって、それは再度必要とされない。

0026

セキュリティ・ドメイン値は、バックグラウンド処理が安全なドメイン又はより安全性の低いドメインで実行されたかどうかを示すために保持され得る。したがって、セキュリティ・ドメイン値及び状態保存ステータス値に基づいて、例外制御回路は、それが新しい例外の入力時に追加のデータ保存を実行する必要があるか否かを判定することができる。

0027

前述のように、状態保存ステータス値は、例外処理の過去の履歴に関する何らかの情報(たとえば、どのドメインで例外が処理されたか)を提供することができる。しかし、これは、過去の例外に関する何らかの情報がより安全性の低いドメインで推論されることを可能にすることがあり、セキュリティ侵害につながり得る。たとえば、これは、より安全性の低いコードがある種の安全なデータが最近処理されたことを推論することを可能にし得る。したがって、より安全性の低いドメインでの処理中に状態保存ステータスをアクセスできなくすることが望ましい場合がある。

0028

これを行う1つの方法は、より安全性の低いドメインに入るときに状態保存ステータス値を固定値に設定すること、及び、安全なドメインに入るときに状態保存ステータス値を変数値に設定することである。より安全性の低いドメイン内にあるとき、その場合、変数値が有用である安全な状態からより安全性の低い状態への遷移は起こらないことになるので、変数値は、安全なドメインにあるときにのみ必要である。したがって、より安全性の低いドメインに入るときにこの値を固定値に設定することによって、より安全性の低いドメインで実行される処理は、状態保存ステータス値から安全なドメインに関する情報を得ることができない。

0029

状態保存ステータス値で生じるもう1つの潜在的セキュリティ問題は、より安全性の低いドメインでのコードが状態保存ステータス値の値を修正することがあり、それにより状態保存が安全なドメインからより安全性の低いドメインへの遷移で実行されるかどうかに影響を及ぼす可能性である。ハッカーが状態保存が実行されるかどうかの制御を得ることができる場合、これは安全なデータの漏えいにつながり得る。この問題を防ぐいくつかの方法が存在する。

0030

一例で、より安全性の低いドメインでの例外から戻るとき、例外制御回路は、状態保存ステータス値がより安全性の低いドメインに入るときに設定された固定値をまだ有するかどうかをチェックすることができ、状態保存ステータス値がその固定値を有さない場合にはエラーがトリガされ得る。状態保存ステータス値は、より安全性の低いドメインにある間に固定値を有することになっているので、その場合、他のいかなる値も改ざんが生じたことを示すことができ、したがって、障害がトリガされ得る。

0031

別法として、状態保存ステータス値は、より安全性の低いドメインでの処理中に変数値を有し得る。これは、より安全性の低いドメインにおける例外が変数値を有する状態保存ステータス値にアクセスすることを可能にすることがセキュリティの観点から問題ではない場合に適し得る。しかし、その後の状態保存動作に影響を及ぼすより安全性の低いドメインにおけるコードによる状態保存ステータス値への変更を防ぐために、より安全性の低いドメインでの例外から戻るときに、例外制御回路は、状態保存ステータス値の例外処理を独立して制御することができる。状態保存ステータス値を無視すること、及び、状態保存ステータス値が、より安全性の低い例外を出るときに1つの値又は別の値を有するどうかに関わらず同処理を実行することによって、より安全性の低いドメインでのコードによる状態保存ステータス値での改ざんは、システムのセキュリティに影響をもたらさないことになる。

0032

たとえば、より安全性の低い例外ハンドラを離れた後、状態保存ステータス値は、より安全性の低いドメインでの動作中のステータス値への任意の変更を無効にするために、それがそのより安全性の低いドメインで有することになっていた値にリセットされ得る。これは、その後の処理が、より安全性の低い例外から戻るときに状態保存ステータス値が有する値から独立していることを意味する。

0033

もう1つの例で、状態保存ステータス値は、末尾連鎖式例外の間で切り替えるときにドメイン間の最新の遷移が、ドメインから安全なドメインへのものであったかどうかを示すことができる。これは、追加の状態保存が必要かどうかを判定するために、バックグラウンド処理が安全なドメインで実行されたかどうかを示す、セキュリティ・ドメイン値と結合され得る。この方式の利点は、状態保存ステータス値が、より安全性の低いドメインにおける固定値、及び、安全なドメインにおける変数値を有することになることである(より安全性の低いドメインから安全なドメインへの前の遷移が存在したかどうかに応じて)。

0034

たとえば、状態保存ステータス値は、バックグラウンド処理に続く最初の例外を処理するときに第1の値に初期化され得る。バックグラウンド処理が安全なドメイン内であった場合、次いで、末尾連鎖式例外の入力時に、末尾連鎖式例外が安全なドメイン内にあり、より安全性の低いドメイン内の前の例外に続く場合、状態保存ステータス値は第2の値に設定され得る。より安全性の低いドメインにおける例外の入力時に、状態保存ステータス値は、第1の値に設定され得る。より安全性の低いドメインから安全なドメインからの遷移を引き起こす末尾連鎖式例外を入力するとき、次いで、状態保存ステータス値が第1の値を有する場合に、追加の状態保存が実行され得る。このように、追加の状態保存は、必要なときに実行することが可能であり、それが既に実行された又は不必要であるときには省略することができ、そして、状態保存ステータス値は、処理がより安全性の低いドメイン内である間、固定値(第1の値)を有するように制御され得る。

0035

生じる1つの問題は、異なる例外の間を遷移するときに、状態保存ステータス値が保持されることをどのように可能にするかである。状態保存ステータス値は、メモリ内に置かれ得るが、必要とされるときにその値にアクセスするのは比較的遅くなることになる。状態保存ステータス値はまた、レジスタ内に置かれ得るが、その場合、1つの例外から別の例外に切り替えるときに保存され、場合によりクリアされる可能性が高いことになる。

0036

状態保存ステータス値を表す1つの有用な方法は、リンク・レジスタに記憶された例外戻り値の部分にある。リンク・レジスタに記憶された例外戻り値は、例外処理ルーチンからの戻りを制御するために使用される。

0037

例外に入るとき、例外制御回路は、有効な命令アドレスに対応しないダミー例外戻りアドレスにリンク・レジスタを設定することができる。例外処理ルーチンは、リンク・レジスタに記憶されたアドレスへの分岐を含み得る。ダミー例外戻りアドレスへの分岐に応答して、例外制御回路は、その分岐が別のタイプの戻り(たとえば、関数戻り)ではなくて例外戻りであることを検知することができ、それが、バックグラウンド処理に戻る前に、状態保存で前に保存されたデータを復元するための状態復元処理を実行する必要があることを検知することができる。有効な命令アドレスの代わりのダミー例外戻りアドレスの使用は、同分岐及びリンク機構が他のタイプの戻り(たとえば、関数戻り)に関して例外戻りのために使用されることを可能にする。

0038

有用な特性は、リンク・レジスタが各例外への入力で例外戻り値に新たに設定されることである(末尾連鎖式例外で、例外戻りアドレスは、前の例外に関して同値に設定されたことになる)。本技法は、例外戻り値のこのリフレッシュを使用して、例外処理の過去の履歴に関する例外から例外への情報を渡す。例外戻り値の部分として状態保存ステータス値を指示すること、及び、新しい例外戻り値がリンク・レジスタに記憶されるときに状態保存ステータス値を変更することによって、情報は、例外間で渡され、異なる値に設定することが可能であり、追加の状態保存が必要とされるかどうかの判定を可能にすることができる。これは、各末尾連鎖式例外に同じ例外戻り値を使用する従来の技法とは全く異なる。

0039

状態保存ステータス値はまた、例外の先制の場合に有用であり得る。現在の例外より高い優先度の例外が生じた場合、そのとき、現在の処理は停止することができ、より高い優先度の例外が代わりに処理され得る。これは先制として知られる。

0040

しかし、先制が状態保存を実行する間に生じた場合、そのとき、その状態保存が完了されるかどうかは、先制する例外のパフォーマンスに影響を及ぼし得る。第1のサブセットのレジスタの状態保存がまだ完了しておらず、先制する例外に先んじて追加の状態保存が実行されることが必要でない場合、そのとき、たとえその状態保存を最初にトリガした例外にとって必要であったとしても、追加の状態保存を省略することが最も速いことがある。

0041

他方で、先制する例外が第2のサブセットのレジスタの追加の状態保存を実行する間に生じた場合、既に実行された追加の状態保存の停止及び反転はもっと時間を要する可能性があるので、そのとき、たとえこれが先制する例外のために必要ではなくても、追加の状態保存を完了することが最も効率的であり得る。したがって、追加の状態保存が実行されていない場合にセキュリティ侵害を引き起こすことになるさらなるより安全性の低い例外がたとえ存在しなくても、追加の状態保存を完了することがパフォーマンスの観点からやはりより効率的であり得る。

0042

追加の状態保存が実行されたことをその後の例外に指示するために、状態保存ステータス値が、この先制の場合には、設定され得る。先制する例外の後に実行される、安全なドメインからより安全性の低いドメインに切り替えるさらなる末尾連鎖式例外に応答して、追加の状態保存は、状態保存ステータス値がそれが既に実行されたことを示す場合、省略され得る。

0043

状態保存は、様々な場所にデータを記憶することができる。データ・ストアの一般領域にレジスタの内容を記憶することが可能である。しかし、この場合、データ・ストア内のどこにそのレジスタ内容が保存されたかの指示を保持することが必要であることになる。したがって、状態保存の実行のより簡単な方法は、データ・ストア内でスタックを使用することである。スタックを使用するとき、スタックに記憶されたデータの場所は、それらのレジスタのうちの1つのレジスタ内のスタック・ポインタの形で保持され、それが復元される必要があるときにそのデータへの速い、容易なアクセスを可能にする。

0044

安全なドメイン及びより安全性の低いドメインを有する安全なシステムに関して、安全なスタック及びより安全性の低いスタックが存在し得る。第1のサブセットのレジスタの状態保存及び第2のサブセットのレジスタの追加の状態保存で、例外制御回路は、バックグラウンド処理が最初の例外を実行するために停止されたときに処理回路が動作していた現在のドメインに対応する、安全なスタック及びより安全性の低いスタックのうちの1つにデータを保存することができる。最初の例外は、追加の状態保存をトリガした前記第1の例外でもよく、又は、前の例外でもよい。

0045

本願は、概して、より安全性の低いドメイン及び安全なドメインを参照するが、異なるセキュリティ・レベル若しくは同じセキュリティ・レベルを有する複数の安全なドメイン、又は同じ若しくは異なるセキュリティ条件を有する複数のより安全性の低いドメインがそこに存在することが起こり得る。

0046

さらなる一態様から見ると、本発明は、以下を備えるデータ処理装置を実現する:
プログラム・コードに応答してデータ処理動作を実行するための処理手段であって、例外処理を制御するための例外制御手段を備える処理手段と、
データを記憶するための複数のレジスタ手段であって、第1のサブセットのレジスタ手段及び第2のサブセットのレジスタ手段を含むレジスタ手段と、
データを記憶するためのデータ記憶手段であり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ記憶手段であって、その安全な領域が、安全なドメインで動作するときに処理手段によってアクセス可能であり、より安全性の低いドメインで動作するときに処理手段によってアクセス可能ではないデータを記憶することを目的とする、データ記憶手段とを備え、
処理手段によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御手段が、その処理手段をトリガしてその例外に対応する例外処理ルーチンを実行する前に第1のサブセットのレジスタ手段からデータの状態保存を実行するように構成され、その例外処理ルーチンが、第2のサブセットのレジスタ手段からデータの状態保存を実行する責任を有し、
バックグラウンド処理が安全なドメインでその処理手段によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御手段が、その処理手段をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に第2のサブセットのレジスタ手段からデータの追加の状態保存を実行するように構成され、そして、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御手段が、処理手段をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するように構成され、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理された、データ処理装置。

0047

もう1つの態様から見ると、本発明は、プログラム・コードに応答してデータ処理動作を実行するための処理回路であり、例外処理を制御するための例外制御回路を備える処理回路と、データを記憶するための複数のレジスタであり、第1のサブセットのレジスタ及び第2のサブセットのレジスタを含むレジスタと、データを記憶するためのデータ・ストアであり、安全な領域及びより安全性の低い領域を含む複数の領域を備えるデータ・ストアとを備える、データ処理装置のためのデータ処理方法を提供し、安全な領域は、安全なドメインで動作するときには処理回路によってアクセス可能であり、より安全性の低いドメインで動作するときには処理回路によってアクセス可能ではないデータを記憶することを目的とし、
本方法は、以下のステップを含む:
処理回路によって実行されるバックグラウンド処理からの最初の例外に応答して、例外制御回路が、処理回路をトリガしてその例外に対応する例外処理ルーチンを実行する前に、第1のサブセットのレジスタからデータの状態保存を実行するステップであり、例外処理ルーチンが、第2のサブセットのレジスタからデータの状態保存を実行する責任を有する、ステップと、
バックグラウンド処理が安全なドメインで処理回路によって実行された、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、例外制御回路が、処理回路をトリガしてより安全性の低いドメインで例外処理ルーチンを実行する前に、第2のサブセットのレジスタからデータの追加の状態保存を実行するステップと、
安全なドメインからより安全性の低いドメインへの遷移を引き起こす末尾連鎖式例外に応答して、例外制御回路が、処理回路をトリガして、追加の状態保存を実行することなしに例外処理ルーチンを実行するステップであり、その末尾連鎖式例外が、前記第1の例外が処理された後に及びバックグラウンド処理に戻る前に処理される、ステップ。

0048

本発明のさらなる具体的な及び好ましい態様が、添付の独立及び従属請求項提示される。従属請求項の特徴は、必要に応じて独立請求項の特徴と、及び、特許請求の範囲で明示的に提示されたもの以外の組合せで、結合され得る。

0049

本発明は、単に例として、以下のような添付の図面に示すような実施例を参照してさらに説明されることになる。

図面の簡単な説明

0050

安全な及び安全ではない領域を有するデータ・ストアを有する、一実施例によるデータ処理装置を示す図である。
一実施例によるメモリ・アドレス空間を概略的に示す図である。
記載の実施例の技法がそれに対する保護を提供することを目指す攻撃シナリオを示す図である。
記載の実施例の技法がそれに対する保護を提供することを目指す異なる攻撃シナリオを示す図である。
一実施例による関数呼出し又は例外の受信時の安全なスタックでの所定の処理状態の記憶を概略的に示す図である。
様々なシナリオの所定の処理状態の形を示す図である。
関数呼出しの受信時の一実施例での処理回路の動作を示す流れ図である。
例外の受信時の一実施例での処理回路の動作を示す流れ図である。
分岐動作が関数呼出し戻り又は例外戻りである状況を含む、分岐動作を処理するときの一実施例での処理回路の動作を示す流れ図である。
一実施例による、安全なスタックが初期化されるときにその安全なスタックで記憶された所定の署名がどのようにして使用されてより安全性の低いドメインから安全なコードに分岐しようとする不正な試みを防ぐことができるかを概略的に示す図である。
一実施例による、安全なスタックが初期化されるときにその安全なスタックで記憶された所定の署名がどのようにして使用されてより安全性の低いドメインから安全なコードへの分岐しようとする不正な試みを防ぐことができるかを概略的に示す図である。
末尾連鎖式例外の連鎖を処理するときに状態保存及び復元動作を実行する一例を示す図である。
状態保存動作を制御するためのステータス情報を指示するための例外戻り値の部分の使用の一例を示す図である。
被発呼側レジスタの状態保存を実行する第1の例をより詳細に示す流れ図である。
最初の例外の入力時に例外戻りアドレスを設定する一例を示す流れ図である。
末尾連鎖式例外の入力時の例外戻りアドレスの設定の一例を示す流れ図である。
例外から戻るときに実行される状態復元の一例を示す流れ図である。
より詳細に例外戻り処理を示す流れ図である。
不必要な状態保存及び復元動作が、図10に示すステータス情報を使用し、回避され得る例を示す図である。
不必要な状態保存及び復元動作が、図10に示すステータス情報を使用し、回避され得る例を示す図である。
より高い優先度の例外によるより優先度の低い例外の先制の一例を示す図である。
先制が状態保存の実行の途中で生じるときに、状態保存がどのようにして実行され得るかの例を示す図である。
先制が状態保存の実行の途中で生じるときに、状態保存がどのようにして実行され得るかの例を示す図である。

実施例

0051

図1は、たとえばマイクロコントローラでもよいデータ処理装置10を示す。それは、命令を処理するための処理回路20と、処理回路20によって処理されたデータを記憶するための、及びまたは処理回路20が実行するプログラム・コードを記憶するためのデータ・ストア30とを備える。

0052

データ・ストア30は、異なるセキュリティの2つの領域、安全な領域32及び安全ではない領域34(本明細書では、より安全性の低い領域とも呼ばれる)、を有する。安全な領域32で記憶されたデータは、それが実行しているときに安全ではない領域34に記憶されたコードにアクセスすることはできない。

0053

データ処理装置10はまた、安全な領域32及び安全ではない領域34へのアクセスを制御するメモリ保護ユニットMPU(memory protection unit)40を有する。この制御はメモリ保護ユニットを介して実行され得るが、他の実施例では、それは、現在実行されている領域コードが記憶されることを監視する及びこれに基づいてそのメモリの異なる領域へのアクセスを制御する処理装置内の回路によって、より分散された形で行われ得る。

0054

この実施例では、処理回路20が実行しているドメインのセキュリティは、現在実行されているコードが記憶された領域から判定することができる。したがって、安全なデータ・ストア32に記憶された安全なプログラム・コードは、安全なドメインで実行され、安全なスタック36を使用してデータ値を記憶する。同様に、安全ではないデータ・ストア34に記憶された安全ではないコードは、安全ではないドメインで実行され、実行中にデータ値を記憶するために安全ではないスタック38を使用する。動作中の現在のドメインを判定するための他の技法もまた、たとえば制御フロー変更命令に従ってどのドメインでプロセッサが動作すべきかを識別する目標ドメイン値に基づいて、可能である。

0055

処理回路20は、実行されることになる命令をフェッチするためのフェッチ回路22を有する。処理回路20はまた、これらの命令を復号するための復号回路24と、それらを実行するための実行回路26とを有する。実行されることになる命令は、メモリ保護ユニットMPU40を介してデータ・ストア30からフェッチ回路22によってフェッチされる。それらの命令及びデータは、安全な領域及び安全ではない領域へのアクセスを制御し、安全なデータを安全ではない側から隔離する、MPU40を介して検索される。

0056

本実施例では、データ処理中に使用される汎用レジスタを有するレジスタ・バンク60が存在する。これらの汎用レジスタは、どの命令が次に実行されるものであるかを指示するプログラム・カウンタPC(program counter)と、スタック内のどのポイントで次のデータ・アクセスが行われるべきかを指示するスタック・ポインタSP(stack pointer)とを有する。本実施例では、安全な側のスタックと安全ではない側のスタックが存在するので、安全なスタック・ポインタSSP(secure stack pointer)と安全ではないスタック・ポインタNSP(non−secure stack pointer)とが存在するが、これらのうちの1つのみがどの時点においても実行されているプログラムに直接に可視である。いくつかの実施例では、各スタックのための複数のスタック・ポインタが存在し得るが、やはりどの時点においても1つのみが可視であることになることに留意されたい。処理回路20によって処理されているデータ値を記憶するためのレジスタ・バンク60内の汎用レジスタもまた存在する。本実施例で、これらはR0からR12の印を付される。

0057

レジスタ・バンク60はまた、例外が取得される又は関数が呼び出されるときに戻り値を記憶するために使用され得るリンク・レジスタ65を備える。戻り値は、システムが戻りが例外戻り又は関数戻りであるかどうかを判定すること及び例外又は関数から戻るときに何の処理が必要とされるかを判定することを可能にする。関数の完了に続いて処理されることになるプログラム命令のアドレスを指示する関数戻りアドレスと、実際の関数アドレスがより安全性の低いドメインからそれを隠すために安全なスタックに記憶された関数戻りを指示するダミー関数戻り値と、例外戻りを指示し、その例外戻りをどのように処理するか、たとえば、状態を復元するときにどのスタックにアクセスするか、及びいくつのレジスタがロードされる必要があるか、をプロセッサが判定することを可能にすることができる、バックグラウンド処理が処理されたドメインのセキュリティ・レベルの指示などの情報を含み得る、例外戻り(EXC_RETURN)値とを含む、異なる種類の戻り値が使用され得る。異なる形の戻り値が、後で説明されることになる。

0058

図1はまた、浮動小数点レジスタなどの追加の特定目的レジスタを有する追加のレジスタ・バンク64を示す。一実施例で、値は、安全なコンフィギュレーション・レジスタ(SCR:secure configuration register)62で設定されて、追加のレジスタ・バンク64内のレジスタのいずれかが安全なデータを記憶し得るかどうかを識別し、そうである場合、レジスタは、安全なドメインからより安全性の低いドメインへの及びその逆の遷移を制御するときに管理される必要がある1セットのレジスタの部分を(レジスタ・バンク60のレジスタとともに)形成すると考えられることになる。

0059

安全なドメインからより安全性の低いドメインへの及びその逆の遷移を引き起こし得るいくつかの機構が存在する。記載の実施例によれば、セキュリティ・ドメイン間で遷移するための1つの許容される機構は、関数呼出し機構であり、それによって関数呼出しが発行されて、その関数呼出しによって識別される別のソフトウェア・ルーチンへの遷移を可能にするために、現在のソフトウェア・ルーチンの実行を一時的に停止させることができ、安全なドメイン又はより安全性の低いドメインのいずれかで実行されることになるこの他方のソフトウェア・ルーチンは、その他方のソフトウェア・ルーチンがデータ・ストア30内のどこに記憶されるかに依存する。その他方のソフトウェア・ルーチンが実行された後には、次いで、関数呼出し戻りが、一時的に停止された最初のソフトウェア・ルーチンの実行に戻るために、実行される。いくつかの関数呼出しが、現在のソフトウェア・ルーチンと同じドメイン内で実行されることになる目標ソフトウェア・ルーチンを識別することになるが、他の例では、目標ソフトウェア・ルーチンは、現在のソフトウェア・ルーチンが実行しているドメインと異なるドメインでの実行を必要とし得る。

0060

前述の実施例によれば、セキュリティ・ドメイン間での遷移に使用され得るもう1つの機構は、例外機構である。この機構によれば、例外の発生時に、現在のソフトウェア・ルーチンの実行は、一時的に停止されることになり、その代わりに、実行は、例外を処理するために使用される例外処理ルーチンに分岐することになり、使用される例外処理ルーチンは、生じる例外のタイプに依存する。例外処理ルーチンが実行された後は、例外戻りが次いで使用されて、生じる例外の結果として一時的に停止された最初のソフトウェア・ルーチンに戻ることになる。

0061

例外制御回路28が、例外の取得を制御するために提供され、これらの例外は、より安全なドメインからより安全性の低いドメインへの遷移をもたらし、極秘データを記憶することができるレジスタのセットは、これらのレジスタに記憶されたデータがより安全性の低い側に使用可能になるのを避けるために、その例外の取得に先立ってクリアされることになる。これらのレジスタのうちのいくつか又はすべてに記憶された状態は、例外から戻るときにその状態が復元され得るように、スタック・アクセス回路70の制御の下で安全なスタックに記憶されることになる。例外処理を目的として、適切なスタックへのレジスタ内容の記憶を制御するために使用されるスタック・アクセス回路70は、例外制御回路28の部分を形成すると考えることができる。しかし、より一般的には、安全なドメインからより安全性の低いドメインへの遷移を必要とする関数呼出しの発生時に安全なスタックへの所定の処理状態の記憶に関連する何らかのスタック・アクセス回路70もまた存在し、したがって、スタック・アクセス回路70は、図1で例外制御回路28に対して別個に識別される。

0062

さらに、図1に示すように、障害チェック回路75が、より安全性の低いドメイン内のソフトウェアが安全なドメインからより安全性の低いドメインに遷移するために使用される最初の機構とは異なるタイプである戻り機構を介して安全なドメインに戻ろうとする(たとえば、例外から戻るための関数呼出し戻り、又は関数呼出しから戻るための例外戻りを使用することによって)状況を検出するために提供される。障害チェック回路75の部分は、例外制御回路28内に含まれる(すなわち、例外戻りをチェックする責任を有する部分)と考えることができるが、障害チェック回路75の他の部分は、処理回路のハードウェア内の他の場所に分散することができる。たとえば、関数呼出し戻りをチェックする責任を有する部分は、一実施例で、フェッチ回路22と関連付けられ得る。障害チェック回路75の動作は、後でより詳細に論じられることになる。

0063

図1で、データ・ストア30は単一の安全な領域及び単一のより安全性の低い領域を含むが、本明細書に記載の技法は、3つ以上の異なるセキュリティ領域を備える異なる実装形態にも同様に適用可能である。

0064

また、図1は、実行ステージ26などの処理回路20の他の部分とは別個なものとして例外制御回路28及びスタック・アクセス回路70を示すが、実際には、例外制御回路28及びスタック・アクセス回路70は、処理回路20のいくつかの要素を少なくとも部分的に再使用して例外の処理及びスタック動作を制御することができる。

0065

図2は、一実施例で使用され得るメモリ・アドレス空間を概略的に示す。メモリ・アドレス空間100は、分割されて1つ又は複数の安全な領域及び1つ又は複数のより安全性の低い領域を形成することになる。簡単にするために、図2では、単一の安全な領域及び単一のより安全性の低い領域が存在すると仮定される。安全なアドレス空間102の一部分が、安全なドメインで実行されることになるプログラム・コードの記憶のために確実にされることになる一方で、安全なアドレス空間104の別の部分は安全なスタック36に割り当てられることになる。安全なアドレス空間106の残りは、たとえば、メモリ・ヒープとして、実行中に割り当てられる空きスペースとしてなど、様々な目的で使用されることになる。より安全性の低いアドレス空間もまた、同様の方法で分割されることになり、それにより、より安全性の低いドメインで実行されることになるプログラム・コードの記憶のための部分110、より安全性の低いスタック38に割り当てられる部分112、及び残りの部分114を提供する。

0066

記載の実施例によれば、メモリ・アドレス空間はまた、この領域内のアドレスがプログラム・コードのための有効なアドレスではない、予約された領域120を含む。以下にさらに詳細に論じるように、これらの予約されたアドレスのうちのいくつかは、記載の実施例のための所望の機能を提供するために使用される。

0067

速度及び効率の改善を目的として、前述の実施例は、安全なドメインとより安全性の低いドメイン、すなわち関数呼出し機構と例外機構、の間で遷移するための2つの機構を提供する。しかし、複数のドメイン遷移機構の使用は、悪意ある攻撃への脆弱性を高め、たとえば、より安全性の低いドメイン内のソフトウェアが、安全なドメインからより安全性の低いドメインに遷移するために使用される最初の機構とは異なるタイプの戻り機構を介して安全なドメインに戻ろうとすることを可能にする。2つの特定の攻撃シナリオが、図3A及び3Bに示される。図3Aに示すように、何らかの安全なコードがポイント145で実行し、そして、ポイント150で関数呼出しが、より安全性の低いドメイン内に存在する関数に対して行われると仮定される。その関数は、次いで、ポイント155で実行されるが、ポイント160で、より安全性の低いソフトウェアが、例外戻り機構を使用することによって安全なコードへの任意の分岐を試みる

0068

同様に、図3Bでは、何らかの安全なコードがポイント175で実行し、そして、ポイント180で、例外(たとえば、割込み)が生じ、より安全性の低いドメインにおける例外処理ルーチンへの分岐を引き起こすと仮定される。この例外処理ルーチンは、ポイント185で実行されるが、その後にポイント190で、より安全性の低いドメイン内のソフトウェアが安全なドメインへの関数戻りを行おうと試みる。

0069

システムのセキュリティが維持されることになる場合、そのようなシナリオが起こることが許された場合、これは、安全なデータへのアクセスを得るための機構を提供することができる安全なコードへの任意の分岐をより安全性の低いソフトウェアが行おうとすることを可能にすることになるので、前述の攻撃シナリオの両方が防がれる必要がある。

0070

そのような攻撃から保護するために、スタック・アクセス回路70が、図4A及び4Bを参照してより詳細に論じられるように、安全なドメインからより安全性の低いドメインへの遷移を引き起こす関数呼出し又は例外が生じるときに安全なスタックのスタック・フレームに所定の処理状態を格納するように構成される。図4Aでは、安全なプログラムFOOは安全なドメインで現在実行していて、次いで、関数呼出し又は例外が、FOOが完了する前に生じると仮定される。関数呼出し又は例外の発生に先立って、FOOは、通常は、FOOによって使用される一時的データを記憶するために、安全なスタック200で割り当てられたスタック・フレーム205を使用することになる。関数呼出し又は例外の発生時に、別個のスタック・フレーム210が、次いで、スタック・アクセス回路70のために割り当てられることになり、そして、そのスタック・アクセス回路は、次いで、関数呼出しによって識別される必要のあるソフトウェア・ルーチンへの又は例外を処理するために必要とされる例外処理ルーチンへの分岐に先立って、スタック・フレーム210内で所定の処理状態を記憶することになる。

0071

例外が生じる状況を第1に考えると、そのとき、例外処理ルーチンが安全なドメイン内で実行されようとする場合、スタック・フレーム210内のスタック・アクセス回路によって記憶される所定の処理状態は、図4Bによって識別されるレジスタ215の内容を含む。これらのレジスタは、本明細書で、「発呼側」レジスタと呼ばれ、それらは、スタック・アクセス回路70(又は例外制御回路28)が、例外処理ルーチンが実行されることになるドメインに関わらず、スタックへの状態保存の責任を常に取ることになる、レジスタである。デフォルトで、例外処理ルーチンは、その場合、レジスタ(本明細書で「被発呼側」レジスタと呼ばれる)の残りの状態保存の責任を有することになる。具体的には、例外処理ルーチンは、その場合、例外処理ルーチンの本体におけるレジスタの再使用に先立って、例外処理ルーチンが実行しているドメインに関連するスタックに被発呼側レジスタの状態を保存することになる。さらに、例外処理ルーチンが完了された後には、例外処理ルーチンは、次いで、例外戻りの発行に先立ってそれらの被発呼側レジスタの状態を復元する(通常は、それらをスタックから関連レジスタコピーして戻すことによって)責任を有することになる。

0072

しかし、前述の実施例によれば、例外が安全なドメインからより安全性の低いドメインへの遷移を必要とすることになる、前のバックグラウンド処理が安全なドメインにおいてであった状況で、スタック・アクセス回路70は、さらに、処理回路を例外処理ルーチンの実行に遷移させる前に、スタック・フレーム210内での被発呼側レジスタの状態保存の責任を取る。したがって、図4Bに示すように、この状況で、スタック・フレーム210内に記憶された所定の処理状態は、220の形を取る。図4Bで具体的に識別された発呼側及び被発呼側レジスタは、単に、どのように発呼側及び被発呼側レジスタが分割され得るかの一例であり、厳密にどのレジスタが発呼側レジスタ又は被発呼側レジスタであると考えられるかは、実装形態に応じて変わることになる。

0073

図4Bにやはり示すように、例外処理ルーチンがより安全性の低いドメイン内にあり、したがって安全なドメインからより安全性の低いドメインへの遷移を必要とする状況で、スタック・アクセス回路はまた、スタック・フレーム210内の所定の相対的位置で所定の署名222を記憶するように構成され、図示された実施例では、この所定の相対的位置はスタック・フレーム内の下部の位置である。この所定の署名は、様々な形を取り得るが、一実施例では、プログラム・コードの有効なアドレスに対応しない値を有するように選択される。一実施例で、その所定の署名は、メモリ・アドレス空間の予約された部分内のアドレス値120のうちの1つを有するように選択される。1つの特定の実施例で、その所定の署名は、値0xF0A5125Aを有する。

0074

通常は、関数呼出しの発生時に、スタック・アクセス回路70は、通常は、スタック・フレーム210内で所定の処理状態を記憶しないことになる。したがって、関数呼出しが、やはり安全なドメイン内にある目標コードを識別する場合、所定の処理状態は記憶されない。しかし、関数呼出しがより安全性の低いドメイン内で目標コードを識別する場合、そのとき、スタック・アクセス回路70は、関数呼出しが完了された後にFOOの実行を再開するために必要とされることになる戻りアドレス225をスタック・フレーム210内に記憶するように構成される。この戻りアドレス225は、より安全性の低いドメインへの遷移を必要とする例外発生の場合に所定の署名222が記憶されるときと同じ所定の相対的位置、すなわち、スタック・フレーム内の下部の位置、で記憶される。

0075

安全なスタック内に記憶された実際の戻りアドレス225の代わりに、より安全性の低いドメイン内の目標コードが、実際にはプログラム・コードの有効なアドレスではないダミー関数呼出し戻りアドレス内で提供される。一実施例で、そのダミー関数呼出し戻りアドレスは、予約されたアドレス120のうちの1つから選択され、前述の所定の署名222とは異なる値を有するようにさらに選択される。

0076

関数呼出しの発生時に、ソフトウェアは、たとえ状態保存が図4Bに示すスタック・フレームによるハードウェアによって必要とされない場合でも、やはりレジスタ状態の状態保存を実行することができる。レジスタの発呼側及び被発呼側レジスタへの分割は、それが、関数呼出しの前に実行されるソフトウェア(発呼側ソフトウェア)及び関数呼出しの後に実行されるソフトウェア(被発呼側ソフトウェア)の両方がどのレジスタが状態保存を受けるかに影響を及ぼすことを可能にするので、そのような関数呼出しに有用である。たとえば、発呼側ソフトウェアが、それがある特定の発呼側レジスタを使用しなかった、又はいくつかの発呼側レジスタ内のデータの使用を終了したと認識した場合、そのとき、それらのレジスタ内の値は関数呼出しの後に保持される必要はないことになり、したがって、これらのレジスタは状態保存を受ける必要はない。同様に、被発呼側ソフトウェアがある特定の被発呼側レジスタを使用していないことになる場合、そのとき、被発呼側ソフトウェアはこれらのレジスタの状態保存を実行する必要はない。したがって、発呼側及び被発呼側ソフトウェアの両方が状態保存のためのレジスタの選択に影響を及ぼすことを可能にすることで、適切な場合に状態保存の量を低減することによってパフォーマンスの改善を可能にする。相対的に、発呼側ソフトウェアのみ又は被発呼側ソフトウェアのみが状態保存の責任を有する場合、そのとき、他方のソフトウェアがそのレジスタが保存されることを必要とする場合に備えて、いくつかのレジスタが余計に保存されることがある。図5は、一実施例による、関数呼出しの発生時に処理回路によって実行されるステップを示す流れ図である。ステップ300で、現在実行しているコードが安全なドメインで実行されているかどうかが判定される。そうでない場合、次いで、本処理はステップ310に直接進み、そこで、リンク・レジスタ(LR:link register)が戻りアドレスと等しく設定される。その後、本処理はステップ325に進み、そこで、分岐が新しい関数(すなわち、関数呼出しの目標として識別されるプログラム・コード)に実行される。戻りアドレスはリンク・レジスタ内で設定されてあるので、新しい関数が完了したとき、正しい戻りアドレスが関数呼出し戻り内で指定され得る。

0077

ステップ300で現在実行しているコードが安全なドメイン内で実行されていると判定された場合、次いで、ステップ305で、関数呼出しの宛先である新しい関数がより安全性の低いドメイン内で実行されることになるかどうかが判定される。これが判定され得るいくつかの方法が存在するが、一実施例で、これは、関数呼出しの目標アドレスが安全なメモリ領域又はより安全性の低いメモリ領域に関連するアドレスであるかどうかを判定することによって単純に達成される。それがより安全性の低いメモリ領域に関連する場合、これは、その関数呼出しの宛先がより安全性の低いドメイン内であることを示す。関数呼出しの宛先がより安全性の低いドメイン内でない場合、次いで、再び、本処理はステップ310に進む。

0078

しかし、関数呼出しの宛先がより安全性の低いドメイン内である場合、そのとき、これは、安全なドメインからより安全性の低いドメインへの遷移の必要性を示し、そして、この時点で、本処理はステップ315に進み、そこで、リンク・レジスタが、前述のようにダミー関数呼出し戻りアドレスに設定される。加えて、ステップ320で、実際の戻りアドレスが、スタック・アクセス回路70によって安全なスタックにプッシュされる。その後、本処理はステップ325に進み、そこで、分岐が、関数呼出しの目標である新しい関数に実行される。

0079

図5に示すハードウェア動作と同様に、関数呼出しの前に実行するソフトウェアはまた、レジスタからデータの状態保存を実行することができ、関数呼出しの後に実行するソフトウェアはまた、被発呼側レジスタからデータの状態保存を実行することができる。

0080

図6は、例外の発生時の処理回路の動作(割込みである例外の一例)を示す流れ図である。ステップ400で、リンク・レジスタは、ダミー例外戻りアドレスを選択するように設定され、一実施例では、選択することができる複数の異なるダミー例外戻りアドレスが存在する。一実施例で、起こり得るダミー例外戻りアドレスの各々は、プログラム・コードの有効なアドレスではないアドレスであることになる。ステップ400のさらなる詳細は、後で説明されることになる。その後、ステップ405で、発呼側の保存されたレジスタが、バックグラウンド処理ドメイン、すなわち、そこでバックグラウンド・コードが実行されていたドメイン、のスタックにプッシュされる。

0081

その後、ステップ408で、バックグラウンド処理が安全なドメイン内であったかどうかが判定され、そうでない場合、本処理はステップ432に直接進む。以下に記載のように、バックグラウンド処理が安全なドメイン内であったかどうかは、リンク・レジスタ65内に置かれた例外戻り値に基づいて判定され得る。バックグラウンド処理が安全なドメイン内であった場合、次いで、ステップ410で、現在実行しているコードが安全なドメインで実行されているかどうかが判定され、そうでない場合、本処理は再びステップ432に直接進む。しかし、現在実行しているコード(バックグラウンド処理でもよく、又は前の末尾連鎖式例外でもよい)が安全なドメインで実行されているとステップ410で判定された場合、次いで、ステップ412で、宛先がより安全性の低いドメイン内であるかどうか、すなわち、例外を処理するために必要とされる例外処理コードがより安全性の低いドメイン内で実行されることになるかどうかが、判定される。そうでない場合、次いで、再び、本処理はステップ432に直接進む。しかし、宛先がより安全性の低いドメイン内である場合、そのとき、これは、バックグラウンド処理が安全なドメイン内であった、安全なドメインからより安全性の低いドメインへの遷移が存在することになる状況を示す。したがって、本処理はステップ420に進み、そこで、被発呼側の保存されたレジスタがバックグラウンド・ドメインのスタックにプッシュされ、前述の所定の署名がスタック・フレームの下部に書き込まれる。バックグラウンド処理に関連するスタックは、リンク・レジスタ65内に置かれた例外戻り値から判定することができる。本ステップのさらなる詳細は、後から提供されることになる。

0082

ステップ430で、例外制御回路28は、すべてのレジスタがクリアされることを確実にする。一例で、すべてのレジスタが、ステップ430でクリアされ得る。一代替実施例では、レジスタがスタックにプッシュされるときにそれらのレジスタがクリアされることが可能であり、したがって、発呼側レジスタはステップ405の間にクリアすることができ、被発呼側レジスタはステップ420又は430の間にクリアすることができる。

0083

ステップ430に続いて、又はステップ408、410及び412でチェックされた条件のいずれも生じなかった場合、そのとき、本処理は、ステップ432に進む。例外入力が末尾連鎖式例外である場合、そのとき、リンク・レジスタ65は新しい例外戻り値で更新される。本ステップは、図12Bに関して以下にさらに詳しく論じられることになる。

0084

ステップ435で、本処理は、例外処理ルーチンに分岐する。

0085

例外処理ルーチンは、次いで、被発呼側レジスタの状態保存を実行することができる。一実施例で、例外処理ルーチンは、たとえ被発呼側レジスタ内のデータがステップ420で既にスタックにプッシュされ、クリアされた場合でも(この場合、ハードウェアは、被発呼側レジスタからデータを安全なスタックに格納したことになり、一方、ソフトウェアは、より安全性の低いスタックに被発呼側レジスタからクリアされた値を格納することになる)、被発呼側レジスタの状態保存をいつも実行することができる。別法として、例外処理ルーチンは、被発呼側レジスタの状態保存が既に実行されたかどうかを検出することができ、そうである場合、被発呼側レジスタの状態保存を省略することができる。

0086

図7は、どのように分岐動作が処理されるかを示す流れ図である。そのような分岐動作は、正規分岐処理動作、関数呼出し戻り及び例外戻りを含み得る。図7は分岐動作について示されるが、代替実施例で、同様の機構は、命令フローでの変更を引き起こし得る任意の命令、たとえば、宛先レジスタとしてプログラム・カウンタを有するロード命令、との関連で使用され得る。

0087

ステップ500で、分岐動作によって指定された目標アドレスが予約されたアドレス範囲120内であるかどうかが判定され、この特定の実施例で、これは、目標アドレスが0xF0000000以上である場合に当てはまる。そうでない場合、そのとき、これは正規の分岐活動を示し、そして、本処理はステップ505に進み、そこで、正規の分岐処理が実行される。分岐動作の処理は当業者によく知られているので、正規の分岐処理のさらなる詳細は本明細書では提供されない。

0088

ステップ500で目標アドレスが予約されたアドレス範囲120内であると判定された場合、次いで、ステップ510で、目標アドレスがダミー関数呼出し戻りアドレスに対応するかどうかが判定される。1つの特定の実施例で、ダミー関数呼出し戻りアドレスは0xF7FFFFFFである。目標アドレスがダミー関数呼出し戻りアドレスに対応しない場合、次いで、ステップ515で、安全なスタック内のスタック・フレーム210の前述の所定の相対的位置が、安全なスタックから戻りアドレスを読み取るために、アクセスされる。その後、本処理はステップ500に戻り、そこで、関数呼出し戻りが前の関数呼出しから戻るために正しく使用されたとみなし、ステップ515で読み取られた戻りアドレスは、プログラム・コードの実アドレスであることになり、したがって、本処理は、ステップ505で正規の分岐処理に分岐することになる。しかし、そうではなくて関数呼出し戻りが、例外から戻るための機構として不正確に使用された場合、次いで、スタック・フレーム220がステップ515でアクセスされるときに、所定の署名222が、実際の戻りアドレスとして検索されることになる。そのアドレスが、次いで、ステップ500で分析されるとき、それが予約された範囲内であることが判定されることになるが、ステップ510で、そのアドレスがダミー関数呼出し戻りアドレスではないことが判定されることになる。本処理は、次いで、ステップ520に進み、そこで、アドレスが有効な例外戻りアドレスのうちの1つではないことが判定されることになり、それに応じて、本処理は、ステップ525に分岐することになり、そこで、障害が、関数呼出し戻りが不正確に使用されたことを識別するために、作成されることになる。

0089

例外戻りが指定される状況をここで考えると、そのとき、この例外戻りが、安全なドメインからより安全性の低いドメインへの遷移を引き起こす前の例外に関連する場合、これは、目標アドレスとしていくつかの異なる有効な例外戻りアドレスのうちの1つを識別することになり、それらの起こり得る例外戻りアドレスの各々は、予約された範囲120内にあり、所定の署名及びダミー関数呼出し戻りアドレスの両方と異なる。したがって、本処理は、ステップ500からステップ510に、そして、そこからステップ520に進むことになり、そこで、はい(yes)経路が、次いで、ステップ530まで辿られることになる。例外戻り処理ステップ530の詳細は、後で説明されることになる。現在の例外より低い又は同等の優先度の及びバックグラウンド処理より高い優先度の新しい例外が、この現在の例外が戻る時点で実行を待っている状況では、その場合、その新しいより優先度の低い例外が、末尾連鎖式例外として選ばれることになり(すなわち、その新しい例外が、現在の例外が選ばれるより前に起こっていたバックグラウンド処理に戻るより前に、現在の例外の完了に続いて直ちに処理されることになる)、そして、本処理は、図7に示すように、図6のステップ408に分岐して戻ることになる。

0090

ステップ530の例外戻り処理が実行され、さらなる末尾連鎖式例外が保留されていない後は、本処理はステップ535に進み、そこで、例外戻り処理ステップ530が、所定の署名がスタック・フレーム210内に記憶された処理状態内で予期されるべきであると指示したかどうかが判定される。前述のように、これは、例外が安全なドメインからより安全性の低いドメインへの遷移を引き起こし、バックグラウンド・コードが安全なドメインで実行された場合に、当てはまることになる。所定の署名が予期されない場合、次いで、本処理は、ステップ540に単に進み、そこで、関連レジスタ値がスタック・フレームから積み重ね解除される。この処理は、図13に関して後でより詳細に説明されることになる。

0091

しかし、ステップ535で、所定の署名が予期されると判定された場合、次いで、本処理はステップ545に進み、そこで、スタック・フレーム210の下部が読み取られ、検索された値が所定の署名と比較される。ステップ550で、マッチがあるかどうかが判定され、そうである場合、本処理はステップ540に進む。しかし、マッチが存在しない場合、次いで、本処理は、ステップ555に進み、そこで、例外戻りが関数呼出しから戻ろうとして不正確に使用されたことを示す、障害が作成される。具体的には、例外戻りが不正確に使用されて関数呼出しから戻ろうと試みた場合、ステップ545での安全なスタックの読取りは、所定の署名と一致しないことになる、戻りアドレス225が検索される結果をもたらすことになり、それによって、ステップ555で障害を作成させることになる。

0092

ステップ525又はステップ555で作成された障害が処理され得るいくつかの方法が存在する。一実施例で、処理回路は、いずれかの障害条件に応答して、安全なドメイン内で適切な障害処理プログラム・コードを実行する。障害処理プログラム・コードが安全なドメイン内で実行されることを確実にすることによって、これは、より安全性の低いドメインで攻撃者が制御を取り戻すこと、したがって攻撃を再試行することを防ぐ。

0093

攻撃の再試行を阻止するための代替機構として、データ処理装置は、いずれかの障害条件が識別された場合にスタック・ポインタ値が調整されないように、戻りの再生がまた同障害条件を識別させることになるように、構成され得る。したがって、スタック・ポインタを調整しないことによって、攻撃者は、安全なスタックの最後の位置を単に破壊することができず、次いで、安全なスタック内の異なる場所で入力するために、攻撃を再試行する。一実施例で、前述の機構の両方が、より安全性の低いドメインからの攻撃の再試行に対する頑強性を実現するために使用され得る。

0094

一実施例で、より安全性の低いドメインからの潜在的攻撃を引き起こし得るもう1つのシナリオは、安全なスタックの初期化に続いて生じる。この時点で、安全なスタックは、空であることになる。その時点で、実行されているプログラム・コードがより安全性の低いドメイン内である場合、プログラム・コードは、安全なドメインに戻ろうと試み得ることが起こり得る。安全なドメインからより安全性の低いドメインへ合法的に戻されることになる、元の遷移は存在しないので、そのような戻りは防がれるべきである。図8A及び8Bは、そのような戻りが成功するのを防ぐために使用することができる機構を示す。図8Aに示すように、安全なスタック600が初期化されるとき、所定の署名値602が、安全なスタックに記憶される(一実施例で、この値は、スタックが初期化されるときにソフトウェアによって記憶される)。この所定の署名値は、通常は、図4Bを参照して前述された所定の署名222とは異なることになるが、やはりプログラム・コードの有効なアドレスに対応しない値であることになる。1つの特定の実施例で、所定の署名602は、値0xF05AEDA5を有する。

0095

図8Bに示すように、ソフトウェアがポイント605でより安全性の低いドメインで実行していて、次いで、ポイント610で、安全なドメインに戻ろうと試みる場合、障害チェック回路は、ポイント615で、安全なスタックから所定の署名値602を読み取り、それがプログラム・コードの有効なアドレスに対応しないと判定し、それに応じて、障害を作成することになる。その結果、より安全性の低いドメインからの戻りは、防がれることになる。

0096

具体的には、ポイント610での戻りが関数呼出し戻りである場合、ポイント615で生成される障害は、図7のステップ525で作成された障害と同じであり、そして、同じ障害処理コードが、その障害に応答して使用され得る。したがって、その実施例で、障害チェック回路は、所定の署名602と前述の所定の署名222を区別する必要はない。そうではなくて、ポイント610での戻りが例外戻りである場合、そのとき、所定の署名値602が所定の署名値222とは異なるという事実は、図7のステップ550でマッチが検出されないことになることを意味することになり、したがって、障害がステップ555で発生させられることになる。

0097

図7のステップ530に関して説明したように、1つの例外から戻るとき、第2の例外は、保留でもよく、第1の例外の前に実行されたバックグラウンド処理に戻る前に処理され得る。これは、末尾連鎖として知られる。図9は、第1の例外に続いて、第2の及び第3の例外が、バックグラウンド処理に切り替えて戻る前に末尾連鎖式である、一例を示す。

0098

図4Bのスタック・フレーム220に示すように、バックグラウンド処理が安全なドメイン内であり、安全な処理からより安全性の低い状態の例外への遷移が存在する場合、そのとき、発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が、例外制御回路28によって、安全なスタックにプッシュされる。しかし、通常は、安全なドメインで処理される例外は、発呼側の保存されたレジスタのみがスタックに保存されたことになることを予期することになり(図4Bのスタック・フレーム215に示すように)、被発呼側の保存されたレジスタの保存は例外処理ルーチンに委ねられる。したがって、図9に示すように、被発呼側レジスタの追加の状態保存が、第1の例外の入力時にポイント700で実行されたとき、次いで、ポイント705で安全なドメインで第2の例外に切り替わるときに、被発呼側の保存されたレジスタが、スタックからポップされて、末尾連鎖式の第2の例外が安全なドメインで処理されることが予期されるスタック・フレーム215を復元し得ることが起こり得る。

0099

しかし、より安全性の低いドメインで処理されることになる末尾連鎖式の第3の例外が生じた場合、安全なドメインからより安全性の低いドメインへの遷移は、被発呼側レジスタ内のデータがより安全性の低い処理から隠される必要があることを意味するので、次いで、ポイント710で、被発呼側レジスタは、スタックに再びプッシュされる必要がある。最後に、第3の例外が完了し、さらなる末尾連鎖式例外が存在しないとき、次いで、発呼側及び被発呼側の保存されたレジスタの両方が、図9のポイント715でスタックからポップされる。

0100

図9は、末尾連鎖式例外の間で切り替えるときに実行されるいくつかの状態保存動作及び状態復元動作を示す。これらの動作は、時間を要し、したがって、入ってくる例外の処理を遅らせ、それにより処理パフォーマンスを下げる。したがって、これらの動作のうちのいくらかを回避することは有用である。本技法は、より安全性の低い例外から末尾連鎖式の安全な例外に切り替えるときに、被発呼側レジスタが安全なスタックからポップされることは必要ないことを認識する。被発呼側レジスタをスタックに残すことは、例外の処理に影響を及ぼさないので、これは受け入れ可能であり、すべての安全な被発呼側の保存された値は、そこで例外が処理されることになる安全なドメインからアクセスされることを許容される。したがって、被発呼側レジスタは、安全なドメインからより安全性の低いドメインへの遷移を引き起こす第1の例外に応答して、スタックに保存され得る。被発呼側レジスタの復元は、処理がより安全性の低い例外から安全な末尾連鎖式例外に切り替わるときに、省略することができる。安全なドメインからより安全性の低いドメインへの遷移を引き起こすさらなる例外について、ハードウェアによる被発呼側の保存されたレジスタの追加の状態保存は、省略することができる。

0101

図10は、例外に入るときにリンク・レジスタ内に記憶され得る例外戻り値の一例を示す。一実施例で、リンク・レジスタ65は、例外処理ルーチンが実行されている間中ずっと例外戻り値を保持する必要はなく、その代わりに、それは、最初にこの値に設定され、次いで、すぐ後にスタックに移動されてもよい。その例外が完了するとき、ソフトウェアは、そのアドレスが有効な命令アドレスではないのでCPUが特別な事象として見つける、例外戻り値によって指示されるアドレスに分岐する。一実施例で、前述のダミー関数呼出し戻りアドレスはまた、関数呼出しの発生時にリンク・レジスタ内に記憶され、同様の形で処理される。

0102

例外戻り値は、ハードウェアによる被発呼側の保存されたレジスタの保存が、安全なドメインからより安全性の低いドメインへの遷移を引き起こす例外に入るときに必要とされるかどうかを判定するための情報を含む。例外戻り値は、いくつかの異なる起こり得る値を有し、各々はアドレス空間の予約された領域120に対応し、ダミー関数戻りアドレスと前述の所定の署名222及び602とは異なる。例外戻りアドレスは、状態保存ステータス値フィールド720及びセキュリティ・フィールド725を含む。

0103

状態保存ステータス値フィールド720は、安全なドメインからより安全性の低いドメインへの遷移を引き起こす次の例外について、被発呼側の保存されたレジスタの追加の状態保存が必要とされるかどうかを指示する状態保存ステータス値SCRSを記憶する。図10の例で、0の値は、追加の状態保存がスキップされ得ることを示し、一方、1の値は、追加の状態保存が必要とされることを示すが、ステータス値の他のマッピングもまた使用され得る。

0104

セキュリティ・フィールド725は、末尾連鎖式例外の現在の連鎖における最初の例外の前に実行されていたバックグラウンド処理がより安全性の低いドメイン内であったか安全なドメイン内であったかを指示するセキュリティ・ドメイン値Sを記憶する。末尾連鎖式例外の連鎖における各例外に入るときに、例外戻り値は、図6のステップ432で新しい値に設定されることになる。例外戻り値を設定するとき、状態保存ステータス値フィールド720の値は、後で実行されることになる状態保存処理に影響を及ぼすように変更することができる。この方法で、情報が、1つの例外から別の例外に渡されて、追加の状態保存が例外間の次の遷移に必要とされるかどうかが指示され得る。これは、図11から16を参照して説明されることになる。

0105

図11は、被発呼側の保存されたレジスタをプッシュするための及び安全なスタック36に所定の署名を書き込むための図6のステップ420をより詳細に示す。この追加の状態保存は、例外戻り値の状態保存ステータス値フィールド720の値に依存する。ステップ750で、プロセッサが、例外戻り値の状態保存ステータス値フィールド720が0の値を有するかどうかを判定する。そうである場合、次いで、スタックへの被発呼側の保存されたレジスタのプッシュはスキップされ、本方法は図6のステップ430を継続する。この場合、被発呼側の保存されたレジスタの状態保存は、これらのレジスタからのデータは、前の例外に応答してスタックに既に保存されていることになるので、必要ではないことになる。

0106

他方で、ステップ750で状態保存ステータス値が0の値を有さない場合、次いで、本方法はステップ755に進み、被発呼側の保存されたレジスタからのデータが安全なスタックにプッシュされる。被発呼側の保存されたレジスタはまた、それらの値がより安全性の低いドメインでのその後の処理にアクセスできないように、クリアされる。また、ステップ760で、所定の署名222がスタックの下部に書き込まれる。次いで、本方法は、図6のステップ430に再び進む。したがって、図11によれば、追加の状態保存が実行されるかどうかは、状態保存ステータス・フィールドの値を条件とする。

0107

図12Aは、バックグラウンド処理を実行する間に受信された最初の例外(末尾連鎖式例外の連鎖が存在する場合、これは本当に第1の例外である)についての図6のステップ400での例外戻りレジスタの設定の一例を示す。ステップ770で、その中でプロセッサがバックグラウンド処理のために動作している現在のドメインが、判定される。現在のドメインが安全なドメインである場合、次いで、ステップ775で、セキュリティ・ドメイン・フィールド725が、安全なドメインを示すための1の値を有するように設定される。現在のドメインがより安全性の低いドメインである場合、次いで、ステップ780で、セキュリティ・ドメイン・フィールド725が、0の値に設定される。どのドメインが現在のドメインであるかに関わらず、ステップ790で、状態保存ステータス値フィールド720が、追加の状態保存がより安全性の低いドメインから安全なドメインへの次の遷移で必要とされ得ることを指示する1の値に初期化される。次いで、ステップ795で、例外戻り値が、リンク・レジスタ65に書き込まれ、状態保存ステータス値フィールド720及びセキュリティ・フィールド725は、前のステップで判定された値に設定される。本方法は、次いで、図6のステップ405に戻って、例外入力処理を継続する。

0108

図12Bは、末尾連鎖式例外のための例外戻り値を設定するためのステップ432の一例をより詳細に示す。ステップ800で、本方法は、入力される例外が末尾連鎖式例外であるかどうかを判定する。そうでない場合、次いで、本方法は、図6のステップ435に進んで、図12Bの残りのステップを実行することなしに、例外処理ルーチンに分岐する。しかし、例外が末尾連鎖式例外である場合、次いで、ステップ802で、セキュリティ・ドメイン値S(連鎖で前の例外を終了させるために使用される図10のEXC_RETURN値から)が1であるかどうかが判定される。そうでない場合、そのとき、S=0であり、本処理は、ステップ804に進んで状態保存ステータス値を1に設定する。バックグラウンド処理がより安全性が低かった場合(S=0によって示されるように)、追加の状態保存は実行されなかったことになる(図6のステップ408は、追加の状態保存ステップ420を省略させたことになる)。状態保存ステータス値フィールド720は、この場合、状態保存に影響を及ぼさずに、状態保存ステータス値フィールド720からの情報をより安全性の低いドメインでの処理が取得することを防ぐことになり、ステップ804でそのフィールドを1のデフォルト値に設定することが最も安全である。

0109

他方で、ステップ802でセキュリティ・ドメイン値Sが1と等しい場合、次いで、本処理はステップ805に進み、そこで、新しい末尾連鎖式例外が安全なドメインで処理されようとしているかどうかが判定される。そうでない場合、次いで、再び、ステップ804で、状態保存ステータス値フィールド720が1に設定される。

0110

新しい例外が安全なドメインで処理されようとする場合、次いで、ステップ806で、現在の処理が安全なドメイン内かどうかが判定される。そうでない場合には、次いで、ステップ808で、状態保存ステータス値フィールド720が0に設定され、一方、現在の処理が安全である場合には、次いで、ステップ810で、状態保存ステータス値フィールド720は、それが前の例外について有したのと同じ値に設定される。ステップ812で、新しい例外戻り値がリンク・レジスタ65に書き込まれ、状態保存ステータス値フィールド720は、ステップ804、808又は810に従って設定される。本方法は、次いで、図6のステップ435に進んで例外処理ルーチンに分岐する。

0111

図13は、レジスタの積み重ねを解除するための図7のステップ540をより詳細に示す。例外処理の過去の履歴に応じて、スタックは、発呼側レジスタのみが復元される必要があるスタック・フレーム215、又は、発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が復元される必要があるスタック・フレーム220のいずれかを含み得る。図13は、プロセッサが、どのスタック・フレームがスタックに存在することになるかをどのように判定することができるかを示す。ステップ820で、現在の例外戻りがより安全性の低い例外から安全なバックグラウンド処理に切り替わっているかどうかが判定される。たとえば、セキュリティ・ドメイン・フィールド725が、バックグラウンド処理が安全か安全性が低いかを判定するために、使用され得る。処理が、より安全性の低い例外から安全なバックグラウンド処理に切り替わっていない場合、次いで、ステップ822で、本処理は、現在の例外戻りが安全な例外から安全なバックグラウンド処理に切り替わっていて、状態保存ステータス値フィールド720の値が0であるかどうかを判定する。ステップ820及び822で判定される条件のいずれも満たされない場合、次いで、ステップ824で、発呼側レジスタのみが、スタックから復元されたそれらの値を有する。しかし、ステップ820及び822でテストされた条件のいずれかが満たされる場合、次いで、ステップ826で、被発呼側の保存された値が、ステップ824で発呼側レジスタにデータを復元する前に被発呼側レジスタに復元される。したがって、本システムは、どのレジスタがそれらのレジスタ状態が復元されることを必要とするかを判定することができる。

0112

図14は、図7の例外戻り処理ステップ530をより詳細に示す。ステップ830で、末尾連鎖式であるべき保留中の例外が存在するかどうかが判定される。その例外は、それの優先度が、完了したばかりの例外の優先度より低い又は同等であり、バックグラウンド処理の優先度より高い場合に、末尾連鎖式であるはずである。処理されるべき末尾連鎖式例外が存在する場合、次いで、本方法は、図6のステップ408に戻って末尾連鎖式例外への入力を処理する。

0113

末尾連鎖式例外が存在しない場合、次いで、本方法は、ステップ840及び850に進み、そこで、(a)例外戻りがより安全性の低い例外から安全なバックグラウンド処理に切り替わっている、又は(b)例外戻りが安全な例外から安全なバックグラウンド処理に切り替わっていて状態保存ステータス値フィールドが0の値を有することのいずれかが判定される。これらの条件のいずれかが満たされる場合、次いで、ステップ860で、所定の署名222が予期されると判定される。これらの条件のいずれも満たされない場合、次いで、ステップ870で、所定の署名は予期されないと判定される。本方法は、次いで、図7のステップ535に進み、そこで、処理が実行されて、例外戻りが不適切に使用されたかどうかが、所定の署名222が予期されるかどうかに基づいて、検出される。図4Bのスタック・フレーム220に示すように、被発呼側の保存されたレジスタ値がスタックに存在するとき、その場合、所定の署名はまた予期されることになるので、ステップ840及び850は、図13のステップ820及び822と同じ2つの条件をチェックすることに留意されたい。

0114

図15及び16は、図9に示す不必要なスタック保存及び復元動作が、状態保存ステータス値を使用し、どのように回避され得るかの例を示す。図15で、より安全性の低い例外がポイント900で生じるとき、バックグラウンド処理は安全なドメイン内である。図12Aに示すように、セキュリティ・ドメイン値Sは、1に設定されて、バックグラウンド処理が安全なドメイン内であったことを指示し、状態保存ステータス値SCRSもまた1に設定される。第1の例外がポイント910で完了するとき、第1の例外と同等又はそれより低い優先度の及びバックグラウンド処理より高い優先度の保留の第2の例外が存在する。この例外は、それがバックグラウンド処理に戻る前に処理されるように、末尾連鎖式である。この時点で、被発呼側の保存されたレジスタの積み重ね解除は、スキップされる。第2の例外に切り替わるときに、バックグラウンド処理は安全なドメイン内であり(S=1)、宛先は安全であり、現在の処理はより安全性が低いので、状態保存ステータス値SCRSは、図12Bのステップ808に示すように0に設定される。第2の例外がポイント920で処理を終了した後は、末尾連鎖式の第3の例外は保留され、より安全性の低いドメインで処理されることになる。状態保存ステータス値SCRSは0と等しいので、その場合、被発呼側の保存されたレジスタ状態はスタックに既に保存されてあるので、図11のステップ750に従って、追加の状態保存は省略され得る。したがって、追加のスタック動作に関連する遅延は存在しないので、第3の例外は、より速く処理することができる。最後に、ポイント930で、本処理はバックグラウンドに戻り、図13の本方法に従って、ステップ820での条件が満たされると判定され、そうして、被発呼側の保存されたレジスタ状態及び発呼側の保存されたレジスタ状態の両方がスタックからポップされ、対応するレジスタに復元される。

0115

図16は、追加のスタック保存動作が回避され得る、もう1つの例を示す。この場合、安全なバックグラウンド処理を実行する間に、安全なドメインで処理されることになる最初の例外がポイント1000で生じる。宛先はより安全性の低いドメインではないので、図6のステップ412に従って、被発呼側の保存されたレジスタの保存は、省略されることになる。発呼側の保存されたレジスタ状態のみが、ポイント1000でハードウェアによってスタックにプッシュされる。状態保存ステータス値は、図12Aに示すように、1に設定される。ポイント1005で、より安全性の低い第2の例外は、第1の例外に続く末尾連鎖式である。状態保存ステータス値SCRSが1と等しいとき、次いで、ポイント1005で、追加の状態保存が、図11のステップ750及び755に従って実行され、そうして、被発呼側の保存されたレジスタ状態がスタックにプッシュされる。S=1であり、宛先は安全性がより低いので、次いで、図12Bのステップ804で、状態保存ステータス値は、次の例外について1に設定される。ポイント1010で、より安全性の低い第2の例外から安全な第3の例外への末尾連鎖式遷移が生じ、被発呼側の保存されたレジスタの積み重ね解除はスキップされる。S=1であり、宛先は安全であり、現在の処理は安全性がより低いので、この時点で状態保存ステータス値SCRSは、図12Bのステップ808に従って0に設定される。これは、状態保存ステータス値の値が0であるので、ポイント1015で次の末尾連鎖式例外で、被発呼側の保存されたレジスタのスタックがスキップされ得ることを意味する。図16に示すように、たとえ最初の例外が、安全なドメインからより安全性の低いドメインへの切り替えを引き起こす遷移でなくても、安全なドメインからより安全性の低いドメインへの次の切り替えで実行される追加の状態保存は、一度実行することができ、その後の遷移で繰り返されないことになる。

0116

図14に示すように例外戻り値を設定するための機構は、例外がより安全性の低いドメインで処理されているときに、状態保存ステータス値SCRSは1の値を常に有することになり、一方で、安全な例外を処理するとき、状態保存ステータス値は、0又は1の変数値を有して、追加の状態保存が安全から安全性のより低いものへの次の遷移で必要とされることになるかどうかを指示することを意味することが、図15及び16から理解されよう。より安全性の低いドメイン内にある間にその値を固定値の1に設定することは、より安全性の低いドメイン内のコードが、情報が例外処理の過去の履歴に関して推論されることを可能にし得る状態保存ステータス値からの任意の情報を取得することが可能になるのを防ぐので、これは有用である。これは、セキュリティを向上させる。

0117

また、より安全性の低いコードが状態保存ステータス値を改ざんし得る場合、これは、安全なドメイン内にある間のその後の状態保存動作に影響を及ぼすことがあり、セキュリティ侵害につながり得る。これを防ぐために、処理回路は、より安全性の低い例外から安全な例外への切り替え時に(たとえば、図16のポイント1010)、状態保存ステータス値が、それがより安全性の低いドメインでの例外の入力時に設定された固定値をまだ有することを検出し、その値を変更した場合にエラーをトリガすることができる。別法として、エラーはトリガされ得ないが、安全なドメインに戻るときに、状態保存ステータス値は、より安全性の低いコードによる状態保存ステータス値フィールドの修正を無効にし、それが安全なドメイン内で有することになっている値にリセットされ得る。

0118

図17は、例外の先制の一例を示す。各例外は、優先度値に関連付けられ得る。より優先度の低い例外が実行されている間により高い優先度の例外が生じた場合、次いで、高い優先度の例外が、より優先度の低い例外に先制し、より優先度の低い例外を完了することなしに処理され得る。図17は、優先度値のより大きな数値がより高い優先度を示す一例を示すが、より低い優先度値でより高い優先度を表すこと、たとえば優先度値の0が優先度値の1より高い優先度の例外を指示すること、もまた可能である。

0119

図17に示すように、先制が生じるとき、先制された例外は、次の例外のバックグラウンド処理として扱われ得る。たとえば、図17のポイント1100で、バックグラウンド処理が、優先度値の1を有する第1の例外を処理するために、割り込まれる。ポイント1105で、第2の例外が、優先度値の4を有して生じる。これは現在の優先度レベルより高い優先度であるので、第2の例外が第1の例外に先制し、そのとき、第1の例外はバックグラウンド処理である。ポイント1110で第2の例外から戻るとき、状態復元が実行されて、第2の例外が生じた時点でバックグラウンド処理(すなわち、第1の例外)によって使用されていた状態を復元することになる。第1の例外がポイント1115で完了するとき、さらなる状態復元が実行されて、処理のために元のバックグラウンドによって使用された値を復元する。したがって、前の実施例で、「バックグラウンド処理」は、それ自体、より高い優先度の例外によって先制される例外の例外処理ルーチンに従って実行される処理でもよい。

0120

図18A及び18Bは、状態保存ステータス値が先制中に有用であり得る一例を示す。バックグラウンド処理が安全であり、より安全性の低い例外が生じた場合、次いで、前述のように発呼側の保存されたレジスタ及び被発呼側の保存されたレジスタの両方が、より安全性の低い例外ハンドラによる被発呼側レジスタ状態へのアクセスを防ぐために、スタックにプッシュされることになる。しかし、この状態保存動作が実行されている間により高い優先度の別の例外が生じ得ることが可能である。この場合、より高い優先度の例外が、最初のより安全性の低い例外を先制することになり、そうして、より安全性の低い例外は処理されないことになる。先制する例外が安全なドメインで処理されようとする場合、被発呼側の保存されたレジスタをスタックにプッシュすることは必要ではないことになる。

0121

図18Aは、発呼側の保存されたレジスタがスタックにプッシュされている間に、先制する例外が生じる、一例を示す。この場合、先制する例外は安全であるので、被発呼側レジスタの追加の状態保存を実行する必要はなく、したがって、発呼側レジスタのスタックが完了した後は、次いで、安全な例外の処理が開始し得る。これは、スタックに被発呼側レジスタ状態をプッシュすることによってもたらされる遅延を回避する。その後の末尾連鎖式のより安全性の低い例外が生じた場合、次いで、図18Aに示すように、被発呼側レジスタ状態が、この時点でスタックにプッシュされ得る。

0122

他方で、図18Bは、被発呼側レジスタが、最初のより安全性の低い例外の処理のために動作可能なスタックにプッシュされている間に、安全なドメイン内の先制する例外が生じる、一例を示す。この場合、被発呼側レジスタをプッシュし続けること、及び、被発呼側レジスタの状態保存が完了したときに安全な例外に切り替えることが、より効率的であり得る。これは、被発呼側レジスタの状態保存の停止、及び、既に完了した被発呼側レジスタのスタック動作の反転が、単にその状態保存を終了することよりも時間を要し得るからである。したがって、状態保存が完了された場合、遅延は少なくなることになる。被発呼側レジスタの保存が完了した場合、さらなる安全性の低い末尾連鎖式例外が生じるときに追加の状態保存がスキップされ得るように、状態保存ステータス値SCRSは、0にセットされて追加の状態保存が既に行われたことを指示することができる。したがって、状態保存ステータス値はまた、先制を処理するときにパフォーマンスの向上を可能にする。

0123

本願の主題は、同一出願人による同時係属の米国特許出願第13/368,419号及び英国特許出願第1217531.1号で論じられた主題に関連し、これらの文書の両方の全内容を参照によって本明細書に組み込む。

0124

特定の実施例が本明細書で説明されたが、本発明はそれらに限定されないこと、及び、それらへの多数の修正及び追加が本発明の範囲内で行われ得ることが理解されよう。たとえば、以下の従属請求項の特徴の様々な組合せが、本発明の範囲を逸脱することなしに独立請求項の特徴と行われ得る。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

該当するデータがありません

関連する公募課題

該当するデータがありません

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

該当するデータがありません

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

この 技術と関連性が強い技術

該当するデータがありません

この 技術と関連性が強い法人

該当するデータがありません

この 技術と関連性が強い人物

該当するデータがありません

この 技術と関連する社会課題

該当するデータがありません

この 技術と関連する公募課題

該当するデータがありません

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ