(57)【要約】【課題】セキュリティの強化を可能とする情報処理装置を提供すること。【解決手段】実施形態によれば、情報処理装置は、プロセッサ１１およびメモリ１３を有する。プロセッサ１１は、第１の状態または第２の状態に切り換えて動作する。メモリ１３は、第１領域であるセキュア領域１４および第２領域であるノンセキュア領域１５を備える。第２領域には第１のプログラムコードが書き込まれる。第１のプログラムコードは、オペレーションシステムが提供する機能の呼び出しがあったときに実行される。第１領域には第２のプログラムコードであるＮＳ側例外ハンドラ書き換えコード１３２が書き込まれる。プロセッサ１１は、第２のプログラムコードを実行することで、第１のプログラムコードに含まれる第１の命令を第２の命令に置き換える。第２の命令は、第２の状態と第１の状態とを切り換える命令である。【選択図】図１
2017010347.tif 000002
【特許請求の範囲】
【請求項１】
第１の状態、または、前記第１の状態に対し低いセキュリティレベルを備える第２の状態に切り換えて動作するプロセッサと、
前記プロセッサが、前記第１の状態でアクセスする第１領域と、前記第２の状態でアクセスする第２領域とを備えるメモリと、を有し、
前記第２領域に、オペレーションシステムが提供する機能の呼び出しがあったときに実行される第１のプログラムコードが書き込まれ、
前記第１領域に、前記第１のプログラムコードの書き換えのための第２のプログラムコードが書き込まれ、
前記プロセッサは、前記第２のプログラムコードを実行することで、前記第１のプログラムコードに含まれる第１の命令を、前記第２の状態と前記第１の状態とを切り換える第２の命令に置き換えることを特徴とする情報処理装置。
【請求項２】
前記プロセッサは、前記第２のプログラムコードの実行において前記第１の命令を解釈し、解釈によって得られたデータを前記第１領域に格納することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記呼び出しにおいて要求されている処理の内容をチェックするためのチェックコードが前記第１領域に書き込まれ、
前記プロセッサは、前記第２の状態において前記呼び出しがあったとき、前記第２の命令の実行により前記第１の状態へ切り換えてから、前記チェックコードを実行することを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記チェックコードは、前記第２の状態にて前記プロセッサがアクセス可能なメモリ領域からデータを読み出すための読み出しコードを含むことを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記メモリ内の領域に対するアクセスを制御するコントローラをさらに有し、
前記プロセッサは、前記第１のプログラムコードが格納されている領域のうち前記第１の命令から前記第２の命令へ命令が置き換えられた領域に対するデータの書き換えを禁止するためのアクセス制限を前記コントローラに設定することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
タイマ割り込みを発生させるタイマをさらに有し、
前記プロセッサは、前記第２の状態において前記タイマが前記タイマ割り込みを発生させた場合に、前記第１の状態へ切り換え、かつ前記第２のプログラムコードを実行することを特徴とする請求項１に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、情報処理装置に関する。
【背景技術】
【０００２】
従来、情報処理装置に関して、２以上のセキュリティ状態を切り換えてメモリへのアクセスを制御する技術が知られている。情報処理装置は、不正なプログラム実行を防ぐためにセキュリティの強化が求められている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００６−５０６７５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一つの実施形態は、セキュリティの強化を可能とする情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
一つの実施形態によれば、情報処理装置は、プロセッサおよびメモリを有する。プロセッサは、第１の状態または第２の状態に切り換えて動作する。第２の状態は、第１の状態に対し低いセキュリティレベルを備える。メモリは、第１領域および第２領域を備える。第１領域は、プロセッサが第１の状態でアクセスする領域である。第２領域は、プロセッサが第２の状態でアクセスする領域である。第２領域には第１のプログラムコードが書き込まれる。第１のプログラムコードは、オペレーションシステムが提供する機能の呼び出しがあったときに実行される。第１領域には第２のプログラムコードが書き込まれる。第２のプログラムコードは、第１のプログラムコードの書き換えのためのプログラムコードである。プロセッサは、第２のプログラムコードを実行することで、第１のプログラムコードに含まれる第１の命令を第２の命令に置き換える。第２の命令は、第２の状態と第１の状態とを切り換える命令である。
【図面の簡単な説明】
【０００６】
【図１】図１は、第１の実施形態の情報処理装置の構成を示すブロック図である。
【図２】図２は、図１に示すＮＳ側例外ハンドラコードの書き換えのための処理を説明するフローチャートである。
【図３】図３は、図１に示すＮＳ側例外ハンドラコードの例を示す図である。
【図４】図４は、第１の実施形態において、スーパーバイザコール呼び出しがあった場合に実施される処理を説明するフローチャートである。
【図５】図５は、図４に示す処理におけるプログラムコードと処理の遷移との例を説明する図である。
【図６】図６は、第２の実施形態の情報処理装置の構成を示すブロック図である。
【図７】図７は、図６に示すＮＳ側ＳＶＣチェックコードによりＮＳ側メモリを参照する処理を説明するフローチャートである。
【図８】図８は、第３の実施形態の情報処理装置の構成を示すブロック図である。
【図９】図９は、図８に示す保護属性テーブルの例を示す図である。
【図１０】図１０は、図８に示すメモリ保護コントローラ設定コードの実行による、アクセス制限の設定のための処理を説明するフローチャートである。
【図１１】図１１は、第４の実施形態の情報処理装置の構成を示すブロック図である。
【図１２】図１２は、図１１に示すタイマによる割り込みに応じてＮＳ側例外ハンドラコードを書き換える処理を説明するフローチャートである。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態にかかる情報処理装置を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、第１の実施形態の情報処理装置の構成を示すブロック図である。情報処理装置は、プロセッサ１１、バス１２およびメモリ１３を備える。プロセッサ１１およびメモリ１３は、バス１２を介して接続されている。図１には、情報処理装置のハードウェア構成と、ハードウェア構成に保持あるいは書き込まれる各種プログラムコードおよび各種データとを示している。
【０００９】
プロセッサ１１は、メモリ１３からロードした命令の実行およびデータ処理を逐次的に行う。プロセッサ１１は、命令の実行およびデータ処理の結果をメモリ１３へ書き込む。
【００１０】
プロセッサ１１は、演算装置１１０、アドレス変換装置１１３およびアドレス設定レジスタ１１４を備える。演算装置１１０は、命令の実行およびデータ処理のための演算を実施する。アドレス変換装置１１３は、仮想アドレスおよび物理アドレスの間のアドレス変換を実施する。
【００１１】
プロセッサ１１は、各種レジスタを備える。各種レジスタは、プログラムの実行において使用されるデータと、プログラムカウンタとを保持する。プログラムカウンタは、次に実行すべき命令が格納されているメモリアドレスを示す値とする。アドレス設定レジスタ１１４は、ＮＳ側例外ハンドラコード１３７のアドレスを保持する。
【００１２】
プロセッサ１１は、セキュリティレベルが異なる２以上のセキュリティ状態を選択的に切り換えて動作する。第１の状態であるセキュア状態は、最も高いセキュリティレベルを備える。第２の状態であるノンセキュア状態は、最も低いセキュリティレベルを備える。プロセッサ１１は、セキュア状態およびノンセキュア状態の双方にて、互いにプログラムを分離して実行する機能を備える。
【００１３】
なお、各実施形態にて、セキュア状態に関するものであることを「セキュア側（Ｓ側）」、ノンセキュア状態に関するものであることを「ノンセキュア側（ＮＳ側）」、と表す。
【００１４】
プロセッサ１１は、動作の制約に違いを持たせた２以上のモードへ、動作モードを遷移させる。第１のモードであるスーパーバイザモードは、セキュリティ状態に応じてシステムリソースへ制限無くアクセスできる動作モードである。情報処理装置は、スーパーバイザモードにて、オペレーティングシステム（ＯＳ）本体を動作させる。
【００１５】
第２のモードであるユーザモードは、システムリソースへのアクセスが制限される動作モードである。ユーザモードは、スーパーバイザモードに対し動作が制約されている。情報処理装置は、ユーザモードにて、アプリケーションを動作させる。
【００１６】
第３のモードであるセキュアモニタモードは、セキュア状態とノンセキュア状態との切り換えのための動作が認められている動作モードである。セキュア状態とノンセキュア状態との間で状態が切り換えられるとき、プロセッサ１１は、動作モードをセキュアモニタモードとする。セキュアモニタモードは、セキュア状態であるときに限り採り得る動作モードである。プロセッサ１１は、本実施形態で説明するモード以外の動作モードへ遷移可能としても良い。
【００１７】
各種レジスタは、状態情報１１１、モード情報１１２、セキュアモニタコール（ＳＭＣ）命令１１５およびスーパーバイザコール（ＳＶＣ）命令１１６を保持する。状態情報１１１は、プロセッサ１１の状態がセキュア状態およびノンセキュア状態のいずれであるかを表す。モード情報１１２は、プロセッサ１１の動作モードがユーザモードおよびスーパーバイザモードのいずれであるかを表す。
【００１８】
ＳＭＣ命令１１５およびＳＶＣ命令１１６は、プロセッサ１１に実装された命令セットに含まれる。ＳＭＣ命令１１５は、ノンセキュア状態におけるスーパーバイザモードと、セキュア状態におけるセキュアモニタモードとにおける、動作モードの遷移を指示する。ＳＶＣ命令１１６は、ノンセキュア状態におけるユーザモードとスーパーバイザモードとにおける動作モードの遷移を指示する。
【００１９】
メモリ１３は、汎用の主記憶装置である。メモリ１３は、ＤＲＡＭ，ＳＲＡＭ，ＮＡＮＤ，ＭＲＡＭなどのいずれであっても良い。メモリ１３は、セキュア領域１４およびノンセキュア領域１５を含む。
【００２０】
第１領域であるセキュア領域１４は、セキュア状態のプロセッサ１１がアクセスするメモリ領域である。第２領域であるノンセキュア領域１５は、ノンセキュア状態のプロセッサ１１がアクセスするメモリ領域である。ノンセキュア状態のプロセッサ１１は、セキュア領域１４へのアクセスが制限される。
【００２１】
各種プログラムコードは、情報処理装置の起動により外部記憶装置（図示省略）からメモリ１３に書き込まれ、展開される。プログラムコードである、Ｓ側例外ハンドラコード１３１、ＮＳ側例外ハンドラ書き換えコード１３２、ＮＳ側命令解釈コード１３３およびＮＳ側ＳＶＣチェックコード１３４は、セキュア領域１４に配置される。ＮＳ側戻り先データ１３５は、セキュア領域１４に配置される。
【００２２】
Ｓ側例外ハンドラコード１３１は、例外が発生したときにセキュア状態のプロセッサ１１にて実行されるプログラムコードである。第２のプログラムコードであるＮＳ側例外ハンドラ書き換えコード１３２は、スーパーバイザコールハンドラの書き換えのためのプログラムコードである。スーパーバイザコールハンドラは、第１のプログラムコードであるＮＳ側例外ハンドラコード１３７に含まれる。
【００２３】
ＮＳ側命令解釈コード１３３は、ＮＳ側例外ハンドラコード１３７に含まれる命令を解釈するためのプログラムコードである。ＮＳ側ＳＶＣチェックコード１３４は、スーパーバイザコールを利用してプログラムからＯＳへ要求されている処理の内容をチェックするためのプログラムコードである。スーパーバイザコールは、ＯＳのカーネルが提供する機能、当該機能を利用するために呼び出される命令および情報である。
【００２４】
ユーザコードおよびスーパーバイザコードは、ノンセキュア領域１５に配置される。ユーザコードは、ＯＳ上にて実行されるユーザモードのプログラムコードである。スーパーバイザコードは、ＯＳ上にて実行されるスーパーバイザモードのプログラムコードである。
【００２５】
情報処理装置は、ユーザモードでのプログラム実行の過程において、必要に応じて、スーパーバイザコールを呼び出す。情報処理装置は、所望された機能による処理がスーパーバイザモードにて実施されると、それまで実施していた元の処理に戻る。
【００２６】
ユーザコードは、ＳＶＣ呼び出しコード１３６を含む。スーパーバイザコードは、ＮＳ側例外ハンドラコード１３７およびＳＶＣ処理コード１３８を含む。ＳＶＣ呼び出しコード１３６は、スーパーバイザコールを呼び出すためのコードである。
【００２７】
ＮＳ側例外ハンドラコード１３７は、例外が発生したときにノンセキュア状態のプロセッサ１１にて実行されるプログラムコードである。ＳＶＣ処理コード１３８は、スーパーバイザコールを利用する処理を実施するためのプログラムコードである。
【００２８】
情報処理装置は、ノンセキュア状態で動作するアプリケーションが、ＯＳの機能を利用する処理を要求することがある。本実施形態の情報処理装置は、スーパーバイザコール呼び出しの正当性を、セキュア状態で動作するプログラムにより検証する。情報処理装置は、ノンセキュア状態からセキュア状態への処理の切り換えの準備として、ＮＳ側例外ハンドラコード１３７を書き換える。情報処理装置は、検証のあとに元の動作に戻るために、所定のデータを退避させる。
【００２９】
図２は、ＮＳ側例外ハンドラコードの書き換えのための処理を説明するフローチャートである。ＯＳの通常の起動時における処理の１つとして、プロセッサ１１は、ノンセキュア状態にて、ＮＳ側例外ハンドラコード１３７の仮想アドレスを設定する（Ｓ１）。
【００３０】
アドレス設定レジスタ１１４は、設定された仮想アドレスを保持する。仮想アドレスは、ノンセキュア状態のプロセッサ１１が認識可能なＮＳ側仮想アドレスである。プロセッサ１１は、起動時の処理を終えると、ノンセキュア状態でのプログラム実行を開始する。
【００３１】
ノンセキュア状態でのプログラム実行の過程において、セキュア状態での処理を要するときに、プロセッサ１１は、セキュアモニタコール呼び出しに対してＳＭＣ命令１１５を実行する。プロセッサ１１は、ノンセキュア状態からセキュア状態へ切り換える（Ｓ２）。セキュア状態にて、プロセッサ１１は、セキュア領域１４からＳ側例外ハンドラコード１３１を呼び出す。
【００３２】
Ｓ側例外ハンドラコード１３１は、ＮＳ側例外ハンドラ書き換えコード１３２を呼び出すための命令を含む。プロセッサ１１は、呼び出されたＳ側例外ハンドラコード１３１を実行することで、セキュア領域１４からＮＳ側例外ハンドラ書き換えコード１３２を呼び出す。プロセッサ１１は、ＮＳ側例外ハンドラ書き換えコード１３２の実行により、Ｓ１１からＳ１９までの処理を行う。
【００３３】
プロセッサ１１は、ＮＳ側例外ハンドラコード１３７のＮＳ側仮想アドレスをアドレス設定レジスタ１１４から読み出す（Ｓ１１）。アドレス変換装置１１３は、読み出されたＮＳ側仮想アドレスを、ノンセキュア状態における変換ルールにしたがって、物理アドレスへ変換する（Ｓ１２）。アドレス変換装置１１３は、ＮＳ側仮想アドレスおよび物理アドレスのマッピングを格納するＮＳ側ページテーブルに基づいて、ＮＳ側仮想アドレスから物理アドレスへの変換を行っても良い。
【００３４】
アドレス変換装置１１３は、物理アドレスを、セキュア状態における変換ルールにしたがって、Ｓ側仮想アドレス空間へマッピングする（Ｓ１３）。アドレス変換装置１１３は、Ｓ側仮想アドレスおよび物理アドレスのマッピングを格納するＳ側ページテーブルを書き換えても良い。
【００３５】
Ｓ１２およびＳ１３により、プロセッサ１１は、セキュア状態において、ＮＳ側例外ハンドラコード１３７が格納されている領域からのデータの読み出しと、当該領域へのデータの書き込みとが可能となる。プロセッサ１１は、ＮＳ側例外ハンドラコード１３７から、スーパーバイザコールハンドラにある命令を読み出す（Ｓ１４）。スーパーバイザコールハンドラは、スーパーバイザコールの呼び出しがあったときに起動されるプログラムコードである。
【００３６】
図３は、ＮＳ側例外ハンドラコードの一例を示す図である。ＮＳ側例外ハンドラコード１３７は、例外の種類ごとに１つずつの命令が書かれている部分と、それ以外の部分とからなる。この例にて、アドレス「0xffff0008」のラベル「svc_handler:」は、スーパーバイザコールハンドラを示す。
【００３７】
なお、アドレス設定レジスタ１１４は、ＮＳ側例外ハンドラコード１３７のＮＳ側仮想アドレス「0xffff0000」を保持している。この例の場合、プロセッサ１１では、ＮＳ側例外ハンドラコード１３７のＮＳ側仮想アドレスにオフセット値「８」を加えて得られるアドレスに「svc_handler:」が格納されていることが決められている。
【００３８】
スーパーバイザコールハンドラには、コードおよびデータとして、「ldc  pc,[pc,#0x400]」と記述されている。かかる記述は、この命令のアドレス「0xffff0008」に「0x400」を加えたメモリアドレス「0xffff0408」に記述されているデータを、プログラムカウンタ（PC）にロードする旨の命令を表す。かかる命令は、スーパーバイザコールハンドラに含まれる第１の命令である。第１の命令が実行された場合、プロセッサ１１の処理は、アドレス「0xffff0408」に記述されている「svc_handler_main」へジャンプする。
【００３９】
プロセッサ１１は、図２のＳ１４にて読み出された命令の内容を、ＮＳ側命令解釈コード１３３に基づいて解釈する。プロセッサ１１は、解釈に基づいて、処理の戻り先となるアドレスを取得する（Ｓ１５）。図３に示す例では、プロセッサ１１は、「ldc  pc,[pc,#0x400]」の内容に基づいて、戻り先アドレスを示すデータである「svc_handler_main」を取得する。
【００４０】
プロセッサ１１は、取得されたアドレスを、ＮＳ側戻り先データ１３５として、セキュア領域１４に格納する（Ｓ１６）。このように、プロセッサ１１は、第１の命令の解釈によって得られたデータをセキュア領域１４に格納する。プロセッサ１１は、戻り先アドレスを示す当該データを、メモリ１３上の所定の領域に退避させる。
【００４１】
プロセッサ１１は、ＮＳ側例外ハンドラコード１３７のうち、スーパーバイザコールハンドラにある第１の命令を、第２の命令であるＳＭＣ命令に置き換える（Ｓ１７）。図３に示す例の場合、プロセッサ１１は、アドレス「0xffff0008」の命令「ldc  pc,[pc,#0x400]」を、ＳＭＣ命令１１５に置き換える。
【００４２】
Ｓ１７における命令の置き換えの後に、プロセッサ１１は、Ｓ１３にて実施されたマッピングを解除する（Ｓ１８）。プロセッサ１１は、ＳＭＣ命令１１５を実行する。プロセッサ１１は、セキュア状態からノンセキュア状態へ切り換える（Ｓ１９）。プロセッサ１１は、ノンセキュア状態でのプログラム実行を、Ｓ２において実行されたＳＭＣ命令１１５の次の命令から再開させる（Ｓ３）。
【００４３】
次に、ＮＳ側例外ハンドラコード１３７が書き換えられた以降において、スーパーバイザコール呼び出しがあった場合のトラップ動作について説明する。
【００４４】
図４は、第１の実施形態において、スーパーバイザコールが呼び出された場合に実施される処理を説明するフローチャートである。ここで説明する処理は、ユーザモードにおけるプログラム実行の過程にて、スーパーバイザコールが呼び出された場合の処理とする。
【００４５】
図４に示す処理は、ユーザコードに含まれるＳＶＣ呼び出しコード１３６の実行により開始される。ＳＶＣ呼び出しコード１３６が実行されることで、プロセッサ１１は、スーパーバイザコールの引数を所定のレジスタに設定する（Ｓ２１）。
【００４６】
プロセッサ１１は、ＳＶＣ命令１１６を実行する（Ｓ２２）。プロセッサ１１は、ユーザモードからスーパーバイザモードへ切り換える。プロセッサ１１で実行されるコードは、ユーザコードからスーパーバイザコールハンドラへジャンプする（Ｓ３１）。
【００４７】
かかるジャンプまでの手順は、通常のＯＳで実施される標準的なスーパーバイザコール呼び出しの方法に従っている。スーパーバイザコールが呼び出された場合の標準的な処理としては、スーパーバイザコールにより要求された処理がスーパーバイザモードにて実施される。
【００４８】
第１の実施形態では、プロセッサ１１は、書き換えられたＮＳ側例外ハンドラコード１３７にしたがい、スーパーバイザコールハンドラにあるＳＭＣ命令を実行する。プロセッサ１１は、ノンセキュア状態からセキュア状態へ切り換える（Ｓ３２）。これと同時に、プロセッサ１１は、スーパーバイザモードからセキュアモニタモードへ遷移させる。
【００４９】
プロセッサ１１で実行されるコードは、ＮＳ側例外ハンドラコード１３７から、Ｓ側例外ハンドラコード１３１へジャンプする。すなわち、情報処理装置は、ＳＶＣ処理コード１３８への遷移による処理に代えて、Ｓ側例外ハンドラコード１３１による処理を実施する。
【００５０】
プロセッサ１１は、Ｓ側例外ハンドラコード１３１の処理を行う。プロセッサ１１は、Ｓ３２で実行されたＳＭＣ命令が、ＮＳ側例外ハンドラコード１３７に含まれるＳＭＣ命令であることを確認する（Ｓ４１）。
【００５１】
プロセッサ１１は、アドレス設定レジスタ１１４に格納されているアドレスに所定のオフセット値を加えた結果と、Ｓ側例外ハンドラコード１３１へジャンプする元の命令のアドレスとを比較しても良い。双方が一致する場合、プロセッサ１１は、実行されたＳＭＣ命令が、ＮＳ側例外ハンドラコード１３７のＳＭＣ命令であると判定する。図３に示す例の場合、プロセッサ１１は、アドレス「0xffff0000」にオフセット値「８」を加えた結果を参照する。
【００５２】
実行されたＳＭＣ命令が、ＮＳ側例外ハンドラコード１３７のＳＭＣ命令であることが確認された場合、プロセッサ１１は、Ｓ４２以降の処理を行う。かかる確認がなされなかった場合、プロセッサ１１は、実行されたＳＭＣ命令が、ＮＳ側例外ハンドラコード１３７のＳＭＣ命令以外によるものと判定する。プロセッサ１１は、Ｓ４２以降の処理を中止する。
【００５３】
Ｓ４１での確認を経て、プロセッサ１１は、セキュアモニタモードにおいてスーパーバイザコールハンドラを実行する。プロセッサ１１は、レジスタに設定された引数を読み出す（Ｓ２１）。プロセッサ１１は、ＮＳ側ＳＶＣチェックコード１３４を実行して、読み出された引数をチェックする（Ｓ４２）。
【００５４】
プロセッサ１１は、読み出された引数に基づいた処理を実施する。例えば、プロセッサ１１は、読み出された引数に基づいて、引数を書き換える。プロセッサ１１は、読み出された引数に基づいた処理の一例として、引数を記録しても良い。プロセッサ１１は、読み出された引数に基づいて、いずれの処理を行うこととしても良い。
【００５５】
プロセッサ１１は、読み出された引数に基づいた処理の一例として、Ｓ２１においてレジスタに設定された引数のうちの一つであるＳＶＣ呼び出しコード１３６に含まれるＳＶＣ番号を書き換えても良い。ＳＶＣ番号は、スーパーバイザコールを利用してユーザコードから要求されている処理の内容を示す。プロセッサ１１は、例えば、ＳＶＣ呼び出しコード１３６に含まれるＳＶＣ番号が特定の値である場合に、当該特定の値から別の値へＳＶＣ番号を書き換える。プロセッサ１１は、書き換え後のＳＶＣ番号の値を、レジスタに格納する。
【００５６】
ＳＶＣ番号の書き換えの具体例の１つとしては、プロセッサ１１は、セキュリティ上実行を防止すべき処理を要求する特定の値を、ＳＶＣ番号として本来存在しない値へ置き換える。これにより、プロセッサ１１は、スーパーバイザコールを強制的にエラーにさせる。情報処理装置は、セキュリティ上不都合な処理の実行を阻止することができる。
【００５７】
プロセッサ１１は、読み出された引数に基づいた処理の一例として、ＳＶＣ番号の値に関わらず引数の記録を行っても良い。情報処理装置は、引数の記録を、スーパーバイザコール呼び出しの正当性の検証に利用しても良い。この場合も、情報処理装置は、セキュリティ上不都合な処理の実行を回避できる。
【００５８】
スーパーバイザコール呼び出しの正当性に関する検証は、ＮＳ側ＳＶＣチェックコード１３４の実行を経て、セキュア状態で動作するプログラムのいずれかによって実施されることとしても良い。当該検証は、ＮＳ側ＳＶＣチェックコード１３４の実行による処理に含まれるものであっても良い。
【００５９】
プロセッサ１１は、セキュア領域１４からＮＳ側戻り先データ１３５を読み出す（Ｓ４３）。ＮＳ側戻り先データ１３５は、Ｓ１６にて退避させた戻り先アドレスのデータである。プロセッサ１１は、読み出されたＮＳ側戻り先データ１３５が示すアドレスを、スーパーバイザモードにおけるＮＳ側例外ハンドラコード１３７の実行による処理への戻り先のアドレスとして設定する。
【００６０】
プロセッサ１１は、ＳＭＣ命令１１５を実行する。プロセッサ１１は、セキュア状態からノンセキュア状態へ切り換える（Ｓ４４）。これと同時に、プロセッサ１１は、セキュアモニタモードからスーパーバイザモードへ遷移する。
【００６１】
プロセッサ１１の処理は、ＮＳ側例外ハンドラコード１３７のうち、Ｓ４３にて設定されたアドレスのコードに復帰する（Ｓ３３）。これにより、プロセッサ１１は、セキュア状態から、ノンセキュア状態のスーパーバイザコールハンドラによる処理に戻る。
【００６２】
プロセッサ１１は、復帰先のアドレスのコードにしたがい、ＳＶＣ処理コード１３８を読み出す。プロセッサ１１は、読み出されたＳＶＣ処理コード１３８により、スーパーバイザコールの処理を実施する（Ｓ３４）。プロセッサ１１は、レジスタから読み出された引数に基づいた処理を実施する。Ｓ４２においてＳＶＣ番号の値の書き換えがあった場合、プロセッサ１１は、書き換えられた値にしたがった処理を行う。
【００６３】
スーパーバイザコールの処理を終えると、プロセッサ１１は、スーパーバイザモードからユーザモードへ切り換える。プロセッサ１１は、ユーザモードでのプログラム実行を、Ｓ２２において実行されたＳＶＣ命令１１６の次の命令から再開させる（Ｓ２３）。
【００６４】
図５は、図４に示す処理におけるプログラムコードと処理の遷移との例を説明する図である。図５には、ユーザモード、スーパーバイザモード、およびセキュアモニタモードにて実行される各プログラムコードの例を示している。
【００６５】
セキュア状態におけるＳ１７での処理により、スーパーバイザモードのプログラムコードのうち「svc_handler:」の命令「ldc  pc,[pc,#0x400]」は、ＳＭＣ命令である「smc  #0」に置き換えられている。「Ｐ１」は、セキュア状態での命令の置き換えを表す。
【００６６】
ユーザモードでのプログラムコードの実行の過程「Ｐ２」において、ＳＶＣ命令１１６である「svc  #0」が実行される。これにより、ユーザモードのプログラムコードから、スーパーバイザコールハンドラ「svc_handler:」へ処理が遷移する（「Ｐ３」）。
【００６７】
「Ｐ１」により置き換えられた「smc  #0」により、スーパーバイザモードにおけるハンドラ「svc_handler:」から、セキュアモニタモードにおけるスーパーバイザコールハンドラ「m_svc_handler:」へ処理が遷移する（「Ｐ４」）。
【００６８】
ハンドラ「m_svc_handler:」が起動されると、セキュアモニタモードにおけるスーパーバイザコールハンドラ「m_svc_handler_main:」へ処理が遷移する（「Ｐ５」）。
【００６９】
スーパーバイザコールハンドラ「m_svc_handler_main:」の実行の過程「Ｐ６」において、スーパーバイザコールの引数がチェックされる。引数は必要に応じて書き換えられる。
【００７０】
スーパーバイザコールハンドラ「m_svc_handler_main:」の実行の後、Ｓ側例外ハンドラコード１３１のうちのリターン命令が実行される。これにより、セキュアモニタモードのプログラムコードから、本来のハンドラ「svc_handler_main:」へ処理が遷移する（「Ｐ７」）。
【００７１】
カーネルによるハンドラ「svc_handler_main:」の実行の過程「Ｐ８」において、スーパーバイザモードにおけるスーパーバイザコールの処理が実施される。
【００７２】
ハンドラ「svc_handler_main:」の実行の後、ＮＳ側例外ハンドラコード１３７のうちのリターン命令が実行される。これにより、スーパーバイザモードのプログラムコードから、ユーザモードのプログラムコードへ処理が遷移する（「Ｐ９」）。ユーザモードでのプログラムコードの実行の過程「Ｐ１０」は、「svc  #0」の次の命令から続行される。
【００７３】
第１の実施形態によると、情報処理装置は、セキュア状態にてＮＳ側例外ハンドラ書き換えコード１３２を実行する。情報処理装置は、スーパーバイザコールハンドラに含まれる第１の命令を、第２の命令であるＳＭＣ命令に置き換える。ノンセキュア状態でのプログラム実行においてスーパーバイザコール呼び出しがあった場合に、プロセッサ１１は、置き換えられた命令にしたがい、ノンセキュア状態からセキュア状態へ状態を遷移させる。プロセッサ１１の処理は、スーパーバイザモードにおけるＮＳ側例外ハンドラコード１３７の実行から、セキュアモニタモードにおけるＳ側例外ハンドラコード１３１へ移る。情報処理装置は、セキュア状態の動作を経て、ノンセキュア状態の動作に戻る。
【００７４】
プロセッサ１１は、セキュア状態にてスーパーバイザコールの内容をチェックすることで、ユーザモードにより要求される処理の内容を監視する。情報処理装置は、かかるチェックの結果に基づいた処理により、セキュリティ上不都合な動作を回避できる。プロセッサ１１は、スーパーバイザコール呼び出しの正当性を、セキュア側のプログラムによって検証する。情報処理装置は、かかる検証を基に、正当性の低いスーパーバイザコール呼び出しを阻止できる。以上により、情報処理装置は、セキュリティを強化できるという効果を奏する。
【００７５】
（第２の実施形態）
図６は、第２の実施形態の情報処理装置の構成を示すブロック図である。第１の実施形態と同一の部分には同一の符号を付し、重複する説明を適宜省略する。
【００７６】
第２の実施形態では、第１の実施形態におけるＮＳ側ＳＶＣチェックコード１３４の処理に、ＮＳ側のメモリ領域を参照する処理が追加されている。
【００７７】
第２の実施形態において、ＮＳ側ＳＶＣチェックコード１３４は、ＮＳ側メモリ読み出しコード１４１を含む。ＮＳ側メモリ読み出しコード１４１は、ＮＳ側のメモリ領域からデータを読み出すためのプログラムコードである。ＮＳ側のメモリ領域は、ノンセキュア状態のプロセッサ１１がアクセス可能であっても良く、ノンセキュア領域１５を含む。
【００７８】
次に、ｕｎｌｉｎｋのスーパーバイザコールの呼び出しをチェックする場合を例として、ＮＳ側のメモリ領域を参照する処理を説明する。ｕｎｌｉｎｋは、汎用ＯＳに実装されている命令の１つであって、指定された名前のファイルを削除する。
【００７９】
ｕｎｌｉｎｋのスーパーバイザコールの引数には、ファイル名の文字列が格納されている領域のメモリアドレスを保持するポインタが含まれる。このメモリアドレスは、ＮＳ側仮想アドレスである。かかるスーパーバイザコールの呼び出しのチェックでは、引数で示されるメモリアドレスを参照することで、チェックに使用される文字列の情報が取得される。
【００８０】
図７は、ＮＳ側ＳＶＣチェックコードによりＮＳ側メモリを参照する処理を説明するフローチャートである。図７に示す処理は、第１の実施形態のＳ４２における、ＮＳ側ＳＶＣチェックコード１３４の実行による処理に含まれる。
【００８１】
第２の実施形態において、プロセッサ１１の各種レジスタは、レジスタＲ０，Ｒ１を含む。レジスタＲ０は、ＳＶＣ番号を保持する。レジスタＲ１は、引数であるポインタを保持する。なお、レジスタと、レジスタに保持される情報の種別との関係は、ＯＳにおける呼び出し規約にしたがうものとする。
【００８２】
状態の切り換えの際に、レジスタＲ０，Ｒ１が保持する情報を所定のメモリ領域にいったん退避させ、切り換えの後にメモリ１３からレジスタＲ０，Ｒ１へ情報を返すこととしても良い。
【００８３】
プロセッサ１１は、スーパーバイザコールのＳＶＣ番号をレジスタＲ０から読み出す（Ｓ５１）。レジスタＲ０の情報をメモリ領域に退避させている場合は、当該メモリ領域からＳＶＣ番号を読み出す。
【００８４】
プロセッサ１１は、読み出されたＳＶＣ番号が、ＮＲ＿ｕｎｌｉｎｋ定数と一致することを確認する（Ｓ５２）。ＮＲ＿ｕｎｌｉｎｋ定数は、ｕｎｌｉｎｋのスーパーバイザコールであることを示す定数である。ＳＶＣ番号がＮＲ＿ｕｎｌｉｎｋ定数と一致することが確認された場合、プロセッサ１１は、Ｓ５３以降の処理を行う。
【００８５】
ＳＶＣ番号がＮＲ＿ｕｎｌｉｎｋ定数と一致しない場合、プロセッサ１１は、呼び出しがあったスーパーバイザコールはｕｎｌｉｎｋ以外のスーパーバイザコールであると判定する。プロセッサ１１は、ＳＶＣ番号に応じて、Ｓ５３以降の処理以外でチェックを行う。プロセッサ１１は、ＮＳ側ＳＶＣチェックコード１３４による処理を終了しても良い。
【００８６】
Ｓ５２での確認を経て、プロセッサ１１は、レジスタＲ１から、ファイル名の文字列が格納されている領域のＮＳ側仮想アドレスを得る（Ｓ５３）。レジスタＲ１の情報をメモリ領域に退避させている場合は、当該メモリ領域からＮＳ側仮想アドレスを読み出す。
【００８７】
アドレス変換装置１１３は、読み出されたＮＳ側仮想アドレスを、ノンセキュア状態における変換ルールにしたがって、物理アドレスへ変換する（Ｓ５４）。アドレス変換装置１１３は、ＮＳ側仮想アドレスおよび物理アドレスのマッピングを格納するＮＳ側ページテーブルに基づいて、ＮＳ側仮想アドレスから物理アドレスへの変換を行っても良い。
【００８８】
アドレス変換装置１１３は、得られた物理アドレスを、セキュア状態における変換ルールにしたがって、Ｓ側仮想アドレス空間へマッピングする（Ｓ５５）。アドレス変換装置１１３は、Ｓ側仮想アドレスおよび物理アドレスのマッピングを格納するＳ側ページテーブルを書き換えても良い。
【００８９】
Ｓ５４およびＳ５５により、プロセッサ１１は、セキュア状態において、ＮＳ側のメモリ領域からのデータの読み出しと、当該領域へのデータの書き込みとが可能となる。プロセッサ１１は、Ｓ側仮想アドレスへのアクセスにより、ＮＳ側のメモリ領域からファイル名の文字列を読み出す（Ｓ５６）。プロセッサ１１は、ＮＳ側メモリ読み出しコード１４１を実行することで、ファイル名の文字列が格納されている領域から情報を取得する。
【００９０】
プロセッサ１１は、読み出された文字列が、削除可能なファイルの名前を示す文字列か否かを判定する（Ｓ５７）。ファイルの名前と削除の可否との関係は、所定のメモリ領域にあらかじめ保持されている。プロセッサ１１は、かかる関係を基に、削除の可否を判断する。
【００９１】
削除可能なファイルの名前を示す文字列ではないと判定した場合（Ｓ５７、Ｎｏ）、プロセッサ１１は、レジスタＲ１に、無効なポインタであることを示す「０」を代入する（Ｓ５８）。レジスタＲ１の情報をメモリ領域に退避させている場合は、当該メモリ領域に格納されている値を「０」に置き換える。
【００９２】
削除可能なファイルの名前を示す文字列と判定した場合（Ｓ５７、Ｙｅｓ）、プロセッサ１１の処理はＳ５９へ移行する。プロセッサ１１は、ファイル名の文字列が格納されている領域のアドレスにつきＳ５５で実施されたマッピングを解除する（Ｓ５９）。以上により、ＮＳ側ＳＶＣチェックコード１３４によりＮＳ側メモリを参照する処理を終了する。
【００９３】
第１の実施形態のＳ３４と同様に、プロセッサ１１は、スーパーバイザコールの処理を実施する。Ｓ５８によるレジスタＲ１の値の置き換えが行われていない場合、プロセッサ１１は、ｕｎｌｉｎｋのスーパーバイザコールの処理を実施する。これにより、情報処理装置は、ファイル名の文字列から削除可能と判定されたファイルを削除する。
【００９４】
Ｓ５８にてレジスタＲ１の値を置き換えている場合、引数が無効であるために、ｕｎｌｉｎｋのスーパーバイザコールの処理は失敗となる。なお、Ｓ５８では、プロセッサ１１は、レジスタＲ１の値の置き換えに代えて、ＮＳ側メモリ領域に格納されているファイル名の文字列に、他の文字列を上書きすることとしても良い。文字列を、いずれのファイルの名前にも該当しない無効な文字列に置き換えた場合も、ｕｎｌｉｎｋのスーパーバイザコールの処理は失敗となる。
【００９５】
ＮＳ側ＳＶＣチェックコード１３４によりＮＳ側メモリを参照する処理は、ｕｎｌｉｎｋのスーパーバイザコール以外のスーパーバイザコールの呼び出しをチェックする場合に適用しても良い。情報処理装置は、ＮＳ側のメモリ領域に格納されている情報に基づいて、スーパーバイザコールの実行の可否を判断することができる。
【００９６】
第２の実施形態によると、プロセッサ１１は、スーパーバイザコールの引数によって示されるメモリ領域から情報を取得する。プロセッサ１１は、メモリ領域から得られた情報を基に、スーパーバイザコールの内容をチェックする。情報処理装置は、チェック結果に基づいた処理により、セキュリティ上不都合な動作を回避できる。情報処理装置は、メモリ領域に格納されている情報をチェック対象に含めることで、より多くの情報を基に、スーパーバイザコールの実行の可否を判断できる。これにより、情報処理装置は、セキュリティをさらに強化できる。
【００９７】
（第３の実施形態）
図８は、第３の実施形態の情報処理装置の構成を示すブロック図である。第１の実施形態と同一の部分には同一の符号を付し、重複する説明を適宜省略する。
【００９８】
第３の実施形態の情報処理装置は、第１の実施形態での処理により書き換えられたＮＳ側例外ハンドラコード１３７について、ノンセキュア状態での動作による再度の書き換えを防止するための構成を備える。
【００９９】
第３の実施形態の情報処理装置は、バス１２およびメモリ１３の間に接続されたメモリ保護コントローラ１６を備える。メモリ保護コントローラ１６は、プロセッサ１１のセキュリティ状態に応じて、メモリ１３の領域に対するアクセスを制御する。
【０１００】
メモリ保護コントローラ１６は、ノンセキュア状態におけるセキュア領域１４へのアクセスを拒否し、セキュア状態におけるセキュア領域１４へのアクセスを許可する。メモリ保護コントローラ１６は、ノンセキュア状態およびセキュア状態のいずれにおいても、ノンセキュア領域１５へのアクセスを許可する。メモリ保護コントローラ１６は、かかる領域に対するアクセス制御のほかに、領域を指定することで個別に設定されたアクセス制限を実施する。
【０１０１】
第３の実施形態において、ＮＳ側例外ハンドラ書き換えコード１３２は、メモリ保護コントローラ設定コード１５１を含む。メモリ保護コントローラ設定コード１５１は、メモリ１３内の領域を指定して個別にアクセス制限を設定するためのプログラムコードである。
【０１０２】
メモリ保護コントローラ１６は、保護属性テーブル１６１を保持する。保護属性テーブル１６１は、メモリ１３内の領域に対して個別に設定されている保護属性の情報を記録する。
【０１０３】
図９は、保護属性テーブルの一例を示す図である。保護属性としては、セキュア状態におけるデータの読み出しおよび書き込み、ノンセキュア状態におけるデータの読み出しおよび書き込みのそれぞれについて、許可「１」または禁止「０」が設定される。保護属性テーブル１６１は、保護属性の情報を、保護対象とされる領域を示す物理アドレスおよびサイズとの組み合わせとして保持する。保護属性テーブル１６１の行ごとに情報が記録されている。
【０１０４】
メモリ保護コントローラ１６は、ノンセキュア状態では、保護属性テーブル１６１への書き込み、および保護属性テーブル１６１からの読み出しを拒否する。メモリ保護コントローラ１６は、セキュア状態では、保護属性テーブル１６１への書き込み、および保護属性テーブル１６１からの読み出しを許可する。
【０１０５】
メモリ保護コントローラ１６は、プロセッサ１１からメモリ１３へのアクセスの際、アドレス、アクセス種別、状態情報を含むリクエストを、バス１２から受ける。アクセス種別は、データの読み出し（read）および書き込み（write）のいずれかである。アクセス種別が「write」である場合、リクエストには、メモリ１３への書き込みデータが含められる。状態情報は、プロセッサ１１に格納されている状態情報１１１と同じとする。
【０１０６】
メモリ保護コントローラ１６は、バス１２からリクエストを受けると、保護属性テーブル１６１を参照する。メモリ保護コントローラ１６は、保護属性テーブル１６１の中に、リクエストにあるアドレスを含む情報が存在するか否かを判断する。
【０１０７】
リクエストにあるアドレスを含む情報が存在する場合、メモリ保護コントローラ１６は、かかる保護属性の情報と、リクエストのアクセス種別および状態情報とを照合する。照合の結果、許可されるアクセスである場合、メモリ保護コントローラ１６は、当該リクエストをメモリ１３へ送信する。禁止されるアクセスである場合、メモリ保護コントローラ１６は、メモリ１３への当該リクエストの送信を行わず、バス１２へエラー通知を返す。
【０１０８】
第３の実施形態では、情報処理装置は、ＮＳ側例外ハンドラコード１３７のうち命令が置き換えられた領域に対するデータの書き換えを禁止するアクセス制限を設定する。情報処理装置は、ＮＳ側例外ハンドラコード１３７の書き換えのための処理と併せて、かかるアクセス制限のための情報を保護属性テーブル１６１に記録する。プロセッサ１１は、メモリ保護コントローラ設定コード１５１の実行により、保護属性テーブル１６１を更新する。
【０１０９】
図１０は、メモリ保護コントローラ設定コードの実行による、アクセス制限の設定のための処理を説明するフローチャートである。図１０に示す処理は、第１の実施形態のＳ１８におけるマッピングの解除と、Ｓ１９におけるＳＭＣ命令の実行との間に実施される。
【０１１０】
Ｓ１８におけるマッピングの解除を終えると、プロセッサ１１は、メモリ保護コントローラ設定コード１５１の実行により、Ｓ６１からＳ６４までの処理を行う。
【０１１１】
プロセッサ１１は、保護属性テーブル１６１のうち、未使用のエントリを選択する（Ｓ６１）。未使用のエントリは、有効な情報が記録されていない１つの行とする。図９に示す例では、サイズの列に「０」が記録されている４行目の行を、未使用のエントリとする。
【０１１２】
第１の実施形態のＳ１２にて、プロセッサ１１は、アドレス変換装置１１３により、ＮＳ側例外ハンドラコード１３７のＮＳ側仮想アドレスを物理アドレスに変換している。プロセッサ１１は、Ｓ１２で取得された物理アドレスを、選択されたエントリの物理アドレスの欄に書き込む（Ｓ６２）。図３に示す例の場合、プロセッサ１１は、ＮＳ側仮想アドレス「0xffff0000」から変換された物理アドレスを、エントリへ書き込む。
【０１１３】
プロセッサ１１は、選択されたエントリのサイズの欄に、保護対象とする領域のサイズを設定する（Ｓ６３）。第１の実施形態のＳ１７にて、プロセッサ１１は、ＮＳ側例外ハンドラコード１３７のうち、スーパーバイザコールハンドラにある命令を、ＳＭＣ命令に置き換えている。プロセッサ１１は、設定された物理アドレスの位置から、Ｓ１７での命令の置き換えがあった領域までを含む範囲が保護対象に含まれるように、サイズを設定する。
【０１１４】
図３に示す例の場合、アドレス「0xffff0000」から、命令の置き換えがあったハンドラ「svc_handler:」を含む範囲、例えば「0x20」が、サイズとして設定される。
【０１１５】
プロセッサ１１は、選択されたエントリに、保護属性を設定する（Ｓ６４）。プロセッサ１１は、セキュア状態でのデータの読み出しおよび書き込みを許可、ノンセキュア状態でのデータの読み出しを許可、かつノンセキュア状態でのデータの書き込みを禁止、とする保護属性を設定する。この場合、図９に示すＳ（read），Ｓ（write），ＮＳ（read），ＮＳ（write）の各欄に、それぞれ「１」，「１」，「１」および「０」を書き込む。
【０１１６】
以上により、メモリ保護コントローラ設定コード１５１の実行による、アクセス制限の設定のための処理を終了する。プロセッサ１１は、Ｓ６４の処理に続いて、第１の実施形態のＳ１９における処理を実施する。
【０１１７】
アクセス制限の設定により、情報処理装置は、ＮＳ側例外ハンドラコード１３７のうち命令が置き換えられた領域について、ノンセキュア状態での動作によるデータの書き換えを阻止する。
【０１１８】
第３の実施形態によると、情報処理装置は、メモリ保護コントローラ設定コード１５１を実行することで、ＮＳ側例外ハンドラコード１３７のうち命令が置き換えられた領域へのアクセス制限を設定する。情報処理装置は、ノンセキュア状態での動作によるＮＳ側例外ハンドラコード１３７の再度の書き換えを阻止する。情報処理装置は、スーパーバイザコールをチェックする機能を維持可能とすることで、セキュリティをさらに強化できる。
【０１１９】
（第４の実施形態）
図１１は、第４の実施形態の情報処理装置の構成を示すブロック図である。第１の実施形態と同一の部分には同一の符号を付し、重複する説明を適宜省略する。
【０１２０】
第４の実施形態の情報処理装置は、ＮＳ側例外ハンドラコード１３７の書き換えを、セキュアモニタコール呼び出しに応じて実施するほか、他の要因に応じても実施可能とする。第４の実施形態では、セキュアモニタコール呼び出し以外に、タイマ割り込みに応じてＮＳ側例外ハンドラコード１３７の書き換えのための処理を実施する。第４の実施形態の情報処理装置は、第１の実施形態の構成に加えて、タイマ割り込みを発生させるための構成を備える。
【０１２１】
第４の実施形態の情報処理装置は、プロセッサ１１の内部にタイマ１１７を備える。タイマ１１７は、時間を計測し、所定の時間が経過したときにタイマ割り込みを発生させる。
【０１２２】
情報処理装置は、プロセッサ１１内のタイマ１１７に代えて、プロセッサ１１の外部にタイマを設けることとしても良い。プロセッサ１１外部のタイマは、バス１２に接続され、バス１２を介してプロセッサ１１へタイマ割り込みを指示する。この場合、情報処理装置は、プロセッサ１１外部からタイマ割り込みを指示する以外は、プロセッサ１１内部にタイマ１１７を備える場合と同様に動作する。
【０１２３】
第４の実施形態において、タイマ設定コード１７１は、セキュア領域１４に配置される。タイマ設定コード１７１は、情報処理装置の起動により外部記憶装置（図示省略）からメモリ１３に読み込まれ、メモリ１３上にて展開される。タイマ設定コード１７１は、タイマ１１７の動作を設定するためのプログラムコードである。
【０１２４】
プロセッサ１１の起動後、セキュア状態での初期化の間であってノンセキュア状態への遷移より前に、プロセッサ１１は、セキュア領域１４からタイマ設定コード１７１を読み出す。プロセッサ１１は、タイマ設定コード１７１を実行することで、タイマ設定コード１７１の内容に応じてタイマ１１７の動作を設定する。タイマ設定コード１７１は、一定の時間が経過するごとにタイマ割り込みを発生させるための命令を含む。
【０１２５】
情報処理装置は、プロセッサ１１がノンセキュア状態にて動作しているときにタイマ割り込みが発生した場合、プロセッサ１１をセキュア状態へ切り換える。情報処理装置では、セキュア状態にて設定された割り込みがノンセキュア状態での動作時に発生した場合に、ノンセキュア状態からセキュア状態へ状態が切り換えられることが、ハードウェアの仕様として決められている。
【０１２６】
図１２は、タイマによる割り込みに応じてＮＳ側例外ハンドラコードを書き換える処理を説明するフローチャートである。ノンセキュア状態での動作において一定の時間が経過すると、タイマ１１７は、タイマ割り込みを発生させる（Ｓ７１）。
【０１２７】
プロセッサ１１は、タイマ割り込みに応じて、実行中の処理を強制的に中断する（Ｓ７２）。プロセッサ１１は、ノンセキュア状態からセキュア状態へ切り換える。セキュア状態にて、プロセッサ１１は、セキュア領域１４からＳ側例外ハンドラコード１３１を呼び出す。
【０１２８】
プロセッサ１１は、呼び出されたＳ側例外ハンドラコード１３１を実行することで、セキュア領域１４からＮＳ側例外ハンドラ書き換えコード１３２を呼び出す。プロセッサ１１は、ＮＳ側例外ハンドラ書き換えコード１３２の実行により、第１の実施形態と同様のＳ１１からＳ１９までの処理を行う。第４の実施形態では、ＮＳ側例外ハンドラ書き換えコード１３２の実行による処理に、Ｓ８１、Ｓ８２およびＳ８３の処理が追加されている。
【０１２９】
プロセッサ１１は、ＮＳ側仮想アドレス読み出し（Ｓ１１）、アドレス変換（Ｓ１２）を行う。Ｓ１２に続き、プロセッサ１１は、Ｓ１２でのアドレス変換に成功したか否かを判定する（Ｓ８１）。
【０１３０】
アドレス変換に成功している場合（Ｓ８１、Ｙｅｓ）、プロセッサ１１は、マッピング（Ｓ１３）、ＮＳ側例外ハンドラコード１３７からの命令読み出し（Ｓ１４）、戻り先アドレスの取得（Ｓ１５）を行う。Ｓ１５に続き、プロセッサ１１は、Ｓ１５での命令の解釈に成功した否かを判定する（Ｓ８２）。
【０１３１】
命令の解釈に成功している場合（Ｓ８２、Ｙｅｓ）、プロセッサ１１は、戻り先アドレスの格納（Ｓ１６）、命令の置き換え（Ｓ１７）を実施する。
【０１３２】
Ｓ１７に続き、プロセッサ１１は、タイマ１１７の設定を解除する（Ｓ８３）。そして、プロセッサ１１は、マッピング解除（Ｓ１８）、状態切り換え（Ｓ１９）を行う。
【０１３３】
Ｓ１５での命令の解釈に失敗した場合（Ｓ８２、Ｎｏ）、プロセッサ１１は、Ｓ１６，Ｓ１７およびＳ８３の処理をスキップし、Ｓ１８からの処理を行う。
【０１３４】
Ｓ１２でのアドレス変換に失敗した場合（Ｓ８１、Ｎｏ）、プロセッサ１１は、Ｓ１３からＳ１８までの処理をスキップし、Ｓ１９からの処理を行う。
【０１３５】
Ｓ１９での処理に続いて、プロセッサ１１は、ノンセキュア状態でのプログラム実行を、タイマ割り込みによる中断があった命令から再開させる（Ｓ７３）。第４の実施形態は、強制的に中断された命令から処理を再開させる点で、ＳＭＣ命令１１５の次の命令から処理を再開させる第１の実施形態の場合とは異なる。以上により、プロセッサ１１は、タイマ割り込みが発生した場合における一連の処理を終了する。
【０１３６】
タイマ割り込みは、ノンセキュア状態において例外ハンドラが初期化されるよりも前に発生する可能性がある。例外ハンドラが初期化されるよりも前にタイマ割り込みが発生した場合、アドレス変換（Ｓ１２）および命令の解釈（Ｓ１５）のいずれかが失敗することになる。
【０１３７】
プロセッサ１１は、アドレス変換あるいは命令解釈が失敗した場合に、ＮＳ側例外ハンドラコード１３７の書き換えを行わずに、ノンセキュア状態における処理を再開させる。この場合、プロセッサ１１は、再びタイマ割り込みが発生したときに、再度ＮＳ側例外ハンドラコード１３７の書き換えを試みる。プロセッサ１１は、Ｓ８１およびＳ８２での判定を実施することで、例外ハンドラの初期化がなされていない場合における書き換え処理を回避可能とする。
【０１３８】
情報処理装置は、セキュアモニタコール呼び出しがない場合でも、一定時間が経過したときに、スーパーバイザコールをチェックする機能を有効とすることができる。プロセッサ１１は、タイマ割り込み以外の割り込みに応じて、ＮＳ側例外ハンドラコード１３７を書き換えることとしても良い。
【０１３９】
第４の実施形態によると、情報処理装置は、割り込みの発生に応じて、ＮＳ側例外ハンドラコード１３７の書き換えのための処理を実施する。情報処理装置は、セキュアモニタコール呼び出しがない場合でも、割り込みが発生したときに、スーパーバイザコールをチェックする機能を有効とすることができる。情報処理装置は、セキュアモニタコール呼び出しの有無に関わらずスーパーバイザコールをチェック可能とすることで、セキュリティをさらに強化できる。
【０１４０】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１４１】
１１  プロセッサ、１３  メモリ、１４  セキュア領域、１５  ノンセキュア領域、１６  メモリ保護コントローラ、１１７  タイマ、１３２  ＮＳ側例外ハンドラ書き換えコード、１３４  ＮＳ側ＳＶＣチェックコード、１３５  ＮＳ側戻り先データ、１３７  ＮＳ側例外ハンドラコード、１４１  ＮＳ側メモリ読み出しコード、１５１  メモリ保護コントローラ設定コード、１７１  タイマ設定コード。
【図１】
2017010347.tif 000003
【図２】
2017010347.tif 000004
【図３】
2017010347.tif 000005
【図４】
2017010347.tif 000006
【図５】
2017010347.tif 000007
【図６】
2017010347.tif 000008
【図７】
2017010347.tif 000009
【図８】
2017010347.tif 000010
【図９】
2017010347.tif 000011
【図１０】
2017010347.tif 000012
【図１１】
2017010347.tif 000013
【図１２】
2017010347.tif 000014