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

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

▶ アーム・リミテッドの特許一覧

<>
  • 特許-遷移無効インジケータ 図1
  • 特許-遷移無効インジケータ 図2
  • 特許-遷移無効インジケータ 図3
  • 特許-遷移無効インジケータ 図4
  • 特許-遷移無効インジケータ 図5
  • 特許-遷移無効インジケータ 図6
  • 特許-遷移無効インジケータ 図7
  • 特許-遷移無効インジケータ 図8
  • 特許-遷移無効インジケータ 図9
  • 特許-遷移無効インジケータ 図10
  • 特許-遷移無効インジケータ 図11
  • 特許-遷移無効インジケータ 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-10
(45)【発行日】2023-10-18
(54)【発明の名称】遷移無効インジケータ
(51)【国際特許分類】
   G06F 9/48 20060101AFI20231011BHJP
   G06F 9/30 20180101ALI20231011BHJP
   G06F 21/74 20130101ALI20231011BHJP
   G06F 21/52 20130101ALI20231011BHJP
【FI】
G06F9/48 100P
G06F9/30 380Z
G06F21/74
G06F21/52
【請求項の数】 19
(21)【出願番号】P 2021517656
(86)(22)【出願日】2019-08-22
(65)【公表番号】
(43)【公表日】2022-01-12
(86)【国際出願番号】 GB2019052363
(87)【国際公開番号】W WO2020074853
(87)【国際公開日】2020-04-16
【審査請求日】2022-08-15
(31)【優先権主張番号】1816354.3
(32)【優先日】2018-10-08
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】グロカット、トーマス クリストファー
【審査官】漆原 孝治
(56)【参考文献】
【文献】特表2015-534186(JP,A)
【文献】特表2015-534689(JP,A)
【文献】米国特許出願公開第2014/0373171(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
G06F 9/30
G06F 21/74
G06F 21/52
(57)【特許請求の範囲】
【請求項1】
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施するための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施するための、処理回路と、
前記処理回路の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査回路と、
例外条件に応答して、前記処理回路の現在のモード及び前記現在のセキュリティ・ドメインと、前記例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移のうちの1つを実施するための例外制御回路であって、前記複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、例外制御回路と
を備える装置であって、
前記例外制御回路が、例外復帰条件に応答して、前記モードと、前記例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移のうちの1つを実施し、
前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、前記例外制御回路が、遷移無効インジケータを設定するように構成され、
前記遷移無効インジケータが設定されたときの前記セキュアなドメイン及び前記スレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、前記例外制御回路が、障害のシグナリングをトリガするように構成された、
装置。
【請求項2】
前記セキュアなドメイン及び前記スレッド・モードでの処理への前記少なくとも1つのタイプの例外復帰遷移は、
前記あまりセキュアでないドメイン及び前記ハンドラ・モードでの処理から前記セキュアなドメイン及び前記スレッド・モードでの処理への遷移と、
前記例外復帰遷移が、前記例外復帰遷移が前記あまりセキュアでないドメイン及び前記ハンドラ・モードへの前の例外エントリ条件に対応することを指定する例外復帰情報に関連するときの、前記セキュアなドメイン及び前記ハンドラ・モードでの処理から前記セキュアなドメイン及び前記スレッド・モードでの処理への遷移と
のうちの少なくとも1つを含む、請求項1に記載の装置。
【請求項3】
少なくとも1つの、セキュア・スレッド・モードからあまりセキュアでないハンドラ・モードへの例外エントリ遷移に応答して、前記例外制御回路が、前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移について省略された少なくとも1つの保護アクションを実施するように構成された、請求項1及び2のいずれか一項に記載の装置。
【請求項4】
メモリ・システムにおける対応するスタック・データ構造をポイントするための少なくとも1つのスタック・ポインタを記憶するための少なくとも1つのスタック・ポインタ・レジスタを備え、前記少なくとも1つのスタック・ポインタ・レジスタが、セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタを格納するためにセキュア・プロセス・スタック・ポインタ・レジスタを含み、前記セキュア・プロセス・スタック・ポインタが、前記セキュアなドメインと前記スレッド・モードとの組合せにあるとき、前記処理回路にとってアクセス可能である、請求項1から3までのいずれか一項に記載の装置。
【請求項5】
アーキテクチャ状態データを記憶するための複数のレジスタを備え、
前記例外制御回路が、前記例外条件に応答して、前記レジスタからのアーキテクチャ状態データの少なくともサブセットを、前記少なくとも1つのスタック・ポインタのうちの1つによって識別されるスタック・データ構造に保存して、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの1つを前記スタック・データ構造上に与え、前記第2の例外スタック・フレームが、前記第1の例外スタック・フレームから省略された前記レジスタからのアーキテクチャ状態データのサブセットを含む、
請求項4に記載の装置。
【請求項6】
前記第2の例外スタック・フレームが、前記第1の例外スタック・フレームから省略された完全性署名を含み、
前記複数の例外復帰遷移のサブセットについて、前記例外制御回路は、前記例外復帰遷移のために選択された所与のスタック・データ構造からのスタック・フレームにアクセスすることと、スタック解除されたスタック・フレーム中の所定の位置における値と前記完全性署名との間の不一致が検出されたときに障害をトリガすることとを含む完全性署名検査を実施するように構成された、
請求項5に記載の装置。
【請求項7】
前記例外制御回路は、完全性署名検査が実施されず、スタック解除が前記セキュア・プロセス・スタック・ポインタを使用して実施される、前記セキュアなドメイン及び前記スレッド・モードでの処理への例外復帰遷移に応答して、前記遷移無効インジケータをクリアするように構成された、請求項6に記載の装置。
【請求項8】
前記セキュアなドメイン及び前記スレッド・モードでの処理への前記少なくとも1つのタイプの例外復帰遷移は、アーキテクチャ状態が前記セキュア・プロセス・スタック・データ構造から復元されるべきであり、前記完全性署名検査が実施されるべきである、例外復帰遷移を含む、請求項6及び7のいずれか一項に記載の装置。
【請求項9】
前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移は、前記第1の例外スタック・フレームが前記セキュア・プロセス・スタック・データ構造上に与えられた、前記セキュアなドメイン及び前記スレッド・モードから前記セキュアなドメイン及び前記ハンドラ・モードへの例外エントリ遷移を含む、請求項5から8までのいずれか一項に記載の装置。
【請求項10】
前記例外制御回路は、前記セキュア・プロセス・スタック・データ構造上に前記第2の例外スタック・フレームを与えるために、前記セキュア・プロセス・スタック・データ構造に記憶された前記第1の例外スタック・フレームがアップグレードされたとき、前記遷移無効インジケータをクリアするように構成された、請求項5から9までのいずれか一項に記載の装置。
【請求項11】
前記遷移無効インジケータは、設定されたとき、前記セキュア・プロセス・スタック・ポインタへのアクセスが無効にされたことを示す、セキュア・プロセス・スタック無効インジケータを含む、請求項4から10までのいずれか一項に記載の装置。
【請求項12】
セキュア・プロセス・スタック・ポインタ限界値を記憶するためのセキュア・プロセス・スタック・ポインタ限界レジスタを備え、
前記例外制御回路は、
前記セキュア・プロセス・スタック・データ構造が前記セキュア・プロセス・スタック・ポインタ限界値を超えて拡張することと、
前記セキュア・プロセス・スタック・ポインタ・レジスタを前記セキュア・プロセス・スタック・ポインタ限界値を超える値に調整する試みと
のうちの1つを検出したことに応答して、障害のシグナリングをトリガするように構成され、
前記遷移無効インジケータが、前記セキュア・プロセス・スタック・ポインタ限界レジスタに記憶される、
請求項4から11までのいずれか一項に記載の装置。
【請求項13】
前記遷移無効インジケータが、前記セキュア・プロセス・スタック・ポインタ・レジスタに記憶される、請求項4から11までのいずれか一項に記載の装置。
【請求項14】
構成インジケータを記憶するための構成レジスタを備え、前記例外制御回路は、前記構成インジケータが第1の値を有するとき、前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、前記遷移無効インジケータを設定するように構成された、請求項1から13までのいずれか一項に記載の装置。
【請求項15】
メモリ・システムにおける対応するスタック・データ構造をポイントするための複数のスタック・ポインタを記憶するための複数のスタック・ポインタ・レジスタを備え、前記複数のスタック・ポインタは、
セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタであって、前記セキュア・プロセス・スタック・ポインタが、前記セキュアなドメインと前記スレッド・モードとの組合せにあるとき、前記処理回路にとってアクセス可能である、セキュア・プロセス・スタック・ポインタと、
前記ハンドラ・モードでの処理からの例外エントリ遷移に応答して保存されるアーキテクチャ状態データを記憶するための少なくとも1つのメイン・スタック・データ構造に関連する少なくとも1つのメイン・スタック・ポインタと
を含み、
前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、前記構成インジケータが第2の値を有するとき、前記例外制御回路は、前記セキュア・プロセス・スタック・データ構造へのアーキテクチャ状態の保存をトリガすることと、前記少なくとも1つのメイン・スタック・データ構造のうちの1つが、前記スレッド・モードでの処理への後続の例外復帰遷移に応答してアーキテクチャ状態データをスタック解除するために使用されるべきであることを示すようにスタック選択値を更新することとを行うように構成された、
請求項14に記載の装置。
【請求項16】
前記遷移無効インジケータが設定されたとき、前記例外制御回路が、
前記あまりセキュアでないドメインでの処理から前記セキュアなドメイン及び前記スレッド・モードでの処理への関数呼出しと、
前記あまりセキュアでないドメインでの処理から前記セキュアなドメイン及び前記スレッド・モードでの処理への関数復帰と、
前記セキュアなドメイン及び前記スレッド・モードでの命令の処理と、
前記スレッド・モードで処理され、前記あまりセキュアでないドメインから前記セキュアなドメインへの遷移に関連するとき、前記セキュアなドメインへの有効なエントリ・ポイントを示すセキュア・ゲートウェイ・データ処理命令と、
前記セキュアなドメインと前記スレッド・モードとの組合せにあるとき、前記処理回路にとってアクセス可能なセキュア・プロセス・スタック・ポインタへの、前記セキュアなドメインと前記スレッド・モードとの組合せへの遷移に続く、第1のアクセスと
のうちの少なくとも1つに応答して障害のシグナリングをトリガするように構成された、請求項1から15までのいずれか一項に記載の装置。
【請求項17】
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施することが可能な処理回路のためのデータ処理方法であって、メモリ・アクセスが可能にされるかどうかの検査が前記処理回路の現在のセキュリティ・ドメインに依存し、所与のセキュリティ・ドメイン内で、前記処理回路が、例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施することが可能であり、
前記方法は、
例外条件に応答して、前記処理回路の現在のモード及び現在のセキュリティ・ドメインと、前記例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移のうちの1つを実施することであって、前記複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、実施することと、
例外復帰条件に応答して、前記モードと、前記例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移のうちの1つを実施することと
を含み、
前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、遷移無効インジケータが設定され、
前記遷移無効インジケータが設定されたときの前記セキュアなドメイン及び前記スレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、障害がシグナリングされる、
データ処理方法。
【請求項18】
命令の実行のための命令実行環境を与えるようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理をサポートするための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理をサポートするための、処理プログラム論理と、
前記処理プログラム論理の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査プログラム論理と、
例外条件に応答して、前記処理プログラム論理の現在のモード及び現在のセキュリティ・ドメインと、前記例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移のうちの1つを実施するための例外制御プログラム論理であって、前記複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、例外制御プログラム論理と
を含み、
前記例外制御プログラム論理が、例外復帰条件に応答して、前記モードと、前記例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移のうちの1つを実施し、
前記少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、前記例外制御プログラム論理が、遷移無効インジケータを設定するように構成され、
前記遷移無効インジケータが設定されたときの前記セキュアなドメイン及び前記スレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、前記例外制御プログラム論理が、障害のシグナリングをトリガするように構成された、
コンピュータ・プログラム。
【請求項19】
請求項18に記載のコンピュータ・プログラムを記憶するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
(背景技術)
本技法は、データ処理の分野に関する。
【先行技術文献】
【非特許文献】
【0002】
【文献】「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁
【発明の概要】
【課題を解決するための手段】
【0003】
処理回路は、少なくともセキュアなドメイン(secure domain)とあまりセキュアでないドメイン(less secure domain)とを含むいくつかのセキュリティ・ドメインのうちの1つでのデータ処理を実施することをサポートし得る。これは、セキュアなドメインに関連する機密データ又はコードが、あまりセキュアでないドメインで動作するあまりセキュアでないコードによる不適切なアクセスから保護されることを可能にすることができる。
【0004】
少なくともいくつかの実例は、少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施するための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施するための、処理回路と、処理回路の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査回路と、例外条件に応答して、処理回路の現在のモード及び現在のセキュリティ・ドメインと、例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移(exception entry transition)のうちの1つを実施するための例外制御回路であって、複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、例外制御回路とを備える装置であって、例外制御回路が、例外復帰条件(exception return condition)に応答して、モードと、例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移(exception return transition)のうちの1つを実施し、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、例外制御回路が、遷移無効インジケータを設定するように構成され、遷移無効インジケータが設定されたときのセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、例外制御回路が、障害のシグナリングをトリガするように構成された、装置を提供する。
【0005】
少なくともいくつかの実例は、少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施することが可能な処理回路のためのデータ処理方法であって、メモリ・アクセスが可能にされるかどうかの検査が処理回路の現在のセキュリティ・ドメインに依存し、所与のセキュリティ・ドメイン内で、処理回路が、例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施することが可能であり、本方法が、例外条件に応答して、処理回路の現在のモード及び現在のセキュリティ・ドメインと、例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移のうちの1つを実施することであって、複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、実施することと、例外復帰条件に応答して、モードと、例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移のうちの1つを実施することとを含み、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、遷移無効インジケータが設定され、遷移無効インジケータが設定されたときのセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、障害がシグナリングされる、データ処理方法を提供する。
【0006】
少なくともいくつかの実例は、命令の実行のための命令実行環境を与えるようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、本コンピュータ・プログラムが、少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理をサポートするための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理をサポートするための、処理プログラム論理と、処理プログラム論理の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査プログラム論理と、例外条件に応答して、処理プログラム論理の現在のモード及び現在のセキュリティ・ドメインと、例外条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外エントリ遷移のうちの1つを実施するための例外制御プログラム論理であって、複数の例外エントリ遷移が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移を含む、例外制御プログラム論理とを含み、例外制御プログラム論理が、例外復帰条件に応答して、モードと、例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択された複数の例外復帰遷移のうちの1つを実施し、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、例外制御プログラム論理が、遷移無効インジケータを設定するように構成され、遷移無効インジケータが設定されたときのセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、例外制御プログラム論理が、障害のシグナリングをトリガするように構成された、コンピュータ・プログラムを提供する。
【0007】
本コンピュータ・プログラムは、コンピュータ可読記憶媒体に記憶され得る。記憶媒体は、非一時的記憶媒体であり得る。
【0008】
本技法のさらなる態様、特徴及び利点は、添付の図面とともに読まれるべきである、実例の以下の説明から明らかであろう。
【図面の簡単な説明】
【0009】
図1】セキュアなドメインとあまりセキュアでないドメインとをサポートする処理回路を有するデータ処理システムの一実例を概略的に示す図である。
図2】処理回路の異なるドメイン及び動作モードの一実例を示す図である。
図3】処理回路のレジスタの一実例を示す図である。
図4】被呼出し側(callee)レジスタに関連するアーキテクチャ状態を省略し、完全性署名を省略する、第1の例外スタック・フレームのいくつかの一実例を示す図である。
図5】被呼出し側レジスタからの追加のアーキテクチャ状態を含み、完全性署名を含む、第2の例外スタック・フレームの一実例を示す図である。
図6】以下で説明される遷移無効インジケータを使用して検出され得る例外エントリ及び復帰遷移の不適切なシーケンスを示す図である。
図7】あまりセキュアでないライブラリからセキュアなライブラリへの呼出しの例示的な使用事例を示す図である。
図8】データ処理装置によってサポートされる異なる例外エントリ遷移を示す表である。
図9】データ処理装置によってサポートされるいくつかの異なる例外復帰遷移を示す表である。
図10】例外エントリ遷移をハンドリングする方法を示す流れ図である。
図11】例外復帰遷移をハンドリングする方法を示す流れ図である。
図12】使用され得るシミュレータ実例を示す図である。
【発明を実施するための形態】
【0010】
処理回路は、少なくともセキュアなドメインとあまりセキュアでないドメインとを含むいくつかのセキュリティ・ドメインのうちの1つでのデータ処理を実施することをサポートし得る。処理回路の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するために、メモリ・アクセス検査回路が与えられ得る。さらに、所与のセキュリティ・ドメイン内で、処理回路は、例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理をサポートし得る。メモリの領域へのアクセスに対する制御、及びどのアーキテクチャ・レジスタが処理回路にとってアクセス可能であるかの制御が、処理回路の現在のセキュリティ・ドメインと現在のモードとの組合せに基づき得る(いくつかの場合には、メモリ又はレジスタへのアクセスのそのような制御は、アーキテクチャの他の制御パラメータにも依存し得る)。
【0011】
例外条件に応答して、処理回路の現在のモード及び現在のセキュリティ・ドメインと、例外条件に関連するセキュリティ・ドメインとに基づいて選択されたいくつかの例外エントリ遷移のうちの1つを実施する、例外制御回路が与えられ得る。例外制御回路は、例外復帰条件に応答して、モードと、例外復帰条件に関連するセキュリティ・ドメインとに基づいて選択されたいくつかの例外復帰遷移のうちの1つをも実施し得る。特定の例外エントリ遷移のために実施されるアクション、又は特定の例外復帰遷移のために実施されるアクションは、選択される特定の遷移に依存して変動し得る。たとえば、いくつかの例外エントリ/復帰遷移は、他の遷移のために必要とされないことがあるいくつかのセキュリティ検査を含むことができる。
【0012】
以下で説明される技法では、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、例外制御回路は、遷移無効インジケータを設定し得る。遷移無効インジケータが設定されたときのセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、例外制御回路は、障害のシグナリングをトリガし得る。これらの対策は、場合によっては例外エントリ及び復帰遷移の不適切なシーケンスを使用していくつかのセキュリティ検査を回避しようとすることがある潜在的攻撃に対する軽減を与える。いくつかのタイプの例外復帰遷移を一時的に無効にすることができる遷移無効インジケータを与えることによって、これは、攻撃の影響を受けにくい、よりセキュアなシステムを与えることができる。
【0013】
(遷移無効インジケータが設定される)少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移は、少なくとも1つの保護アクションが省略される遷移であり得る。対照的に、そのような保護アクションは、少なくとも1つの、セキュア・スレッド・モードからあまりセキュアでないハンドラ・モードへの例外エントリ遷移のために実施され得る(セキュア・ハンドラ・コードよりも大きい、あまりセキュアでないハンドラ・コードへの遷移に関連する危険があり得るので、ここでは保護対策が必要とされ得る)。保護アクションは、たとえば、攻撃者が例外エントリ及び復帰遷移の不適切なシーケンスを後でトリガする可能性からガードするための対策を導入することを含むことができる。セキュア・スレッド・モードからセキュア・ハンドラ・モードに遷移するときに保護対策を省略することは、性能を改善するのを助け得る。
【0014】
しかしながら、この保護アクションが、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移について省略される場合、次いで、攻撃者が、保護アクションが前に省略されたセキュアなドメイン及びスレッド・モードへの不適切な復帰を後でトリガする場合、そのような不適切な復帰は検出されないことがある。たとえば、保護アクションは、対応する復帰に対する完全性検査の対象となり得る、以下で説明されるような完全性署名を記憶することであり得る。
【0015】
少なくとも1つのセキュア・スレッド・モードからセキュア・ハンドラ・モードへのに応答して遷移無効インジケータを設定することによって、これは、保護対策が実施されなかったことにフラグを付けることができ、遷移無効インジケータが、セキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移に遭遇したときに依然として設定される場合、例外エントリ及び復帰の潜在的に不一致のシーケンスを活用して攻撃を防ぐために、障害がトリガされ得る。
【0016】
(遷移無効インジケータが設定された場合に障害がトリガされ得る)セキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移は、あまりセキュアでないドメイン及びハンドラ・モードでの処理からセキュアなドメイン及びスレッド・モードでの処理への遷移と、例外復帰遷移が、例外復帰遷移があまりセキュアでないドメイン及びハンドラ・モードへの前の例外エントリ条件(exception entry condition)(たとえば、セキュアなドメイン及びハンドラ・モードからあまりセキュアでないドメイン及びハンドラ・モードへの例外エントリ)に対応することを指定する例外復帰情報に関連するときの、セキュアなドメイン及びハンドラ・モードでの処理からセキュアなドメイン及びスレッド・モードでの処理への遷移とのうちの少なくとも1つを含み得る。例外復帰遷移は、いくつかの理由で、例外復帰遷移があまりセキュアでないドメイン及びハンドラ・モードへの前の例外エントリ条件に対応することを指定する例外復帰情報に関連し得、それらの理由は、たとえば、そのような前の例外エントリ条件が実際に生じたときに例外復帰情報が設定されたこと、又は、そのような前の例外エントリ条件が生じなかった場合でも、攻撃者が、前の例外エントリ条件が生じたことを示すために例外復帰情報を捏造したことである。上述の例外復帰遷移のタイプは、他のタイプの例外復帰遷移よりも大きい危険に関連し得、したがって、少なくとも1つの保護アクションが、対応する例外エントリ遷移に対して前に実施されたことが予想され得る(これについて、これらの特定の例外復帰遷移は、セキュアなドメインからあまりセキュアでないハンドラ・モードへの例外エントリ遷移であったことが予想され得る)。しかしながら、対応する例外エントリが、(たとえば、攻撃者が、予想されるものへの異なるタイプの例外復帰遷移を捏造することにより)実際は少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移であった場合、対応する例外エントリ遷移に対して実施される保護アクションの欠如は、セキュリティに潜在的に影響を及ぼすことがある。これは、遷移無効インジケータを与えることと、遷移無効インジケータがセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移に遭遇したときに設定されるかどうかを検査することとによって、軽減される。
【0017】
装置は、メモリ・システムにおける対応するスタック・データ構造をポイントするための少なくとも1つのスタック・ポインタを記憶するための少なくとも1つのスタック・ポインタ・レジスタを有し得る。異なるスタック・データ構造が与えられ得、各スタックが、セキュリティ・ドメインと動作モードとの異なる組合せに関連する。たとえば、少なくとも1つのスタック・ポインタは、セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタを含み得、ここで、セキュア・プロセス・スタック・ポインタは、セキュアなドメインとスレッド・モードとの組合せにあるとき、処理回路にとってアクセス可能である。そのようなスタック・データ構造は、例外エントリ遷移に応答して、レジスタからのアーキテクチャ状態データの少なくともサブセットを、アクティブ・スタック・ポインタによって識別されるスタック・データ構造に保存するために、使用され得る。アクティブ・スタック・ポインタは、現在のモードとセキュリティ・ドメインとに基づいて選択され得、随意に、(少なくとも、いくつかの例外エントリ遷移について)制御レジスタに記憶されたスタック・ポインタ選択値にも依存することがある。例外復帰遷移において、選択されたスタック・ポインタが、対応するアーキテクチャ状態がそこからレジスタに復元されるべきであるスタックを識別するために使用され得る。この場合も、選択されたスタック・ポインタは、例外復帰遷移の特性(たとえば、その復帰が行われているモード及びドメイン)に基づいて、及び随意に、いくつかの遷移についてのスタック・ポインタ選択値にも基づいて、選択され得る。モードとドメインとの異なる組合せでアクセス可能な異なるスタック・ポインタの提供は、モードとドメインとのある組合せに関連するスタック上に与えられたデータが、モードとドメインとの別の組合せに可視でないことを保証するために、有用であり得る。
【0018】
例外条件に応答してスタック・データ構造のうちの1つ上に保存されるデータのセットは、スタック・フレームと呼ばれることがある。システムは、異なる例外エントリ遷移のためのスタック・フレームの異なるバージョンをサポートし得る。たとえば、例外制御回路は、関連のあるスタック・データ構造が第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの1つを与えられるように、レジスタからのアーキテクチャ状態データの少なくともサブセットをそのスタック・データ構造に保存することによって、例外条件に応答し得、ここで、第2の例外スタック・フレームは、第1の例外スタック・フレームから省略されたレジスタからのアーキテクチャ状態データのサブセットを含み得る。
【0019】
セキュリティと性能との間のバランスを可能にするように例外スタック・フレームの異なるバージョンを与えることが、有用であり得る。概して、レジスタからのより大量の状態データをメモリにおけるスタック・データ構造に保存することは、より多くの時間を必要とし、したがって、例外ハンドリング・レイテンシを増加させる。したがって、少なくとも1つの、セキュア・スレッドからセキュア・ハンドラへの例外エントリ遷移など、より低いセキュリティ要件がある例外エントリ遷移では、より小さい第1の例外スタック・フレームが保存され得る。例外ハンドラ・ソフトウェアが、第1の例外スタック・フレーム中に含まれなかったレジスタのうちの1つを更新する必要がある場合、例外ハンドラのソフトウェア自体が、第1の例外スタック・フレームから省略された残りのアーキテクチャ状態の保存をトリガすることに対して責任を負い得る。アーキテクチャ状態を2つのサブセット(ハードウェアが第1の例外スタック・フレームに自動的に保存するアーキテクチャ状態の「呼出し側(caller)」セット、及び必要な場合に保存することが例外ハンドラのソフトウェアの責任であるアーキテクチャ状態の「被呼出し側」セット)に分割するこの手法は、ハードウェアがすべてのアーキテクチャ状態を保存する場合又はソフトウェアがすべての状態保存に対して完全に責任を負う場合のいずれかと比較して、改善された割込みハンドリング・レイテンシを与えることができる(ソフトウェアがいくつかのレジスタを保存することに対する責任を有することを可能にすることは、ソフトウェアが、いくつかのレジスタが例外ハンドラによって実際に使用又は修正されない場合にそれらのレジスタを保存しないように選定することができることを意味するので、それは、レイテンシについて有益であり得る)。
【0020】
しかしながら、いくつかの例外エントリ遷移(たとえば、セキュアなドメインからあまりセキュアでないドメインへの遷移)において、例外ハンドラがソフトウェアにおける追加の被呼出し側状態の状態保存を実施することを可能にすることは、これが、例外が生じる前にセキュア・コードが実行することによってレジスタ中に残された潜在的に機密のデータへのあまりセキュアでない例外ハンドラ・アクセスを可能にすることがあるので、適切でないことがある。したがって、いくつかの例外エントリ遷移について、例外制御回路のハードウェアは、代わりに、第1の例外スタック・フレームからのデータだけでなく、アーキテクチャ状態データの追加のサブセットをも含む、第2の例外スタック・フレームを保存し得る。第2の例外スタック・フレームの追加の状態保存が実施される場合、例外制御回路のハードウェアはまた、レジスタを、それらの前のコンテンツと無相関の値にクリアすることをトリガし得る。したがって、第1のスタック・フレーム(より速い割込みハンドリング・レイテンシ)又は第2のスタック・フレーム(増加されたセキュリティ)のいずれかのハードウェア・トリガ保存をサポートする例外制御回路は、すべてのタイプの例外エントリ遷移についてどのレジスタがハードウェア又はソフトウェアに保存されるのかの固定割振りがあった場合よりも良い、レイテンシとセキュリティとの間のバランスを与えることができる。
【0021】
第2の例外スタック・フレームは、第1の例外スタック・フレームから省略された完全性署名を含み得る。例外復帰遷移のサブセットについて、例外制御回路は、その例外復帰遷移のために選択された所与のスタック・データ構造からのスタック・フレームにアクセスすることと、スタック解除された(unstacked)スタック・フレーム中の所定の位置における値と完全性署名との間の不一致が検出されたときに障害をトリガすることとを含む、完全性署名検査を実施し得る。そのような完全性署名検査は、たとえば、実際は予想される復帰機構が例外復帰遷移であったときに関数復帰(function return)が攻撃者によって捏造される場合、又は、実際に関数復帰が予想されたときに例外復帰が攻撃者によってトリガされる場合、いくつかの攻撃からガードするために有用であり得る。例外エントリ及び復帰と関数エントリ及び復帰とのそのような不一致は、場合によっては、いくつかのセキュリティ対策を潜在的に免れることがあるか、又は、不一致のスタック・フレームからのレジスタへの状態の復元により、不定の挙動の危険を冒すことがある。いくつかの例外エントリ遷移においてスタック・フレームに記憶され、対応する例外復帰遷移に対して検査され得る完全性署名の提供は、そのような不一致のエントリ及び復帰が検出されることを可能にすることができる。
【0022】
しかしながら、ハードウェアによって保存された第1の例外スタック・フレームが完全性署名を含まない場合、そのような保護対策は実施されない。これは、例外エントリ遷移がセキュア・スレッド・モードからセキュア・ハンドラ・モードへのものであるとき、許容可能であり得、なぜなら、予想される復帰遷移が、次いでセキュア・ハンドラ・モードからセキュア・スレッド・モードに戻り、したがって完全性署名検査を必要としないからである。しかしながら、上記で説明された遷移無効インジケータの提供は、攻撃者があまりセキュアでないハンドラ・モードからセキュア・スレッド・モードへの(又は、前の例外エントリ条件がセキュア・ハンドラ・モードからあまりセキュアでないハンドラ・モードへのものであった場合、セキュア・ハンドラ・モードからの)例外復帰を首尾よく捏造する場合、スタック・フレームは完全性署名が欠如していることがあるが、遷移無効インジケータが設定されているために攻撃が依然として検出され得、したがって障害がトリガされ得、不適切な例外復帰が防がれ得ることを意味する。したがって、これはセキュリティを改善する。
【0023】
所与の例外復帰条件について、対応する例外エントリ条件は、(所与の例外復帰条件がそこからアーキテクチャ状態を復元することを試みる)現在のスタック・フレームがスタック・データ構造に保存されることを引き起こした特定の例外エントリ条件であり得る。
【0024】
遷移無効インジケータが設定される、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移は、第1の例外スタック・フレームがセキュア・プロセス・スタック・データ構造上に与えられた、セキュアなドメイン及びスレッド・モードからセキュアなドメイン及びハンドラ・モードへの例外エントリ遷移を含み得る。第2の例外スタック・フレームがセキュア・プロセス・スタック・データ構造上に与えられた場合、条件無効インジケータを設定する必要はなく、なぜなら、この場合、適切な保護を与えるために、完全性署名がスタック・フレーム上に存在するからである。
【0025】
遷移無効インジケータは、様々なイベントに応答してクリアされ得る。たとえば、例外制御回路は、完全性署名検査が実施されず、スタック解除(unstacking)がセキュア・プロセス・スタック・ポインタを使用して実施される、セキュアなドメイン及びスレッド・モードでの処理への例外復帰遷移に応答して、遷移無効インジケータをクリアし得る。そのような例外復帰遷移は、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの遷移に応答して第1の例外スタック・フレームがセキュア・プロセス・スタック・データ構造上に与えられた元の例外エントリ遷移に対応して続くべきである予想される例外復帰遷移であり得、したがって、予想される例外復帰が実施されると、上記で説明された攻撃はもはや危険ではなく、遷移無効インジケータは、将来における障害の見込みを低減するようにクリアされ得る。
【0026】
例外制御回路はまた、セキュア・プロセス・スタック・データ構造上に第2の例外スタック・フレームを与えるために、セキュア・プロセス・スタック・データ構造に記憶された第1の例外スタック・フレームがアップグレードされたとき、遷移無効インジケータをクリアすることができる。たとえば、いくつかの場合には、例外制御回路は、例外をテールチェイン(tail-chain)し得るか、又は、(より優先度の高い例外がとられたときに元のより優先度の低い例外ハンドラがまだ開始していない場合)より優先度の高い例外をハンドリングするためにより優先度の低い例外をプリエンプトし得る。例外制御回路が、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移をトリガする初期例外条件に応答して、第1の例外スタック・フレームのみをセキュア・プロセス・スタック・データ構造に最初に保存するが、次いで、対応する例外ハンドラをハンドリングし始める前に、あまりセキュアでないドメインへの遷移を示す、より優先度の高い例外に遭遇した場合、第1の例外スタック・フレームから省略された追加のアーキテクチャ状態は、第1の例外スタック・フレームを第2の例外スタック・フレームにアップグレードするために、セキュア・プロセス・スタック・データ構造に保存される必要があり得る。この時点で、完全性署名は今やスタック上に存在し、したがって、セキュア・プロセス・スタック・データ構造は、考えられる攻撃から保護され、したがって、もはや遷移無効インジケータを設定する必要はない。したがって、この時点で、遷移無効インジケータはクリアされ得る。
【0027】
遷移無効インジケータが設定された場合に障害がトリガされる、セキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移は、アーキテクチャ状態がセキュア・プロセス・スタック・データ構造から復元されるべきであり、完全性署名検査が実施されるべきである、例外復帰遷移であり得る。そのような例外復帰遷移について、遷移無効インジケータが設定された場合、これは、セキュア・プロセス・スタック・データ構造上の対応するスタック・フレームは完全性署名が欠如していることがあり、したがって、これは、完全性署名検査がスタック・フレーム外のメモリ・ロケーションから任意の値を読み取ることの危険を冒し得ることを意味する。これは、攻撃者が、スタック・フレームが間違ったフォーマットのものであるにもかかわらず完全性検査をパスさせる試みにおいて、完全性署名に一致するようにメモリ中の任意のロケーションにおいて値を改ざんすることによって、攻撃を引き起こすことを可能にすることがあり、したがって、スタック・フレームの後続の誤解は、攻撃者によって活用され得る不定の及び潜在的に非セキュアな挙動につながることがある。このタイプの例外復帰遷移において障害をトリガするための遷移無効インジケータの提供は、この攻撃をなくすのを助ける。
【0028】
遷移無効インジケータは、異なるやり方で表され得る。概して、遷移無効インジケータは、処理回路の制御レジスタに記憶され得る任意の構成パラメータであり得る。
【0029】
しかしながら、一実例では、遷移無効インジケータは、設定されたとき、セキュア・プロセス・スタック・ポインタへのアクセスが無効にされたことを示す、セキュア・プロセス・スタック無効インジケータであり得る。したがって、処理回路がセキュア・プロセス・スタック・ポインタを与えるレジスタにアクセスすることを試みる場合、これは、セキュア・プロセス・スタック無効インジケータが設定される場合に障害をトリガし得る。
【0030】
遷移無効インジケータは、様々な異なる制御レジスタに記憶され得る。いくつかの場合には、遷移無効インジケータを記憶するための専用レジスタが与えられ得るか、又は、すでに与えられたレジスタ内のスペア・ビットが使用され得る。
【0031】
一実例では、装置は、セキュア・プロセス・スタック・ポインタ限界値を記憶するためのセキュア・プロセス・スタック・ポインタ限界レジスタを含み得る。(i)セキュア・プロセス・スタック・データ構造がセキュア・プロセス・スタック・ポインタ限界値を超えて拡張することと、(ii)セキュア・プロセス・スタック・ポインタ・レジスタをセキュア・プロセス・スタック・ポインタ限界値を超える値に調整する試みとのうちの1つを検出したことに応答して、例外制御回路は、障害のシグナリングをトリガし得る。セキュア・プロセス・スタックが増大することができる程度に対する限界の提供は、アドレス空間のいくつかの領域における潜在的に機密のデータを、セキュア・プロセス・スタックが増大しすぎた場合に上書きされることから保護するために有用であり得る。限界が超えられた場合、障害がトリガされる厳密なタイミングが変動することがあり、限界が超えられたかどうかを決定するための検査が、異なるポイントにおいて実施され得る。たとえば、検査は、スタックにデータをプッシュするか又はスタックからデータをポップするとき、或いは(データが現在スタックに保存されていないか又はスタックから復元されていない場合でも)セキュア・プロセス・スタック・ポインタを調整するとき、実施され得る。
【0032】
いくつかの実例では、遷移無効インジケータは、セキュア・プロセス・スタック・ポインタ限界レジスタに記憶され得る。これは、アドレス整合ルールが、実際にはセキュア・プロセス・スタック・ポインタ限界レジスタに入れられたアドレスの最下位部分が事実上未使用であり得ることを意味し得、いくつかの最下位ビットが常に0であるので、有用であり得る。そのようなスペア・ビットは、遷移無効インジケータを符号化するために再使用され得、したがって、遷移無効インジケータを受け入れるための追加のレジスタ記憶容量を与える必要はない。
【0033】
別のオプションは、セキュア・プロセス・スタック・ポインタ・レジスタ自体内で遷移無効インジケータを符号化することであり得る。この場合も、アドレス整合ルールは、スタック・ポインタがあるアドレス境界に整合されることを必要とし得、これは、0に等しいアドレスの最下位端部においてアドレスのいくつかのビットを残し得、これらは、遷移無効インジケータを与えるために再使用され得る。
【0034】
遷移無効インジケータを符号化するために、セキュア・プロセス・スタック・ポインタ・レジスタではなく、セキュア・プロセス・スタック・ポインタ限界レジスタを使用することの利点は、セキュア・プロセス・スタック・ポインタ限界値が様々なデータ構造へのインデックスとして使用され得る可能性が低く(対照的に、スタック・ポインタ自体がインデックスとして使用され得)、したがって、限界レジスタを使用することが、スタック・ポインタがインデックスとして使用されるときに遷移無効インジケータを符号化するために使用されるビットをマスキングするための追加のプログラム命令を与えることの追加される複雑さを回避することができることである。とはいえ、所望される場合、セキュア・プロセス・スタック・ポインタ・レジスタにおいて遷移無効インジケータを符号化すること、又は遷移無効インジケータを記憶するための異なるレジスタを与えることは、依然として可能である。セキュア・プロセス・スタック・ポインタ・レジスタと、セキュア・プロセス・スタック・ポインタ限界レジスタとは、コンテキストがスレッド間で切り替わるときにすでに保存及び復元され得、したがって、これらのレジスタ中の未使用ビットのうちの1つに遷移無効インジケータを入れることは、コンテキスト切替えに関して追加の保存及び復元が必要とされないという利点を有する。
【0035】
遷移無効インジケータは、常に、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して設定される必要があるとは限らない。いくつかの実装形態では、遷移無効インジケータがこの例外エントリ遷移に応答して設定されるかどうかは、構成レジスタに記憶された構成インジケータに依存し得る。構成インジケータが第1の値を有するとき、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移は、遷移無効インジケータの設定をトリガし得る。構成インジケータが第2の値を有するとき、遷移無効インジケータの設定は省略され得る。これは、遷移無効インジケータのサポートを有しなかったレガシー・アーキテクチャとの適合性を保証するために有用であり得る。
【0036】
より詳細には、少なくとも1つのスタック・ポインタ・レジスタは、上記で説明されたセキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタ、並びに、ハンドラ・モードでの処理からの例外エントリ遷移に応答して保存されるアーキテクチャ状態データを記憶するための少なくとも1つのメイン・スタック・データ構造に関連する少なくとも1つのメイン・スタック・ポインタを含み得る。別個のメイン・スタック及びプロセス・スタックの使用は、メイン・スタック上に例外ハンドラによって残された状態が例外復帰の後にスレッド・モードで実行するスレッドに可視にならないように、有用であり得、これは、例外ハンドラ・コードが、前の処理に復帰する前にメイン・スタックからそれのデータを削除する際にあまり慎重である必要がなくないことを意味するので、例外ハンドラ・コードの開発を簡略化する。
【0037】
レガシー・アーキテクチャでは、上記で説明された不一致の例外エントリ・イベント及び復帰イベントに関連するセキュリティ問題は、少なくとも1つの、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの例外エントリ遷移に応答して、少なくとも1つのメイン・スタック・データ構造のうちの1つが、スレッド・モードでの処理への後続の例外復帰遷移に応答してアーキテクチャ状態データをスタック解除するために使用されるべきであることを示すようにスタック選択値を更新することによって、代わりに対処され得る。スレッド・モードへの復帰におけるスタック解除に、セキュア・プロセス・スタックの代わりにメイン・スタックを使用することを強制することによって、これは、攻撃がしかけられ、したがって攻撃が検出され得るときに、他の完全性検査を失敗させ得る。
【0038】
上記で説明された遷移無効インジケータを使用することの利点は、スレッド・モードで動作するプロセスに、いくつかの例外復帰イベントに応答してメイン・スタック・データ構造を使用することを強制する必要がないことであり、これは、スレッド・モード及びセキュアなドメインで実行するいくつかのセキュアなライブラリについて、ライブラリが、メイン・スタック・データ構造を使用する必要があることもあれば、プロセス・スタック・データ構造を使用する必要があることもあることを意味し、これは、管理することをより難しくすることがある。遷移無効インジケータを使用すると、もはやメイン・スタック・データ構造において使用するためにスレッド・モードを切り替えるようにスタック選択値を更新する必要はなく、したがって、セキュアなライブラリはプロセス・スタックを一貫して使用することができ、これは、セキュアなドメインでのソフトウェア・ライブラリの管理を簡略化することができる。
【0039】
しかしながら、(スタック選択値が更新されたということに依拠し得る)レガシー・コードとの適合性のために、構成インジケータは、構成インジケータが第2の値を有するとき、スタック選択値がレガシー・アーキテクチャの場合のように更新され得、構成インジケータが第1の値を有する場合、遷移無効インジケータが上記で説明されたように設定され得るように、与えられ得る。これは、新しいコードとレガシー・コードの両方が意図されるように動作することができることを保証する。
【0040】
上記で説明された少なくとも1つのタイプの例外復帰条件に加えて、少なくとも1つの他のタイプのイベントについて、例外制御回路は、遷移無効インジケータが設定されたとき、障害のシグナリングをトリガし得る。たとえば、遷移無効インジケータが設定されたとき、以下のイベントのうちのいずれか1つ又は複数も、障害のシグナリングをトリガし得る。
●あまりセキュアでないドメインでの処理からセキュアなドメイン及びスレッド・モードでの処理への関数呼出し(function call)。これは、不一致のスタック・フレームのスタック解除をトリガするための予想される例外復帰遷移の代わりに関数呼出しを使用することを試み得る攻撃者から保護するのを助けることができる。
●あまりセキュアでないドメインでの処理からセキュアなドメイン及びスレッド・モードでの処理への関数復帰。これは、不一致のスタック・フレームのスタック解除をトリガするための予想される例外復帰遷移の代わりに関数復帰を使用することを試み得る攻撃者から保護するのを助けることができる。
●セキュアなドメイン及びスレッド・モードでの命令の処理。いくつかのイベントのみが危険であることがあり得るが、いくつかの実装形態は、危険を引き起こし得るイベントを検出するための特定の回路論理を与えるのではなく、代わりに、遷移無効インジケータが設定されたときに命令がセキュアなドメイン及びスレッド・モードで実行される場合、単に障害をトリガし得る。
●スレッド・モードで処理され、あまりセキュアでないドメインからセキュアなドメインへの遷移に関連するとき、セキュアなドメインへの有効なエントリ・ポイントを示すセキュア・ゲートウェイ・データ処理命令。いくつかのアーキテクチャは、セキュアなドメインへの関数呼出しが、関数呼出しの後に実行される第1の命令がセキュア・ゲートウェイ・データ処理命令以外の命令である場合、障害をトリガすることを必要とし得る。セキュア・ゲートウェイ・データ処理命令自体が、様々な検査を実施するようにセキュリティ検査ハードウェアをトリガするように命令デコーダを制御することができる。したがって、遷移無効インジケータの検査は、セキュア・ゲートウェイ・データ処理命令のために実施される検査の一部として含まれ得る。
●セキュアなドメインとスレッド・モードとの組合せにあるとき、処理回路にとってアクセス可能なセキュア・プロセス・スタック・ポインタへの、セキュアなドメインとスレッド・モードとの組合せへの遷移に続く、第1のアクセス。
所与のアーキテクチャ実装形態は、これらのオプションのうちのいずれか1つ又は複数をサポートし得る。これらのシナリオにおいて障害をトリガすることによって、これはまた、前の例外エントリ遷移が関連のあるスタック・フレームに完全性署名を保存しなかった場合の検出を可能にするために、セキュアでない(non-secure)スレッド・モードからのセキュア・スレッド・モードへの関数復帰又はあまりセキュアでないスレッド・モードからセキュア・スレッド・モードへの関数呼出しを使用する攻撃者など、他の潜在的攻撃から保護することができる。
【0041】
命令の実行のための命令実行環境を与えるようにホスト・データ処理装置を制御するための対応するコンピュータ・プログラムが与えられ得る。コンピュータ・プログラムは、処理プログラム論理と、メモリ・アクセス検査プログラム論理と、例外制御プログラム論理とを含み得、それらは、機能において、上記で説明された処理回路、メモリ・アクセス検査回路及び例外制御回路に対応する。そのようなシミュレータ・コンピュータ・プログラムは、実際のハードウェア装置によって与えられるものと同様の命令環境を、シミュレータ・コンピュータ・プログラムを実行しているホスト・コンピュータにおいてこれらの特徴を与える実際のハードウェアがないことがあっても、シミュレータ・コンピュータ・プログラム上で実行するソフトウェアに提示し得る。上記で説明されたハードウェア・アーキテクチャの機能は、命令のセット又はデータ構造など、プログラム論理を与えることによってエミュレートされ得、これは、ハードウェアにおいて与えられた上記で説明された例外制御回路を実際に有する装置上で達成される結果に適合する様式で、一般的なホスト・コンピュータが、上記で説明された例外ハンドリング・サポートをもつ装置上での実行を対象とするコードを実行することを可能にする。ホスト・データ処理装置を制御するためのシミュレータ・コンピュータ・プログラムは、記憶媒体に記憶され得る。この記憶媒体は、非一時的記憶媒体であり得る。
【0042】
図1は、メモリ・システム6からフェッチされた命令に応答してデータ処理を実施するための処理回路4を含むデータ処理システム2の一実例を概略的に示す。メモリ・システム6は、キャッシュ(たとえば、1つ又は複数のレベルのデータ・キャッシュ及び/又は命令キャッシュ)並びにメイン・メモリを含み得る。処理回路4は、たとえば、メモリ・システム6から実行されるべき命令をフェッチするためのフェッチ・ステージ8と、データ処理を実施するように残りのパイプライン・ステージを制御するための制御信号を生成するために、フェッチされた命令を復号するための復号ステージ10と、データ処理動作を実施するために、復号された命令を実行するための実行ステージ12とを含む、いくつかのパイプライン・ステージを含む処理パイプラインを含む。パイプライン4によって処理される命令のための入力オペランドを記憶するためのレジスタ14が与えられる。レジスタ14は、整数値を記憶するための汎用(整数)レジスタ16と、浮動小数点値を記憶するための浮動小数点レジスタ18と、処理回路4による命令の実行及び例外ハンドリング、セキュリティ検査などの他の動作を制御するための制御パラメータを記憶するための制御レジスタ20とを含む、いくつかのタイプのレジスタを含む。
【0043】
図1に示されているパイプライン・ステージが簡略表現であり、レジスタ・リネーミングを実施するためのリネーム・ステージ、実行を待つ命令を待ち行列に入れ、それらの命令の必要とされるオペランドが利用可能であるとき、実行のためにそれらの命令を発行するための発行ステージ、及び命令のコミットメントをハンドリングし、結果をレジスタ14に書き戻すための書き戻しステージなど、他のタイプのパイプライン・ステージも与えられ得ることが諒解されよう。パイプラインは、イン・オーダー又はアウト・オブ・オーダー・パイプラインであり得る。
【0044】
システム2は、メモリ・アドレス空間の様々な領域について指定された属性データに基づいてメモリ・システム6へのアクセスが許可されるかどうかを検査するためのメモリ・アクセス検査回路22をも含む。メモリ・アクセス検査回路は、メモリ・アドレス空間の各それぞれの領域に関連するセキュリティ・ドメインを定義するセキュリティ・ドメイン定義データを記憶するためのセキュリティ属性ユニット(SAU:security attribute unit)24を含む。セキュリティ属性データに基づいて、セキュリティ属性ユニット24は、処理回路の動作の現在のセキュリティ・ドメインと、メモリ・アクセスのターゲット・アドレスを含む領域に関連するセキュリティ・ドメインとに依存して、メモリ・アクセスが可能にされるかどうかを検査し得る。他の実施例では、SAUは、セキュリティ・ドメイン定義データを直接記憶しないが、代わりに、メモリ・アクセス検査を実施するために、他の場所に記憶されたセキュリティ・ドメイン定義データにアクセスし得る。いくつかのシステムでは、セキュリティ・ドメイン定義データは、メモリ・システム6に記憶され得るか、又はシステム2中の他の場所における構成レジスタであり得る。処理回路4は、動作の現在のセキュリティ・ドメインで動作し得、動作の現在のセキュリティ・ドメインは、概して、(たとえばドメイン間の遷移をハンドリングするとき、いくつかの例外があり得るが)現在実行されている命令のアドレスに関連するセキュリティ・ドメインに対応し得る。命令が、あるドメイン中にあるものとしてSAU24によって指定された領域中のアドレスから、異なるドメインに関連する領域中のアドレスに分岐したとき、これは、処理回路4が動作している現在のセキュリティ・ドメインの遷移をトリガし得る。概して、セキュアなドメインで動作している間、処理回路は、セキュアなドメインとあまりセキュアでないドメインの両方に関連するメモリ領域中のデータへのアクセスを有し得、あまりセキュアでないドメインで動作しているとき、処理回路は、あまりセキュアでないドメインに関連する領域中のデータへのアクセスを有し得るが、SAU24がセキュアなドメインに関連するものとして指定するアドレス空間の領域中のデータにアクセスすることを許可されないことがある。これは、あまりセキュアでないドメインで動作するコードからの無認可のアクセスからの機密データの保護を可能にする。
【0045】
また、メモリ・アクセス検査回路は、メモリ・システム6へのメモリ・アクセスがアクセス許可を満たすかどうかを検査するメモリ保護ユニット26を含み得、アクセス許可は、たとえば、どの特権レベルの処理回路4がメモリの所与の領域にアクセスすることを可能にされるかを指定し得るか、又は、アドレス空間のメモリ領域が、読取り動作と書込み動作の両方によってアクセスされ得るのか、書込みが禁止された読取り専用領域であるのかを指定し得る。MPU26によって使用されるアクセス許可は、たとえば、(ハイパーバイザ又はオペレーティング・システムなどの)より特権的なプロセスによって、(アプリケーションがアクセスすることを可能にされるなどの)あまり特権的でないプロセスがメモリのどの領域に、及びどのように(読取り専用又は読取り/書込み)を制御するために、指定され得る。MPU26によって与えられる許可は、SAU24によって与えられるものに直交し得、したがって、所与のメモリ・アクセスが可能にされるために、それは、MPU26とSAU24の両方について定義されたアクセス許可に基づいて検査をパスするべきである。MPU26は図1では単一のエンティティとして示されているが、いくつかの実例では、別個のセキュアなMPU26及びあまりセキュアでないMPU26が与えられ得、その各々がセキュリティ・ドメインのうちの1つに関連し、したがって、異なるメモリ・アクセス許可は、現在のドメインがセキュアなドメインであるのかあまりセキュアでないドメインであるのかに依存して、メモリの所与の領域について指定され得る(たとえば、領域は、あまりセキュアでないドメインでは読取り専用であり得るが、セキュアなドメインでは読取りと書込みの両方が可能であり得る)。
【0046】
したがって、図2に示されているように、処理回路4は、少なくともセキュアなドメイン(S)とあまりセキュアでないドメイン(NS)とを含むいくつかのセキュリティ・ドメインのうちの1つでのデータ処理を実施することをサポートし得る。図2は2つのセキュリティ・ドメインのみをもつシステムを示すが、異なるレベルのセキュリティに関連する3つ又はそれ以上のドメインを与えることが可能である。
【0047】
また、所与のセキュリティ・ドメイン内で、図2に示されているように、処理回路は、例外処理のためのハンドラ・モード(H)とバックグラウンド処理のためのスレッド・モード(T)とを含むいくつかのモードのうちの1つでのデータ処理を実施し得る。例外エントリ遷移及び例外復帰遷移、並びにそのような遷移中のアーキテクチャ状態の保存/復元を含む、例外ハンドリング動作を制御するために、例外制御回路28が与えられ得る。専用ハンドラ・モードHへの例外ハンドリングの分離は、どのレジスタが処理回路によってアクセスされることを可能にされるかの管理を簡略化するために有用であり得る(たとえば、例外ハンドリングのために使用されるいくつかのレジスタは、ハンドラ・モードHではアクセス可能であり得るが、スレッド・モードTではアクセス可能でないことがある)。概して、ハンドラ・モードHで動作しているとき、処理回路4は、デフォルトで、メモリへのアクセスが、最も特権的でないレベル以外の、あるレベルの特権レベルに従って制御されるように、より特権的な動作モードを有すると仮定され得、スレッド・モードTでは、処理回路は、制御レジスタ20に記憶された他のアーキテクチャ状態に依存していくつかの異なる特権レベルのうちの1つを有し得る。
【0048】
したがって図2に示されているように、処理回路4が動作しているセキュリティ・ドメインとモードとの組合せは、処理が処理回路4によってどのように行われるかの態様を決定し得る。図2は、以下を含む、これらのモードの4つの異なる組合せを示す。
●セキュア・スレッド・モード(セキュアなドメインとスレッド・モードとの組合せの略記)
●あまりセキュアでないスレッド・モード(あまりセキュアでないドメインとスレッド・モードとの組合せ)
●セキュア・ハンドラ・モード(セキュアなドメインとハンドラ・モードとの組合せ)及び
●あまりセキュアでないハンドラ・モード(あまりセキュアでないドメインとハンドラ・モードとの組合せ)。
以下で説明されるように、例外条件及び例外復帰条件に応答して、行われるアクションは、セキュリティ・ドメインとモードとのこれらのそれぞれの組合せの間で行われている特定の遷移に依存し得る。
【0049】
図3は、処理システムのレジスタ14のうちのいくつかを示す。この表現が、与えられ得る可能なレジスタのすべてを示すとは限らず、多くの他のレジスタも与えられ得ることが諒解されよう。図3に示されているように、レジスタ14は、汎用レジスタ16と、浮動小数点レジスタ18と、いくつかの制御レジスタ20(制御レジスタのうちのいくつかのみが図3に示されているが、他のレジスタも与えられ得る)とを含む。この実例では、R0~R15と標示された、与えられた16個の汎用レジスタと、S0~S31と標示された32個の浮動小数点レジスタとがある。
【0050】
汎用レジスタR0~R15のうち、レジスタR0~R12は、算術又は論理命令のための入力オペランド、或いはメモリ・システム6にアクセスするためのロード/ストア命令のためのアドレスを導出するために使用されるオペランドなど、汎用オペランドを記憶するために使用される。そのような汎用オペランドのために汎用レジスタR13~R15を使用することが可能であり得るが、それらはまた、他の制御関数を提供する。
【0051】
レジスタR15は、処理回路4が達したプログラムの現在のポイントの指示を与えるプログラム・カウンタを記憶するプログラム・カウンタ(PC:program counter)レジスタとして使用される。プログラム・カウンタ・レジスタは、どの命令をメモリ・システムからフェッチすべきかを決定するために、フェッチ・ステージ8によって使用され得る。
【0052】
レジスタR14は、関数が呼び出されたときに関数復帰アドレスを記憶するために使用されるリンク・レジスタ(LR:link register)として使用され、したがって、その関数に関連する処理が完了したとき、リンク・レジスタ中のアドレスは、プログラム・フローを関数呼出し命令の後の次の命令にリダイレクトするために使用され得る。また、リンク・レジスタは、対応する例外復帰条件に遭遇したとき、アーキテクチャ状態のスタック解除を制御するための情報を与える例外復帰値を記憶するために、例外の発生において使用され得る。これは以下でより詳細に説明される。
【0053】
レジスタR13は、メモリにおけるスタック・データ構造のアドレスを示すスタック・ポインタを与えるスタック・ポインタ・レジスタとして使用される。スタック・データ構造は、例外条件が生じたときにアーキテクチャ状態を保存するために使用され、例外復帰条件が生じたときにアーキテクチャ状態を復元するために使用され得る。図3に示されているように、レジスタR13は、各々がレジスタ指定子R13を使用してアクセス可能な、いくつかの異なる物理レジスタがハードウェアにおいて与えられるようにバンク(bank)され、その特定のバンク・レジスタ(banked register)は、処理回路の現在のセキュリティ・ドメイン及びモードに依存してR13が指定されたときに選択される。
【0054】
たとえば、バンク・スタック・ポインタ・レジスタは、セキュア・メイン・スタック・ポインタ・レジスタ(MSP_S)と、セキュア・プロセス・スタック・ポインタ・レジスタ(PSP_S)と、あまりセキュアでないメイン・スタック・ポインタ・レジスタ(MSP_NS)と、あまりセキュアでないプロセス・スタック・ポインタ・レジスタ(PSP_NS)とを含み得る。概して、セキュア・スタック・ポインタ・レジスタMSP_S及びPSP_Sは、セキュアなドメインSにあるときは処理回路4にとってアクセス可能であるが、あまりセキュアでないドメインNSにあるときはアクセス不可能である。あまりセキュアでないスタック・ポインタ・レジスタMSP_NS及びPSP_NSは、あまりセキュアでないドメインとセキュアなドメインの両方でアクセス可能である。概して、プロセス・スタック・ポインタPSP_S又はPSP_NSは、スレッド・モードT内で使用されることを予想され、メイン・スタック・ポインタMSP_S又はMSP_NSは、ハンドラ・モードH内で使用されることを予想される。ハンドラ・モード及びスレッド・モードそれぞれのための別個のメイン・スタック及びプロセス・スタックの提供は、それが、例外ハンドラがメイン・スタック上に残し得るデータが、概して、例外復帰の後にスレッド・モードで稼働するスレッドにとってアクセス可能でないことを意味するので、例外ハンドラ・コードの開発をより単純にすることができる。これは、例外ハンドラがメイン・スタック・データ構造からそれのデータのすべてをクリアするための命令を含む必要がないので、例外ハンドラ・コードの開発を簡略化することができる。しかしながら、以下でより詳細に説明されるように、スレッド・モードTでのいくつかのプロセスがメイン・スタック・ポインタを使用することが可能であり、制御レジスタ32に記憶されたスタック・ポインタ選択値30が、スレッド・モードTにあるときにメイン・スタック・ポインタが使用されるべきであるのかプロセス・スタック・ポインタが使用されるべきであるのかを制御する。したがって、どのスタック・ポインタが使用されるべきであるかは、現在のモード(スレッド又はハンドラ)と現在のドメイン(セキュア又はあまりセキュアでない)との組合せだけでなく、スタック・ポインタ選択値30にも基づいて決定され得る。
【0055】
概して、ハンドラ・モードHで動作する例外ハンドラの本体又はスレッド・モードTで動作するスレッド内では、セキュア・スタック・ポインタ又はセキュアでないスタック・ポインタの選定は、処理回路4がコードを実行している現在のセキュリティ・ドメインに依存し得る。例外エントリ及び復帰について、状態のスタック(stacking)及びスタック解除は、例外が生じる前に稼働していたバックグラウンド・コードのセキュリティ・ドメインに関連するスタック・ポインタによって識別されるスタックから実施される。
【0056】
図3に示されているように、制御レジスタ20は、処理回路がレガシー命令セット・アーキテクチャに従って動作するべきであるのか命令セット・アーキテクチャのより新しいバージョンに従って動作するべきであるのかを指定し得るアーキテクチャ構成インジケータ36を含む構成データを記憶し得る構成レジスタ34を含み得る。以下で説明されるように、これは、例外エントリ条件に対する処理回路の応答に影響を及ぼし得る。
【0057】
また、制御レジスタ20は、セキュア・スタック・ポインタMSP_S及びPSP_Sによってポイントされるセキュア・スタック・データ構造が増大することができる程度に対する限界を与える限界アドレス40を指定するために使用される1つ又は複数のセキュア・スタック・ポインタ限界レジスタ38、39を含み得る。この実例では、2つの限界レジスタがあり、39がセキュア・メイン・スタック・ポインタMSP_Sのためのものであり、38がセキュア・プロセス・スタック・ポインタPSP_Sのためのものである。各限界レジスタ内の限界アドレスは、スタック・データ構造がどのくらい拡張することができるかを制限するために使用され得る。40は、PSPLIM_Sレジスタ38のための限界アドレスがどのように配置されるかを示す。処理回路又は例外制御回路28が、メイン又はプロセス・セキュア・スタック・データ構造が対応する限界レジスタ38、39中の限界アドレスを超えて拡張したことを検出した(又は、限界アドレスを超えた値にスタック・ポインタを更新する試みを検出した)場合、例外制御回路28は、シグナリングされるように障害をトリガし得、これは、それ自体で例外をトリガし得、次いで、例外ハンドラが、セキュリティを保証するために何らかの復元アクション又は他の対策をとることによって障害に応答し得る。これは、スタック・データ構造が、他のデータのために使用される領域に拡張し、これにより、それらの他の領域中のそのデータを破損することができるように、極めて多くの例外を引き起こすことによって又は極めて多くの関数を呼び出すことによって攻撃者がセキュリティ対策を破ることができないことを保証するために有用であり得る。
【0058】
図3に示されているように、セキュア・プロセス・スタック・ポインタ限界レジスタ38について、このレジスタは、限界アドレス40に加えて、セキュア・プロセス・スタック・ポインタ・レジスタPSP_Sへのアクセスを一時的に無効にするために使用され得るセキュア・プロセス・スタック・ポインタ無効インジケータ42をも指定し得る。そのような無効インジケータは、メイン・スタック限界レジスタ39中に含まれないことがある。セキュア・プロセス・スタック・ポインタ無効インジケータ42は、以下で説明されるようにセキュリティを改善するためにいくつかの例外復帰遷移を無効にするために使用され得る遷移無効インジケータの一実例である。
【0059】
例外エントリ及び復帰をハンドリングすることの一態様は、アーキテクチャ状態のスタック及びスタック解除である。例外条件が生じたとき、レジスタ14に記憶されたアーキテクチャ状態の一部はメモリに保存される必要があり得、したがって、例外に入った後に実行された例外ハンドラがそれらのレジスタを上書きする場合でも、レジスタの前のコンテンツは、その後、例外が生じる前に実施されていた処理に復帰することが望まれるとき、メモリから復元され得る。図3に示されているバンク・スタック・ポインタ・レジスタのうちの1つによってポイントされるスタック・データ構造は、この状態を保存するために使用され得る。
【0060】
性能の理由で、そのような例外エントリ・イベントに応答して保存される必要があり得るレジスタを「呼出し側」レジスタ及び「被呼出し側」レジスタと呼ばれる2つのグループに分割することが、有用であり得る。呼出し側レジスタは、ハードウェアにおいて実装される例外制御回路28がスタックへの保存に対する責任を有するレジスタである。したがって、例外ハンドラのソフトウェアが、スタック・データ構造に呼出し側レジスタを保存するための命令を含む必要はない。
【0061】
図4に示されているように、呼出し側レジスタは、汎用レジスタのサブセットを含み得る。この実例では、呼出し側状態は、汎用レジスタR0、R1、R2、R3及びR12と、リンク・レジスタLR(R14)と、例外の処理の後に処理が復帰されるべきである復帰アドレスの指示と、条件付き命令の結果を制御するための条件コードを与え得るプログラム・ステータス・レジスタXPSRとを含む。これは、どのレジスタ状態が呼出し側レジスタ中に含まれ得るかの特定の一実例にすぎないことが諒解されよう。
【0062】
図4の右側部分にある基本スタック・フレームにおいて示されているように、浮動小数点レジスタ18のいずれも使用しないプロセスについて、基本スタック・フレームは、いくつかの整数レジスタ16又は制御レジスタ20及び復帰アドレスのみを含み得る。しかしながら、例外の前に実行するプロセスが浮動小数点レジスタ18をも使用する場合、図4の左側の拡張されたスタック・フレームにおいて示されているように、呼出し側レジスタは、浮動小数点レジスタ18のサブセットS0~S15をも含み得る。浮動小数点コンテキストは、浮動小数点演算の処理を制御するために使用される浮動小数点状態制御レジスタFPSCRなど、追加の制御レジスタをも含むことができる。
【0063】
図4の中間部分において示されているように、拡張された浮動小数点スタック・フレームが、追加の浮動小数点コンテキストのために予約された空間を含むが、例外エントリをハンドリングする時間においてスタック上のこの予約された空間に保存される浮動小数点コンテキストを実際は有しないことも可能である。代わりに、緩慢な(lazy)浮動小数点コンテキスト保存が使用され得、ここで、例外に応答して、空間は、例外エントリに続いて生成される新しいスタック・ポインタが予測可能であるようにスタック上に予約されるが、この予約された空間への浮動小数点コンテキストの実際の保存は、浮動小数点状態が例外に続いて初めて必要とされるときまで延期される。このようにして、浮動小数点コンテキストが例外ハンドラによってアクセスされる前に後続の例外復帰が生じた場合、浮動小数点レジスタ18からの浮動小数点コンテキストをメモリに保存する際に費やされる時間及びエネルギーは、回避され得る。
【0064】
したがって、図4に示されている例示的なスタック・フレームのすべてが、呼出し側レジスタから保存された状態を含むが、被呼出し側レジスタに関連する状態を含まない、呼出し側レジスタ・スタック・フレーム(第1のスタック・フレーム)の一実例である。
【0065】
呼出し側スタック・フレームが例外イベントに応答して例外制御回路28によってスタックに保存された後に、例外ハンドリング・コードの実行が開始し得、次いで、例外ハンドラ・ソフトウェアは、例外ハンドラ・ソフトウェアが、その実行中に追加の被呼出し側レジスタからの状態を上書きすることを知っている場合、この状態をスタック上に保存し得る。しかしながら、例外ハンドラによるこの状態保存は、例外ハンドラ・コードにおいて与えられるロード/ストア命令に応答して関連のあるデータをメモリに保存するように処理回路4のロード/ストア・ユニットを制御することによって実施され、これは、例外制御回路28がハードウェアにおいてスタックを制御した場合よりも遅くなり得る。しかしながら、例外に入った後に実行するソフトウェアが、どのレジスタが保存される必要があるかに影響を及ぼすことができるように、呼出し側レジスタ状態と被呼出し側レジスタ状態との間の区分を可能にすることは、有益であり得る。例外ハンドラが特定の被呼出し側レジスタ(たとえば、汎用レジスタR7又は浮動小数点レジスタS27)に決してアクセスしない場合、例外ハンドラは、対応するアーキテクチャ状態を保存する必要がなく、例外制御回路28及びハードウェアにおいてこの状態保存を行ったことに関連するエネルギー及び時間も回避された。例外ハンドラのためのコードのライター、又はそのようなコードのコンパイラは、ソフトウェアにおける追加の状態保存が必要とされる見込みを低減するために、追加の被呼出し側レジスタを使用する前に呼出し側レジスタを最初に使用するように奨励され得る。
【0066】
しかしながら、例外エントリが、セキュアなドメインからあまりセキュアでないドメインへの遷移を引き起こし、例外の前にスレッド・モードで実施されている元のバックグラウンド処理が、セキュアなドメインでのことであった場合、呼出し側レジスタのみが例外制御回路28によってメモリに保存される場合、これは、被呼出し側レジスタを、最近の例外の後に実行されるべきあまりセキュアでない例外ハンドラにとってレジスタ・バンク14内でアクセス可能なままにし得る。これは、被呼出し側レジスタが、あまりセキュアでない例外ハンドラがアクセスすることをSAU24が通常ならば防ぐ、メモリ・アドレス空間のセキュアな領域から導出された情報を含むことができるので、望ましくないことがある。
【0067】
したがって、バックグラウンド処理がセキュアなドメインで前に実施された、セキュアなドメインからあまりセキュアでないドメインへのいくつかの遷移について、例外制御回路28はまた、呼出し側レジスタの保存に加えて、関連のあるスタック・データ構造に被呼出し側レジスタを保存し得、(呼出し側レジスタと被呼出し側レジスタとを含む)保存されていたレジスタのコンテンツをクリアし得る。したがって、ハードウェアにおいて追加の状態保存を実施することによって、これは、被呼出し側レジスタを通常保存するソフトウェアが、例外が生じる前にこれらのレジスタに記憶された潜在的にセキュアな情報へのアクセスを獲得することができないことを意味する。
【0068】
したがって、いくつかの例外エントリ遷移について、図4に示されている呼出し側スタック・フレームを記憶するのではなく、代わりに、図5に示されている第2のスタック・フレームが(例外制御回路28によるハードウェア制御下で、すなわち、明示的ロード/ストア命令が処理回路4によって実行されることを必要とすることなしに)保存され得る。この場合も、図5の左側部分において示されているように、浮動小数点コンテキストが必要とされない場合、スタック・フレームは、浮動小数点状態の保存を省略し得る。この場合、第2のスタック・フレームは、図4に示されている呼出し側状態と、また、レジスタR4~R11を含む追加の被呼出し側状態との両方を含む。ハードウェアによって保存される追加の状態は、以下でより詳細に説明される完全性署名50をも含み得る。代替的に、浮動小数点コンテキストも保存される必要がある場合、図4の左側実例において示されている呼出し側状態に加えて、拡張された第2のスタック・フレームは、図5の右側において示されているように、追加の被呼出し側浮動小数点レジスタS16~S31をも含む。図5には示されていないが、いくつかの実施例は、被呼出し側浮動小数点レジスタ及び呼出し側浮動小数点レジスタのための空間を予約し、図4について説明されたのと同じやり方でそれらのレジスタを緩慢に(lazily)保存し得る。
【0069】
したがって、図4の実例に示されている基本呼出し側スタック・フレームは、第1の例外スタック・フレームの一実例であり得、被呼出し側レジスタに関連する追加のアーキテクチャ状態をも含む図5のスタック・フレーム実例は、第1の例外スタック・フレームから省略されるレジスタからのアーキテクチャ状態データのサブセットを含む第2の例外スタック・フレームの一実例であり得る。例外エントリ遷移において、例外制御回路は、たとえば、例外の前及び後に実施される処理に関連するセキュリティ・ドメイン、又は制御レジスタ20に関連する他の状態情報に依存して、第1及び第2の例外スタック・フレームのうちのどちらがハードウェアによって保存されるべきであるかを選択し得る。浮動小数点コンテキストが保存されるか否か、及び緩慢な浮動小数点コンテキスト保存オプションが使用されるかどうかは、制御レジスタ20のうちの1つにおいて指定された制御パラメータに依存し得る。
【0070】
完全性署名50は、呼出し側状態と被呼出し側状態の両方が例外制御ハードウェア28によって保存されるとき、第2の例外スタック・フレーム中に含まれるが、図4に示されている第1の例外スタック・フレームからは消失している。完全性署名50は、実行可能アドレス、たとえば、そこから命令をフェッチする試みが行われた場合に障害がシグナリングされることを引き起こすアドレスに対応しない特殊な予約済み値を有し得る。この完全性署名は、ハードウェアがセキュアなドメインとあまりセキュアでないドメインとの間の区分をエンフォースすることによって与えられるセキュリティ保護を免れることを試みるために処理回路上でしかけられ得るいくつかの形式の攻撃を検出するために使用され得る。攻撃のための1つの可能な手段は、攻撃者が、例外の処理に入るために例外エントリ遷移を実施することを試みるが、次いで、後で、関数復帰遷移を実施することなど、例外エントリから復帰することが予想されるものへの異なるタイプの復帰遷移を捏造することであり得る。署名50は、関数復帰が行われた場合に関数復帰アドレスを記憶することが予想されるスタック・フレーム上の位置に位置し得、完全性署名50は実行可能アドレスに対応しない特殊な値を有し得るので、これは、有効な関数復帰アドレスが署名に一致することができないことを意味する。したがって、復帰アドレスが完全性署名50に一致することが関数復帰において検出された場合、それは、関数復帰を実施するために使用されているスタック・フレームが、例外エントリ・イベントに応答してスタックに実際に保存されたことを意味するので、障害がトリガされ得、これは、攻撃が実施されているというインジケータであり得る。また、被呼出し側レジスタに関連する追加のアーキテクチャ状態がスタック上に存在する例外から復帰することにおいて、セキュリティ検査の一部は、署名の欠如が例外エントリ及び復帰イベントの不適切なシーケンスがトリガされたことを示し得るので、完全性署名50に対応するスタック中の関連のあるオフセットにおける値が予想される値を有するかどうかを検査していることがある。
【0071】
したがって、スタック上の完全性署名の提供は、いくつかの例外エントリ遷移について実施され得る保護アクションの一実例である。特に、スタック上への完全性署名のこの保存は、少なくとも1つの形式の、セキュア・スレッド・モードからあまりセキュアでないハンドラ・モードへの例外エントリ遷移について生じ得る。しかしながら、完全性署名50は、セキュアなドメインからの、同じくセキュアなドメインでの例外ハンドラへの例外エントリを実施するとき、保護対策が必要とされないことが予想され得るので、図4に示されているように基本呼出し側スタック・フレーム中に含まれない。ハードウェアにおいて(完全性署名を含む)被呼出し側状態を回避することは、スレッド・モードでのセキュア・バックグラウンド処理の処理中にセキュアな例外が生じた場合、割込みハンドリング・レイテンシを低減するのを助けることができ、次の例外復帰が前のセキュア・バックグラウンド処理に単に復帰するように、セキュアな例外の処理中に他の例外が生じない。
【0072】
しかしながら、図6に示されているように、セキュア・スレッドからあまりセキュアでないハンドラ・モードへの例外エントリ遷移のための保護アクションの省略は、時々、攻撃者が活用することができる手段を与えることがある。図6は、イベントの以下のシーケンスを示す。
1. 割込み(IRQ1)が、セキュア・ハンドラ・モードへの遷移を引き起こす。呼出し側の保存されるレジスタは、例外制御ハードウェア28によって(PSP_Sによって示される)セキュア・プロセス・スタックに自動的に保存される。割込みハンドリング・レイテンシを低減するために、被呼出し側の保存されるレジスタは保存されず、したがって、図4に示されているタイプの第1の例外スタック・フレームが保存される(完全性署名を省略する)。これは、ターゲット状態がセキュアであるので許容可能であり、したがって、それは、これらのレジスタを破損しないと確信され得る。
2. 別の割込み(IRQ2)が、セキュアでないハンドラ・モードへの遷移を引き起こす。この時点で、ハードウェアは、遷移がセキュアでない状態へのものであるので、呼出し側の保存されるレジスタと被呼出し側の保存されるレジスタの両方を保持し、これは、セキュア値をハンドリングすると確信され得ない。したがって、図5に示されているタイプの第2の例外スタック・フレームが、MSP_Sによって示されるセキュア・メイン・スタックに保存される。メイン・スタックは、この例外がハンドラ・モードでの処理中に生じたとき、使用される。
3. セキュアでないドメインに対する制御をもつ攻撃者は、次いで、(IRQ2から復帰するためのセキュア・ハンドラ・モードへの予想される例外復帰の代わりに)セキュア・スレッド・モードへの例外復帰又は関数復帰を捏造することができる。ステップ1においてセキュア・プロセス・スタックに保存されたスタック・フレームは、そのスタック上に完全性署名を有しないので、セキュア・スレッド・モードへの復帰におけるスタック解除が、ステップ1においてセキュア・プロセス・スタックに保存された、呼出し側のみの例外スタック・フレームをスタック解除することを試みる場合、セキュリティ違反の可能性がある。
【0073】
レガシー・アーキテクチャでは、この問題は、スレッド・モードが、その後、スレッド・モードで通常使用されるプロセス・スタック・ポインタ(PSP:process stack pointer)の代わりに、スタック解除動作のためにメイン・スタック・ポインタ(MSP:main stack pointer)を使用するべきであることを示すように、ステップ1において、スタック・ポインタ選択値30を設定することによって、対処され得る。これは、攻撃者がステップ3において偽例外復帰を捏造する場合、スタック解除は、メイン・スタックからのものであり、保護されていないプロセス・スタックからのものでないことを意味する。メイン・スタック上のスタック・フレームは、実際は、(ハンドラ・モードへのものである)IRQ2の復帰のためのものであり、スレッド・モードへの復帰のためのものではないので、他の完全性検査は失敗し得る(たとえば、実際に復帰されるモードと、スタック・フレームがスタック解除されるときに復帰されることを意図されるモードであるとしてスタック解除状態で示されるモードとの間の不一致が検出され得る)。したがって、攻撃は検出され得る。
【0074】
しかしながら、IRQ1のハンドリング中にスタック・ポインタ選択値30を切り替えることは、攻撃を回避することができるが、この手法の欠点は、これが、スレッド・モードがプロセス・スタックを一貫して使用する代わりにメイン・スタックを使用する必要が時々あり得ることを意味することである。それぞれ、ハンドラ・モード及びスレッド・モードでのメイン・スタック及びプロセス・スタックのより一貫した使用を可能にすることが望ましいことがある。たとえば、図7に示されているように、ステップ1及び2におけるIRQ1及びIRQ2(図6の場合と同じ)に続いて、ステップ3においてスーパバイザ・コール(SVC:supervisor call)例外を介したあまりセキュアでないスレッド・モードにあるライブラリに対して実行が非特権的(deprivileged)であり、その場合、あまりセキュアでないライブラリが、ステップ4においてセキュアなドメイン内のセキュアなライブラリへのセキュアな関数呼出しを行う、有効な使用事例があり得る。セキュアなドメイン内のセキュアなライブラリの管理は、セキュアなライブラリが、スレッド・モードで動作しているときにプロセス・スタックを一貫して使用することができる場合、はるかに単純であり得る。対照的に、スタック・ポインタ選択値30が、図6に示されている攻撃を軽減するように上記で説明されたように更新される場合、これは、いくつかのセキュアなライブラリがメイン・スタックを使用することを、時々必要とし得る。スタックが使用されるこの一貫性のなさは、時々、性能の損失を引き起こすことがあるか、又は、セキュアなライブラリのソフトウェア開発をより複雑にすることがある。
【0075】
上記で説明された攻撃を軽減するための別の手法は、図3に示されている遷移無効インジケータ(セキュア・プロセス・スタック・ポインタ無効インジケータ)42を使用することであり得、遷移無効インジケータは、セキュア・プロセス・スタック・ポインタPSP_Sを使用不可能とマークするために使用され得る。図3の実例では、遷移無効インジケータ42はセキュア・プロセス・スタック・ポインタ限界レジスタ38において与えられるが、遷移無効インジケータ42はまた、セキュア・プロセス・スタック・ポインタ・レジスタPSP_S自体の未使用ビットにおいて(たとえば、アドレス整合制約により常に0である有効ビットを使用して)など、他のレジスタに入れられ得る。
【0076】
セキュア・スレッド・モードからセキュア・ハンドラ・モードへの少なくとも1つの例外エントリ遷移に応答して、例外制御回路28は、セキュア・スタック・ポインタ無効インジケータ42を所定の値(たとえば、1)に設定し得る。遷移無効インジケータが所定の値に設定されたときのセキュアなドメイン及びスレッド・モードでの処理への少なくとも1つのタイプの例外復帰遷移について、例外制御回路は、障害のシグナリングをトリガし得る。したがって、図6の攻撃実例の場合、無効インジケータ42はIRQ1に応答して設定され得、あまりセキュアでないハンドラ・モードからセキュア・スレッド・モードへの例外復帰又は関数復帰がステップ3において行われるときに依然として設定される場合、これは、攻撃者が、あまりセキュアでないハンドラ・モードからセキュア・スレッド・モードへの遷移について予想されるスタック・フレームと、ステップ1においてセキュア・プロセス・スタック上に実際に保存されたスタック・フレームとの間の不一致を活用することを防ぐために、障害をトリガし得る。
【0077】
したがって、ロック・ビット42がアーキテクチャに追加され、これは、セキュア・プロセス・スタック(PSP_S)を使用不可能とマークする。プロセス・スタックがセキュア・スレッド・モード及びロック・ビット42セットによって使用されるときのセキュア・スレッド・モードへのエントリが、例外を起こす。これは、攻撃者が消失した完全性署名を活用することを試みることができる以下の3つの異なるイベントから保護する。
●呼出し側レジスタと被呼出し側レジスタの両方をスタック解除する例外復帰、たとえば、あまりセキュアでない状態からの例外復帰。
●あまりセキュアでないスレッド・モードからのセキュア・スレッド・モードへの関数復帰
●あまりセキュアでないスレッド・モードからセキュア・スレッド・モードへの関数呼出し。
【0078】
代替的に、いくつかの実装形態では、最後のオプションは緩和され得、したがって、あまりセキュアでないスレッド・モードからセキュア・スレッド・モードへの関数呼出しが図7中の使用事例を可能にするように許可され得る。
【0079】
スタック・ポインタ選択フラグ30がIRQ1に応答して更新されるアーキテクチャのために設計されたレガシー・コードが継続して正しく働くことをサポートするために、アーキテクチャ構成インジケータ36は、セキュア・スレッド・モードからセキュア・ハンドラ・モードへの遷移において、(IRQ1に応答してスタック・ポインタ選択フラグ30を更新することの)レガシー挙動が使用されるべきであるのか、(セキュア・プロセス・スタック・ポインタ無効インジケータ42を設定することの)より新しい挙動が使用されるべきであるのかを選択するために使用され得る。
【0080】
図8は、例外制御回路によってサポートされ得る例外エントリ遷移のいくつかの異なる形式を示す表である。表の最初の4つの列に示されているように、どの例外エントリ遷移が選択されるかは、例外エントリが生じる前に実施されているバックグラウンド処理に関連するセキュリティ・ドメイン及びモードと、バックグラウンド処理が、スレッド・モードについてのスタック・ポインタ選択値30によって示されるように、メイン・スタック・ポインタを使用していたのかプロセス・スタック・ポインタを使用していたのかと、例外条件自体に関連するセキュリティ・ドメインとに依存する。たとえば、生じた例外のタイプは、その例外がセキュアな例外であるのかあまりセキュアでない例外であるのかを暗示し得るか、又は、その例外が、どのセキュリティ・ドメインがその例外に関連するかを指定する追加の制御情報に関連し得る。プロセス・スタック・ポインタはバックグラウンド・モードがスレッド・モードである場合に使用されるにすぎないので、プロセス・スタック・ポインタを使用するハンドラ・モードで実施されるバックグラウンド処理に対応する遷移がないことに留意されたい。したがって、バックグラウンド・モードがハンドラ・モードである場合、表の行9~12の相当物はない。
【0081】
図8の表の第5及び第6の列は、異なる例外エントリ遷移の各々について、どのスタック・フレーム・フォーマットが使用されるかと、セキュア・プロセス・スタック・ポインタ無効インジケータ42に対して変更が行われるべきであるかどうかとを示す。
【0082】
行5~8、11及び12に示されている遷移について、実施されているバックグラウンド処理があまりセキュアでないドメインでのものであり、したがって、被呼出し側レジスタが保存されない場合は機密情報の損失の危険がないので、呼出し側の保存されるレジスタのみが保存される必要がある。
【0083】
行2、4及び10に示されている遷移について、バックグラウンド処理はセキュアなドメインでのものであり、例外のためのターゲット・セキュリティ・ドメインはあまりセキュアでないドメインであり、したがって、被呼出し側の保存されるレジスタの追加の状態保存が、これらのレジスタ中のデータがあまりセキュアでない例外ハンドラに漏洩されるのを防ぐために、ハードウェアにおいて例外制御回路28によって実施される。
【0084】
図8の行1、3及び9に示されている遷移について、アーキテクチャは、呼出し側レジスタが保存されることを必要とするにすぎないが、アーキテクチャは、被呼出し側レジスタが、所望される場合に同様に随意に保存されることを許可し得る。これは、システムが、呼出し側の保存されるレジスタと被呼出し側の保存されるレジスタの両方の保存を必要とするタイプの例外エントリ遷移を最初に実施しているが、次いで、被呼出し側レジスタを保存する間により優先度の高い例外が生じ、したがって、代わりに、被呼出し側レジスタが保存されることを必要としなかった異なる例外エントリが選択される場合、ハードウェアが、保存を停止させ、第1の例外に応答してすでに行われた被呼出し側レジスタの前の保存に関連する変更を元に戻さなければならないのではなく、被呼出し側レジスタを保存することを続けることが、より単純であり得るので、有用であり得る。リンク・レジスタR14に書き込まれる例外復帰値は、デフォルト・スタック・ルールに従い、呼出し側レジスタのみがスタック上にあるかどうか、又は、被呼出し側レジスタもスタック上に置かれているかどうかを示すように設定され得るフラグDCRSを含み得る。このフラグは、どんなスタック解除が実施される必要があるかを決定するために例外復帰を実施するときに検査され得、また、完全性署名に基づいてどんな完全性検査が実施されるべきであるかを決定するために使用され得る。リンク・レジスタに入れられたこの例外復帰値は、スタックのためにセキュアなスタックが使用されたのかあまりセキュアでないスタックが使用されたのか、スタックが実施された(及び対応する例外復帰が予想される)動作モードを示すフラグ、又は、スタック・フレームが標準の整数のみのスタック・フレームであるのか拡張された浮動小数点スタック・フレームであるのかを示すフラグなど、例外復帰中の参照のための他の情報をも指定することができる。他の情報も例外復帰値において示され得ることが諒解されよう。
【0085】
図8の右側の列に示されているように、例外エントリ遷移の大部分について、無効インジケータ42に対する変更は行われない。しかしながら、プロセス・スタック・ポインタを使用するスレッド・モードでのセキュア・バックグラウンド・コードからのハンドラ・モードでのセキュアな例外への遷移である、行9に示されている遷移について、呼出し側レジスタのみが保存され、被呼出し側レジスタが保存されない場合、無効インジケータ42が設定される。上記で説明された理由で、この遷移において、時々、被呼出し側レジスタも保存され得、そうである場合、無効インジケータ42は設定される必要がないことが可能である。たとえば、行9に示されている遷移は、図6に示されている割込みIRQ1に対応し得る。無効インジケータ42を設定することによって、これは、図6に示されている攻撃を回避するためにセキュリティを改善するのを助けることができるいくつかの形式の例外復帰遷移を無効にする。
【0086】
図9は、例外がとられる前に実施された前の処理に処理を復帰するために例外制御回路28によって使用され得るいくつかの異なる形式の例外復帰遷移を示す表である。表の最初の5つの列に示されているように、選択される特定の遷移は、例外に関連するセキュリティ・ドメインと、例外復帰が要求されたときのセキュリティ状態と、復帰されているスタック・ポインタと、復帰されているモードと、復帰されているセキュリティ状態とに依存する。どのスタック・ポインタ、モード及びセキュリティ状態が復帰されているかは、例外復帰イベントをトリガする例外復帰命令に関連する情報に基づいて決定され得る。例外復帰が要求されたときのセキュリティ状態は、たとえば、あまりセキュアでないドメインとセキュアなドメインとの間の遷移を生じていることがある例外がとられたため、関数呼出しがあり得るので、元の例外に関連するセキュリティ・ドメインと異なり得る。したがって、例外に関連するセキュリティ・ドメインはまた、例外がとられたときにリンク・レジスタ中の例外復帰値に入れられたフラグから決定され得る。図8中の例外エントリ遷移と同様に、ハンドラ・モードでプロセス・スタック・ポインタを使用することが可能でないので、図9では、行5、6、11、12、17及び18中の遷移の「ハンドラへの復帰」相当物はない。また、セキュアな例外から復帰する例外復帰遷移も禁止されているので、現在あまりセキュアでない状態にある間は、これらの遷移はない(すなわち、例外復帰が要求されたときのセキュリティ状態があまりセキュアでない行1~6のミラー(mirror)はない)。あまりセキュアでない例外がその後セキュアな関数を呼び出すことができ、それが次いで例外復帰をトリガするが、セキュアな例外について、セキュアな例外が、次いで、例外復帰をトリガするあまりセキュアでない関数を呼び出すことは、可能にされない。
【0087】
図9の第6の列は、例外復帰遷移の各々について、被呼出し側レジスタがこの例外に関連するスタック・フレーム上に存在することが予想されるかどうかと、したがって、スタック・フレーム上の特定のオフセットにおける値が予想される完全性署名値に一致するかどうかを決定するために完全性署名検査が必要とされるかどうかとを示す。例外復帰遷移の大部分について、被呼出し側レジスタが予想されず、完全性署名が検査されないか、又は、被呼出し側レジスタが予想され、完全性署名検査が実施されるかのいずれかである。しかしながら、(随意に、呼出し側レジスタに加えて被呼出し側レジスタを保存していることがある、図8の行1、3及び9からの例外エントリ遷移に対応する)行1、3及び5に示されている遷移について、被呼出し側レジスタが予想され、完全性署名が検査されるべきであるか否かは、例外がとられたときにリンク・レジスタ中の例外復帰値において保存されたDCRSフラグに依存し得る。
【0088】
図9の最終の列は、対応する例外復帰遷移について、セキュア・プロセス・スタック・ポインタ無効インジケータ42が設定される場合、障害をシグナリングする必要があるかどうかと、無効インジケータがすでに設定された場合、無効インジケータがクリアされるかどうかとを示す。セキュア・プロセス・スタック・ポインタ無効インジケータ42は、例外復帰遷移5についてクリアされ得、ここで、復帰はセキュアな例外からのものであり、セキュリティ・ドメインは、例外復帰が要求されるとき、セキュアであり、復帰されているスタック・ポインタはセキュア・プロセス・スタック・ポインタであり、復帰されているセキュリティ・ドメイン及びモードはセキュア・スレッド・モードである。これは、図6のIRQ1に続いて、対応する例外復帰が、介在する例外IRQ2なしに実施された場合に生じる復帰に対応する。これは、予想される挙動であり、したがって、セキュア・スレッド・モードへの予想される復帰が生じると、もはや無効インジケータ42を設定されたままにする必要はなく、したがって、これは、将来における障害の可能性を低減するためにクリアされ得る。
【0089】
しかしながら、図9に示されている遷移11及び17について、これらの遷移が試みられたときに無効インジケータ42が設定される場合、障害が起こされ得る。これは、これらの遷移について、図6に示されているものなどの例外のシーケンスに従って、プロセス・スタック・ポインタから読み取られるスタック・フレームが完全性署名を含まないことがあり、したがってこれがセキュリティの損失の危険を冒すことがあるという危険があるからである。
【0090】
図9に示されている例外復帰遷移11及び17は、遷移無効インジケータ42が設定された場合に障害がシグナリングされることを引き起こし得る唯一のイベントではない。遷移無効インジケータが設定されたとき、例外制御回路はまた、以下のイベント、すなわち、あまりセキュアでないドメインでの処理からセキュアなドメイン及びスレッド・モードでの処理への関数呼出し又は関数復帰と、セキュアなドメイン及びスレッド・モードでの命令の処理と、スレッド・モードで処理され、あまりセキュアでないドメインからセキュアなドメインへの遷移に関連する、セキュアなドメインへの有効なエントリ・ポイントを示すセキュア・ゲートウェイ・データ処理命令と、セキュアなドメインとスレッド・モードとの組合せにあるとき、処理回路にとってアクセス可能なセキュア・プロセス・スタック・ポインタへの、セキュアなドメインとスレッド・モードとの組合せへの遷移に続く、第1のアクセスとのいずれかに応答して、障害のシグナリングをトリガすることができる。
【0091】
図10は、例外制御回路28を使用して例外エントリ遷移をハンドリングする方法を示す流れ図である。ステップ100において、例外条件が生じる。たとえば、例外条件は、ハードウェア・デバイスからの割込み信号の受信によって又は例外をトリガするためのソフトウェア命令の実行によってトリガされ得る。ステップ102において、例外制御回路は、処理回路4の現在のモード及びドメインと、ステップ100において生じた例外に関連するセキュリティ・ドメインとに基づいて、実施されるべき特定の例外エントリ遷移を選択する。ステップ104において、例外制御回路28は、(呼出し側レジスタのみを含む)第1の例外スタック・フレームを保存すべきなのか(被呼出し側レジスタと完全性署名とをも含む)第2の例外スタック・フレームを保存すべきなのかを選択する。第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちのどちらが選択されるかは、図8に示されている特定の例外エントリ遷移に依存し、また、その例外が、第2の例外スタック・フレームのレジスタのうちのいくつかをすでに保存していることがある以前の例外のハンドリング上にテールチェインされたかどうかなど、過去のイベントに依存することがあり、その場合、いくつかの例外エントリ遷移について、図8について上記で説明されたように、特定の例外エントリ遷移のために必要とされない場合でも、これらを保存することを続けることが可能である。
【0092】
ステップ106において、選択された例外スタック・フレームは、図3のバンク・スタック・ポインタ・レジスタR13中のスタック・ポインタのうちの選択されたスタック・ポインタによってポイントされる、メモリにおけるスタック・データ構造のうちの1つに保存される。選択されたスタック・ポインタは、例外が生じるより前に実行されているバックグラウンド・コードによって使用されていたスタック・ポインタである。バックグラウンド・コードがセキュア・ハンドラ・モードで処理される場合、選択されたスタック・ポインタとして、セキュア・メイン・スタック・ポインタが使用される。バックグラウンド・コードがセキュア・スレッド・モードで処理される場合、(スタック・ポインタ選択値30に依存して)セキュア・プロセス・スタック・ポインタ又はセキュア・メイン・スタック・ポインタのいずれかが使用される。バックグラウンド・コードがあまりセキュアでないハンドラ・モードで処理される場合、あまりセキュアでないメイン・スタック・ポインタが使用される。バックグラウンド・コードがあまりセキュアでないスレッド・モードで処理される場合、(スタック・ポインタ選択値30に依存して)あまりセキュアでないプロセス・スタック・ポインタ又はあまりセキュアでないメイン・スタック・ポインタのいずれかが使用される。
【0093】
ステップ108において、例外制御回路は、例外エントリ遷移がセキュア・スレッドからセキュア・ハンドラへの遷移であるかどうかを決定し、第1のスタック・フレーム・フォーマットがステップ104において選択され、セキュア・プロセス・スタック・ポインタがステップ106において選択された。たとえば、これは、図8の行9に示されている遷移であり得る。例外エントリ遷移がセキュア・スレッドからセキュア・ハンドラへの遷移である場合、ステップ110において、及び第1のスタック・フレーム・フォーマットがステップ104において選択され、及びセキュア・プロセス・スタック・ポインタがステップ106において選択され、例外制御回路は、構成レジスタ34中のアーキテクチャ構成インジケータ36が1に設定されるのか0に設定されるのかを検出する。アーキテクチャ構成インジケータが0である場合、これは、システムがレガシー・アーキテクチャに従って動作しており、したがって、ステップ112において、スタック・ポインタ選択値30が、セキュア・スレッド・モードに復帰するときにメイン・スタック・ポインタが後続のスタック解除動作のために使用されるべきであることを示すように0に設定されることを意味する。これは、その後、図6のステップ3において示されている例外復帰が予想外のルートを通して行われる場合、スタック解除がプロセス・スタックの代わりにメイン・スタックから実施されるということが、復帰されているモードとメイン・スタックからスタック解除されたスタック・フレームにおいて示されているモードとの不一致により、他の完全性検査の障害を生じるので、図6に示されているタイプの攻撃に対処するのを助ける。
【0094】
しかしながら、ステップ110において、アーキテクチャ構成ビット36が、アーキテクチャの新しい挙動に従うべきであることを示すように1に設定されると決定された場合、ステップ114において、例外制御回路28は、セキュア・プロセス・スタック・ポインタ無効インジケータ42を1に設定する。この場合のスタック・ポインタ選択値は、どのスタックがスレッド・モードでの後続の処理によって使用されるかを変更する必要があることを回避するために、1のままであり得る。セキュア・プロセス・スタック無効インジケータ42の設定は、図6に示されている例外エントリ及び復帰の不適切なシーケンスが、依然として、図11において例外復帰処理について以下で説明されるように検出され得ることを保証する。
【0095】
ステップ108において、例外エントリ遷移がセキュア・スレッドからセキュア・ハンドラへの遷移でないと決定された場合、ステップ116において、その遷移が、セキュア・スタック・ポインタPSP_Sによってポイントされるセキュア・プロセス・スタック上の前に保存された呼出し側スタック・フレームに被呼出し側レジスタを付加することを含む、テールチェイン例外エントリ遷移であるかどうかが決定される。その遷移が、セキュアな処理済みスタック上の既存のスタック・フレームに追加されている被呼出し側レジスタに関連する追加の状態を生じるテールチェイン例外である場合、今や被呼出し側状態が保存され、その場合、完全性署名がスタック・フレーム上に存在することになり、したがって、もはや図6に示されているタイプの攻撃の危険がないので、ステップ118において、セキュア・プロセス・スタック無効インジケータ42はクリアされ得る。しかしながら、その遷移が、セキュア・プロセス・スタック上の呼出し側スタック・フレームに被呼出し側レジスタを付加することを含むテールチェイン遷移でない場合、ステップ118は省略される。
【0096】
エントリ遷移のタイプにかかわらず、ステップ120において、プログラム・フローは、例外条件を扱うために必要とされる例外ハンドリング処理を実施する例外ハンドリング・ルーチンに関連する命令アドレスに分岐する。
【0097】
図11は、例外制御回路28による例外復帰遷移のハンドリングを示す流れ図である。ステップ130において、例外制御回路は、例外復帰遷移の発生を待つ。たとえば、例外復帰が、例外復帰命令の実行によってトリガされ得る。例外復帰が生じたとき、ステップ132、134及び136において、例外制御回路は、この特定の例外復帰遷移が(a)セキュア・スレッド・モードに復帰することであるのか、(b)あまりセキュアでない例外から復帰することであるのか、(c)セキュア・プロセス・スタック・ポインタ無効指示42が1に設定されたときにプロセス・スタック・ポインタの使用に復帰することであるのかを決定する。すべての3つの条件が満たされる場合、ステップ138において、障害がシグナリングされる。たとえば、これは、図6のステップ3における例外復帰について生じ得る。
【0098】
ステップ132、134及び136において検査された条件のいずれかが満たされない場合、ステップ140において、例外制御回路28は、テールチェイン例外が保留中であるかどうかを検査する。これは、例外復帰を処理する間に生じた例外であり得るか、又は、例外ハンドラ・コードを処理する間に前に受信されたが、前に処理された例外よりも低い優先度(ただし、バックグラウンド処理よりも高い優先度)を有しており、したがって、例外制御回路28がその以前の例外をプリエンプトしなかった、例外であり得る。テールチェイン例外が保留中である場合、ステップ142において、その例外がとられ、例外エントリは、図10に示されている方法と同様にハンドリングされる。
【0099】
保留中のテールチェイン例外がない場合、例外制御回路28は、現在の例外より前に実施されているバックグラウンド処理に処理を復帰するためのステップをとる。ステップ144及び146において、例外制御回路28は、例外復帰がセキュア・スレッド・モードへのものであるかどうかと、例外復帰遷移がプロセス・スタック・データ構造からのスタック解除を含むかどうかとを検出する。これらの条件のいずれかが満たされない場合、セキュア・プロセス・スタック・ポインタ無効インジケータ42をクリアする必要がなく、方法はステップ148に進み、スタック・フレームのスタック解除を含む、及び、図9の表に示されているようないくつかのタイプの例外復帰遷移について、完全性署名検査を含む、例外復帰を完了する。
【0100】
例外復帰遷移がセキュア・スレッド・モードへのものであり、プロセス・スタック・ポインタからのスタック解除を含む場合、システムがどのように進むことができるかについてのいくつかのオプションがある。図11中の点線は、とられ得るいくつかの代替アクションを示す。一実例では、ステップ150において、例外制御回路28は、この例外復帰遷移について被呼出し側レジスタのスタック解除及び完全性署名検査が実施されるべきであるかどうかを決定し、実施されるべきである場合、無効インジケータ42をクリアすることはなく、方法はステップ148にまっすぐに進む。被呼出し側レジスタのスタック解除及び完全性署名検査が必要とされない場合、ステップ152において、アーキテクチャ構成ビット36が、非レガシー・アーキテクチャ挙動を示すように1に設定されたかどうかが検査され、設定された場合、ステップ154において、セキュアな処理済みスタック・ポインタ無効インジケータ42がクリアされる。方法は、次いでステップ148に進み、例外復帰を完了する。したがって、セキュア・スレッド・モードに復帰し、セキュア・プロセス・スタックからのスタック解除を含むが、被呼出し側レジスタのスタック解除及び完全性署名検査を伴わない例外復帰遷移において、この場合、これは、図6のステップ1における例外IRQ1に続いて、処理が、IRQ2が生じることなどの介在する例外なしにセキュア・スレッド・モードに単に復帰したこと、又は、IRQ2などのさらなる例外が生じた場合、対応する例外復帰が正しく(IRQ2からセキュア・ハンドラ・モードに復帰し、次いで、IRQ1からセキュア・スレッド・モードへの復帰をトリガして)実施されたことを示すので、無効インジケータ42はクリアされ得る。したがって、この場合、無効インジケータ42は、プロセス・スタック上の保護されていないスタック・フレームが安全にスタック解除され、したがって、攻撃の危険がもはや存在しないので、クリアされ得る。
【0101】
代替的に、ステップ152は省略され得、したがって、アーキテクチャ・ビットの現在の値にかかわらず、セキュア・プロセス・スタック無効インジケータ42は、これがセキュア側でのプロセス・スタックからのスタック解除を含むが完全性署名検査を含まないセキュア・スレッド・モードへの例外復帰遷移であることがステップ150において決定された場合、ステップ154においてクリアされる。アーキテクチャ構成ビットの検査は、レガシー・アーキテクチャが使用されている場合、無効インジケータ42が決して設定されず、したがって、無効インジケータ42をクリアすることが事実上ただそれの既存の値を保持するので、省略され得る。したがって、アーキテクチャ構成ビットを検査するための追加される論理は、電力及び回路面積を節約するために省略され得る。
【0102】
別のオプションは、アーキテクチャ構成ビットが設定されない(レガシー・アーキテクチャが使用されていることを示す)場合、ステップ154において無効インジケータをクリアすることが省略され、ステップ152の「N」分岐に続いて、ステップ148に直接進むことができることであり得る。
【0103】
別のオプションでは、ステップ150において実施される検査が省略され得る。無効インジケータ42をクリアすることが望まれる例外復帰遷移は、被呼出し側レジスタのスタック解除及び完全性署名検査が必要とされないときのPSP_Sを使用するセキュア・スレッド・モードへの復帰遷移であるが、完全性署名検査及び被呼出し側レジスタのスタック解除が必要とされるかどうかの検査は、これが、ステップ138において障害が起こされないことから暗黙的であり得るので、省略され得る。すなわち、PSP_Sからのスタック解除を使用するセキュア・スレッド・モードへの復帰について、完全性署名の検査及び被呼出し側レジスタのスタック解除が必要とされた場合、PSP_S無効インジケータがステップ136において設定され、したがって、障害がトリガされたであろう。したがって、障害がトリガされなかったということは、ステップ150についての答えが「いいえ」であったことを示すことができ、したがって、ステップ150を実施することは、実際はまったく必要とされない。
【0104】
したがって、無効インジケータ42を使用することによって、いくつかの例外復帰遷移がセキュア・プロセス・スタック上の予想されるスタック・フレームと実際のスタック・フレームとの不一致につながることがあるとき、それらの例外復帰遷移を無効にすることによって、セキュリティが改善され得る。
【0105】
図12は、使用され得るシミュレータ実装形態を示す。前に説明された実施例は、関係する技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法に関して本発明を実装するが、コンピュータ・プログラムの使用によって実装される、本明細書で説明される実施例による命令実行環境を与えることも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェア・ベース実装形態を与える限り、しばしばシミュレータと呼ばれる。シミュレータ・コンピュータ・プログラムの種類は、エミュレータ、仮想マシン、モデル、及び、動的バイナリ・トランスレータを含むバイナリ・トランスレータを含む。一般に、シミュレータ実装形態は、随意に、シミュレータ・プログラム210をサポートするホスト・オペレーティング・システム220を稼働する、ホスト・プロセッサ230上で稼働し得る。いくつかの仕組みでは、ハードウェアと与えられた命令実行環境との間にシミュレーションの複数の層があり得、及び/又は、同じホスト・プロセッサ上に与えられた複数の別個の命令実行環境があり得る。歴史的に、妥当な速度で実行するシミュレータ実装形態を与えるために強力なプロセッサが必要とされてきたが、そのような手法は、適合性又は再使用の理由で別のプロセッサに対してネイティブなコードを稼働する要望があるときなど、いくつかの状況において正当化され得る。たとえば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされない追加の機能をもつ命令実行環境を与えるか、又は、異なるハードウェア・アーキテクチャに一般に関連する命令実行環境を与え得る。シミュレーションの概観は、「Some Efficient Architecture Simulation Techniques」、Robert Bedichek、Winter 1990 USENIX Conference、53~63頁において与えられる。
【0106】
実施例が特定のハードウェア構成体又は特徴に関して前に説明された程度まで、シミュレートされた実施例において、好適なソフトウェア構成体又は特徴によって等価な機能が与えられ得る。たとえば、シミュレートされた実施例において、コンピュータ・プログラム論理として特定の回路が実装され得る。同様に、シミュレートされた実施例において、ソフトウェア・データ構造として、レジスタ又はキャッシュなどのメモリ・ハードウェアが実装され得る。また、ハードウェア装置2中のメモリ6にアクセスするために使用される物理アドレス空間は、シミュレータ210によってホスト・オペレーティング・システム220によって使用される仮想アドレス空間上にマッピングされるシミュレートされたアドレス空間200としてエミュレートされ得る。前に説明された実施例において参照されるハードウェア要素のうちの1つ又は複数がホスト・ハードウェア(たとえば、ホスト・プロセッサ230)上に存在する仕組みでは、いくつかのシミュレートされた実施例は、好適な場合、ホスト・ハードウェアを利用し得る。
【0107】
シミュレータ・プログラム210は、(非一時的媒体であり得る)コンピュータ可読記憶媒体に記憶され得、(アプリケーションと、オペレーティング・システムと、ハイパーバイザとを含み得る)ターゲット・コードにプログラム・インターフェース(命令実行環境)を与え、これは、シミュレータ・プログラム210によってモデル化されているハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同じである。したがって、ターゲット・コードのプログラム命令は、シミュレータ・プログラム210を使用して命令実行環境内から実行され得、したがって、上記で説明された装置2のハードウェア特徴を実際は有しないホスト・コンピュータ230が、これらの特徴をエミュレートすることができる。シミュレータ・プログラムは、処理プログラム論理235と、(MPUプログラム論理242とSAUプログラム論理244とを含む)メモリ・アクセス検査プログラム論理240と、図1のハードウェア装置2の処理パイプライン4、(MPU26とSAU24とを含む)メモリ・アクセス検査回路22及び例外制御回路28の挙動をエミュレートする機能を与える例外制御プログラム論理とを含み得る。システム2のアーキテクチャ・レジスタ14も、シミュレータ・コード210によって維持されるレジスタ・データ構造255を使用してエミュレートされ得る。したがって、上記で説明された遷移無効インジケータ42の使用を含む例外ハンドリング挙動は、上記で説明された技法に対応するやり方でシミュレータ・プログラム210によって実施され得る。
【0108】
さらなる例示的な仕組みが、以下の項において提示される。
(1)
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施するための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施するための、処理回路と、
処理回路の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査回路と、
アーキテクチャ状態データを記憶するための複数のレジスタと、
メモリ・システムにおける対応するスタック・データ構造をポイントするための少なくとも1つのスタック・ポインタを記憶するための少なくとも1つのスタック・ポインタ・レジスタであって、前記少なくとも1つのスタック・ポインタが、セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタを含み、前記セキュア・プロセス・スタック・ポインタが、セキュアなドメインとスレッド・モードとの組合せにあるとき、処理回路にとってアクセス可能である、少なくとも1つのスタック・ポインタ・レジスタと、
例外条件に応答して、レジスタからのアーキテクチャ状態データの少なくともサブセットを、前記少なくとも1つのスタック・ポインタのうちの1つによって識別されるスタック・データ構造に保存して、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの1つをそのスタック・データ構造上に与える、例外制御回路であって、第2の例外スタック・フレームが、第1の例外スタック・フレームよりも大量の、レジスタからのアーキテクチャ状態データを含む、例外制御回路と
を備える装置であって、
例外制御回路は、どのセキュリティ・ドメインが、例外条件の前に実施される第1の処理に関連し、例外条件の後に実施されるべき第2の処理に関連するかに基づいて、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちのどちらがスタック・データ構造上に与えられるべきであるかを選択するように構成され、
第1の例外スタック・フレームがセキュア・プロセス・スタック・ポインタによって識別されるセキュア・プロセス・スタック上に与えられるべきである例外条件に応答して、例外制御回路が、セキュア・プロセス・スタック・ポインタ無効インジケータを設定するように構成され、
セキュアなドメインとスレッド・モードとの組合せでの処理への少なくとも1つのタイプの遷移について、セキュア・プロセス・スタック・ポインタ無効インジケータが設定されたとき、例外制御回路が、障害のシグナリングをトリガするように構成された、
装置。
(2)
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理を実施することが可能な処理回路であって、メモリ・アクセスが可能にされるかどうかの検査が処理回路の現在のセキュリティ・ドメインに依存し、所与のセキュリティ・ドメイン内で、処理回路が、例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理を実施することが可能である、処理回路と、
アーキテクチャ状態データを記憶するための複数のレジスタと、
メモリ・システムにおける対応するスタック・データ構造をポイントするための少なくとも1つのスタック・ポインタを記憶するための少なくとも1つのスタック・ポインタ・レジスタであって、前記少なくとも1つのスタック・ポインタが、セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタを含み、前記セキュア・プロセス・スタック・ポインタが、セキュアなドメインとスレッド・モードとの組合せにあるとき、処理回路にとってアクセス可能である、少なくとも1つのスタック・ポインタ・レジスタと
を備える装置のためのデータ処理方法であって、
本方法は、
例外条件に応答して、
どのセキュリティ・ドメインが、例外条件の前に実施される第1の処理に関連し、例外条件の後に実施されるべき第2の処理に関連するかに基づいて、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの1つを選択することであって、第2の例外スタック・フレームが、第1の例外スタック・フレームよりも大量の、レジスタからのアーキテクチャ状態データを含む、選択することと、
レジスタからのアーキテクチャ状態データの少なくともサブセットを、前記少なくとも1つのスタック・ポインタのうちの1つによって識別されるスタック・データ構造に保存して、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの選択された1つをそのスタック・データ構造上に与えることと、
第1の例外スタック・フレームがセキュア・プロセス・スタック・ポインタによって識別されるセキュア・プロセス・スタック上に設けられるべきであるとき、セキュア・プロセス・スタック・ポインタ無効インジケータを設定することと、
セキュアなドメインとスレッド・モードとの組合せでの処理への少なくとも1つのタイプの遷移に応答して、セキュア・プロセス・スタック・ポインタ無効インジケータが設定されたとき、障害をシグナリングすることと
を含む、データ処理方法。
(3)
命令の実行のための命令実行環境を与えるようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、本コンピュータ・プログラムは、
少なくともセキュアなドメインとあまりセキュアでないドメインとを含む複数のセキュリティ・ドメインのうちの1つでのデータ処理をサポートするための、及び所与のセキュリティ・ドメイン内で例外処理のためのハンドラ・モードとバックグラウンド処理のためのスレッド・モードとを含む複数のモードのうちの1つでのデータ処理をサポートするための、処理プログラム論理と、
処理プログラム論理の現在のセキュリティ・ドメインに依存してメモリ・アクセスが可能にされるかどうかを検査するためのメモリ・アクセス検査プログラム論理と
を含み、
処理実行論理が、アーキテクチャ状態データを記憶するためのレジスタ・データ構造を使用してデータ処理をサポートするように構成され、レジスタ・データ構造が、メモリ・システムにおける対応するスタック・データ構造をポイントするための少なくとも1つのスタック・ポインタを記憶するための少なくとも1つのスタック・ポインタ・レジスタを備え、前記少なくとも1つのスタック・ポインタが、セキュア・プロセス・スタック・データ構造に関連するセキュア・プロセス・スタック・ポインタを含み、前記セキュア・プロセス・スタック・ポインタが、セキュアなドメインとスレッド・モードとの組合せにあるとき、処理プログラム論理にとってアクセス可能であり、
本コンピュータ・プログラムが、例外条件に応答して、レジスタ・データ構造からのアーキテクチャ状態データの少なくともサブセットを、前記少なくとも1つのスタック・ポインタのうちの1つによって識別されるスタック・データ構造に保存して、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちの1つをそのスタック・データ構造上に与えるための、例外制御プログラム論理を含み、第2の例外スタック・フレームが、第1の例外スタック・フレームよりも大量の、レジスタ・データ構造からのアーキテクチャ状態データを含み、
例外制御プログラム論理は、どのセキュリティ・ドメインが、例外条件の前に実施される第1の処理に関連し、例外条件の後に実施されるべき第2の処理に関連するかに基づいて、第1の例外スタック・フレーム及び第2の例外スタック・フレームのうちのどちらがスタック・データ構造上に与えられるべきであるかを選択するように構成され、
第1の例外スタック・フレームがセキュア・プロセス・スタック・ポインタによって識別されるセキュア・プロセス・スタック上に与えられるべきである例外条件に応答して、例外制御プログラム論理が、セキュア・プロセス・スタック・ポインタ無効インジケータを設定するように構成され、
セキュアなドメインとスレッド・モードとの組合せでの処理への少なくとも1つのタイプの遷移について、セキュア・プロセス・スタック・ポインタ無効インジケータが設定されたとき、例外制御プログラム論理が、障害のシグナリングをトリガするように構成された、
コンピュータ・プログラム。
【0109】
本出願では、「...ように構成された(configured to...)」という言葉は、装置の要素が、定義された動作を行うことが可能である構成を有することを意味するために使用される。このコンテキストにおいて、「構成」は、ハードウェア又はソフトウェアの相互接続の仕組み又は様式を意味する。たとえば、装置が、定義された動作を与える専用ハードウェアを有し得るか、又は、プロセッサ若しくは他の処理デバイスが、機能を実施するようにプログラムされ得る。「ように構成された」は、装置要素が、定義された動作を与えるために、何らかのやり方で変更されることを必要とすることを暗示しない。
【0110】
本発明の例示的な実施例が、添付の図面を参照しながら本明細書では詳細に説明されたが、本発明がそれらの正確な実施例に限定されないこと、並びに、様々な変更及び修正が、添付の特許請求の範囲によって定義される本発明の範囲及び趣旨から逸脱することなく、当業者によってその中で実施され得ることを理解されたい。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12