JP5316148B2 - 情報処理装置およびデータ修復方法 - Google Patents

情報処理装置およびデータ修復方法 Download PDF

Info

Publication number
JP5316148B2
JP5316148B2 JP2009072040A JP2009072040A JP5316148B2 JP 5316148 B2 JP5316148 B2 JP 5316148B2 JP 2009072040 A JP2009072040 A JP 2009072040A JP 2009072040 A JP2009072040 A JP 2009072040A JP 5316148 B2 JP5316148 B2 JP 5316148B2
Authority
JP
Japan
Prior art keywords
information
task
area
memory area
stack
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009072040A
Other languages
English (en)
Other versions
JP2010224908A (ja
Inventor
正臣 寺西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2009072040A priority Critical patent/JP5316148B2/ja
Publication of JP2010224908A publication Critical patent/JP2010224908A/ja
Application granted granted Critical
Publication of JP5316148B2 publication Critical patent/JP5316148B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)

Description

本発明は、メモリ上で制御情報が改変されたときにオペレーティングシステムで行われるデータの修復処理に関わり、例えば、リアルタイム・オペレーティング・システム(リアルタイムOS)に適用可能な技術である。
オペレーティングシステム(OS)上でアプリケーションが動作するシステムにおいて、プログラムの不具合や悪意あるプログラムの実行などにより、メモリ上に格納されている制御情報が破壊されることや改変されることがある。メモリに格納される制御情報には、例えば、プロセッサの処理に用いられるスタックポインタ値やリターンポインタ値などのスタック領域上に格納される情報も含まれ、これらの情報が改変されるとシステムの暴走などを引き起こす恐れがある。このため、スタック領域に格納されている情報が改変されても、改変された情報を修復できるシステムが求められる。また、スタック領域に限らず、メモリ上の制御情報が改変された場合でも、制御情報が改変される前の情報に修復できることが望ましい。
関連する技術として、プログラムの実行によりリターンアドレスが書き換えられた場合にエラー出力をし、エラー出力によって改ざんを検知すると、予め保存された値で改ざんされたリターンアドレスを書き直す方法が知られている(特許文献1)。
再公表特許 WO2005/024630号
メモリ上の制御情報が改変されると、前述のとおり、システムの暴走などの予期しない動作が発生する恐れがある。上述した関連技術では、データの改変が検出されると、改変されたデータに予め保存された値を上書きすることにより改変部分のデータが修正される。しかし、例えば、タスクAのオーバーフローによりタスクBの制御情報が改変された場合には、タスクBについて保存されていた値を上書きすることによってオーバーフローした領域に記録されていたタスクAに関する情報を破壊してしまうことがある。つまり、関連技術として知られている方法では、改変された制御情報を修復するときに他の制御情報を書き換えることにより、システムを誤動作させる恐れがある。そこで、システムの誤動作を起こす可能性が低い修復方法が求められる。
本発明は、メモリ上の制御情報が改変されたときに、改変された情報を修復する方法や改変された情報の修復が可能な装置を提供することを目的とする。
本発明の1つの態様によると、第1のタスクに係る第1の情報および第2のタスクに係る第2の情報を格納する第1のメモリ領域を含む記憶部と、タスク処理部の処理対象が前記第2のタスクから他のタスクに変更されるときに前記第2の情報を前記第1のメモリ領域に格納し、前記第2の情報を第2のメモリ領域にも格納する記録部と、前記第2のタスクを前記タスク処理部の処理対象とするときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較する比較部と、前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、前記タスク処理部のアクセス先として前記第3のメモリ領域を指定するデータ修復部を備える情報処理装置が提供される。
メモリ上の制御情報が改変されても、改変された制御情報を修復することができる。
実施形態に係る情報処理システムの構成の一例を説明する図である。 実施形態(1)に係る修復方法を説明するフローチャートである。 実施形態(2)に係る修復方法を説明する図である。 実施形態(2)の修復方法で用いられるデータの格納方法の一例を示した図である。 ディスパッチの際にデータの改変を修復する場合の例を説明するフローチャートである。 データの修復方法の一例を説明するフローチャートである。 スタック情報を保持するスタック情報テーブルの一例である。 実施形態(3)で割り込みハンドラが行う動作を説明するフローチャートである。
図1は、実施形態に係る情報処理システムの構成の一例を説明する図である。図1に示すシステムでは、プロセッサ1、入力部2、モニタ3、及びメモリ4がバス5で接続されている。
プロセッサ1は、例えば、メモリ4に格納されたOS等を実行することにより、後述するタスク処理部、記録部、比較部、データ修復部、ディスパッチャ、割り込みハンドラなどとしての処理を行う。プロセッサ1は、プロセッサ1の処理に用いる情報を格納する内蔵メモリ(図示せず)を備え、その内蔵メモリに例えば、タスクの処理に用いるスタック情報などを格納することができる。スタック情報には、プログラムカウンタ(PC)、スタックポインタ(PS)、リターンポインタ(RP)、汎用レジスタに格納されている値などが例として挙げられる。内蔵メモリはプロセッサ1に内蔵されているため、プロセッサ1は、メモリ4に記憶されている情報へのアクセスにかかる時間よりも短時間で、内蔵メモリに格納されている情報へアクセスできる。ここで、内蔵メモリに格納される情報は、スタック情報に限られず、実装に応じて、その他の任意の情報とすることができる。なお、プロセッサ1は、組み込みシステムに用いられるマイクロコンピュータのプロセッサとすることができ、また、パーソナルコンピュータに搭載されるCPU(Central Processing Unit)などの任意のプロセッサとすることもできる。
入力部2は、データの入力に用いられ、キーボード、マウスなど、任意の入力デバイスとすることができる。モニタ3は、入力部2から入力される情報や、プロセッサ1からの出力結果などを視覚化する際に用いられ、任意の表示装置を用いることができる。
メモリ4は、プロセッサ1がアクセスできるメモリ領域であり、プロセッサ1の処理対象となるプログラムなどを格納する。また、メモリ4には、OSやアプリケーションで指定される処理に用いるデータも格納され、例えば、スタック情報を記録することもできる。プロセッサ1がマイクロコンピュータである場合には、メモリ4を、マイクロコンピュータのメモリとすることができるが、OSを用いる他の任意のシステムで用いられるメモリとすることもできる。
図2は、実施形態(1)に係る修復方法を説明するフローチャートである。図2では、タスクがディスパッチされるときと、タスクの割り込みが行われるときについて、改変された制御情報を修復する方法が記載されている。ここでは、改変されている制御情報は、スタック領域に格納されているスタック情報であるとする。また、複数のタスクの区別を容易にするために、実施形態(1)では、ディスパッチや割り込み処理が行われるときにプロセッサ1が処理対象としているタスクを「第1のタスク」(タスク1)とする。一方、第1のタスクからディスパッチもしくは割り込みによって新たに処理対象にされるタスクを「第2のタスク」(タスク2)とする。さらに、以下の説明では、第1のタスクや第2のタスクなどのタスクは、プロセッサ1によって実現されるタスク処理部が、各々のタスクの設定に応じて、処理しているものとする。
タスク処理部が第1のタスクを処理しているときに、ディスパッチが発生してディスパッチャが呼ばれると、ディスパッチャは、第1のタスクの処理に用いる情報をスタック領域に格納するなど、第1のタスクの退避処理を行う(ステップS1)。また、ディスパッチャは、第1のタスクの処理に用いる情報をバッファリングする(ステップS2)。ここで、第1のタスクの処理に用いる情報を、システム時刻等と関連づけてバッファリングすることもできる。なお、以下では、スタック領域に格納される情報を「スタック情報」と呼ぶことがある。
次に、比較部は、タスク処理の中断の前後でスタック情報の改変がないかをチェックする(ステップS5)。ここで、ディスパッチによりタスク処理部の処理対象となる第2のタスクについて、その第2のタスクが中断されていた間にスタック情報が改変されているかがチェックされる。タスク処理部が第2のタスクを実行したことがある場合には、第2のタスクから他のタスクに処理対象が変更されるときに第2のタスクの処理に用いる情報がスタック領域に記録されると共に、メモリ4にもバッファリングされている。そこで、比較部は、第2のタスクのスタック情報について、スタック領域上の情報と、退避処理後にメモリ4にバッファリングされた情報を比較する。スタック情報の比較については、後で詳しく述べる。
ステップS5において両者が不一致であることが検出された場合は、第2のタスクが退避されてから、ステップS1の処理で復帰されるまでの間にスタック領域上のスタック情報が改変されたことになる。そこで、データ修復部は、バッファリングされている第2のタスクについてのスタック情報をスタック領域にコピーし、第2のタスクのタスクコントロールブロック中のスタック情報に関する設定を変更する(ステップS6)。その後、ディスパッチャは、ステップS6で行われた設定に従って改変されていない第2のタスクのスタック情報を読み込んでディスパッチする。
また、割り込みが発生した場合にも、同様の処理が可能である。割り込みが発生して割り込みハンドラが起動されると、割り込みハンドラは、第1のタスクの処理に用いるスタック情報をバッファリングする(ステップS3、4)。割り込みによる第2のタスクの処理が終わると、第1のタスクについて、割り込み処理の前後でスタック情報の改変が起こっていないかが確認され、適宜、改変されたスタック情報が修復される(ステップS5、6)。すなわち、割り込みハンドラがバッファリングした情報と、スタック領域上の第1のタスクのスタック情報が一致しないときには、バッファリングされた情報を第1のタスクのスタック情報とする。
このように、ディスパッチや割り込み処理においてレジスタ情報の改変の有無をモニタして、いつのどのディスパッチ(もしくは割り込み)によってスタック破壊が生じたかを正確に解析した上で、破壊された情報を修復することができる。
図3は、実施形態(2)に係る修復方法を説明する図である。また、図4は、実施形態(2)の修復方法で用いられるデータの格納方法の一例を示した図である。図3、図4では、説明のために、内蔵メモリのうちのスタック情報が格納されている領域をスタック領域40としてプロセッサ1から分けて図示する。スタック領域40は内蔵メモリに設けられているため、前述のとおり、プロセッサ1は、スタック領域40に格納されている情報に短時間でアクセスできる。しかし、内蔵メモリはメモリ4に比べて容量が小さいため、スタック領域40の大きさや各タスクに割り当てられる領域も限られており、あるタスクについてスタックオーバーフローが発生すると、他のタスクのスタック情報が改変されることがある。さらに、スタック領域40の情報は、悪意のプログラム等による改変や破壊の対象とされやすい。従って、スタック領域40ではデータの改変が起こる可能性がある。一方、メモリ4は、スタック領域40に比べてデータのオーバーフローが起こる可能性や、悪意のプログラム等による攻撃を受ける可能性が低いため、メモリ4にバッファリングされたデータが改変される可能性は低いといえる。
ここでは、図3、図4を参照しながら、第1のタスクの処理中にスタックオーバーフローが発生して、第2のタスクのスタック領域上の情報が破壊された場合に行われる修復処理の例について述べる。以下の例では、タスク処理部の処理対象が、第2のタスクから第1のタスクにディスパッチされた後、第1のタスクから第2のタスクに再びディスパッチされるものとする。また、メモリ4に記録もしくはバッファリングされた情報は改変されないものとする。つまり、メモリ4にバッファリングされた第2のタスクのスタック情報は、第1のタスクへのディスパッチや第1のタスクの処理によっても改変されないので、ディスパッチ前のスタック情報と同じ値となる。従って、メモリ4にバッファリングされている第2のタスクのスタック情報は、第2のタスクのディスパッチ前のスタック情報ということができる。
なお、以下の説明では、ディスパッチまたは割込みに際してプロセッサ1からスタック領域に退避される情報は、レジスタ情報であるものとする。
(1)第2のタスクから第1のタスクにディスパッチされるとき、ディスパッチャは、第2のタスクの処理に用いられている情報(レジスタ情報2)を、スタック領域40に格納すると共に、メモリ4にもバッファリングする。図3および図4では、スタック領域40に格納される情報をスタック2a、メモリ4にバッファリングされる情報をスタック2bとする。このように、レジスタ情報2が、スタック2aおよびスタック2bとして保持されるため、この時点でスタック2aおよびスタック2bは互いに同じである。なお、スタック2aが格納される領域は、スタック領域40のうち、予めタスク2で指定されている領域である。
(2)ディスパッチャは、第1のタスクの復帰処理を行う。この復帰処理では、スタック領域40に格納されている第1のタスクのスタック情報(スタック1a)に改変が加えられているかを、比較部が確認する。この確認方法については後で詳しく述べるが、ここでは、スタック1aは改変されていなかったとする。すると、スタック領域40上のスタック1aを用いてタスク処理部が第1のタスクを処理しても問題は発生しない。そこで、ディスパッチャは、タスク処理部が短時間でアクセスできるスタック領域40の情報を用いて、第2のタスクから第1のタスクへディスパッチを実行する。
(3)タスク処理部がスタック1aを使用して第1のタスクを処理した結果、スタック領域40でオーバーフローが発生したとする。この例では、オーバーフローによりスタック2aの一部(図4の41)のデータが上書きされて、図4に示すようにスタック2aが破壊される。
(4)第1のタスクを中断してタスク処理部の処理対象が第2のタスクに戻るとき、ディスパッチャは、第1のタスクを退避させる。このとき、ディスパッチャは、手順(3)での処理後のレジスタ情報1をスタック領域40(スタック1a)とメモリ4(スタック1b)にそれぞれ保存する。
次に、第2のタスクを実行するためにスタック領域40上のスタック情報を使用できるかを確認するために、比較部は、スタック領域40のスタック2aと、メモリ4にバッファリングされているスタック2bとを比較する。図4に示すように、スタック2aは改変されているので、比較部は、この時点でスタック2aおよびスタック2bが互いに一致していないことを検出する。
(5)スタック2aおよびスタック2bが互いに一致しないことが検出されると、第2のタスクの処理に用いるスタック情報が修復される。データ修復部は、スタック2bをスタック領域40の空き領域にコピーする(図4のスタック2c)。前述のとおり、メモリ4では情報が改変されていないため、スタック2bは、第2のタスクが退避されたときのレジスタ情報2と同じである。従って、スタック2bをコピーすることにより得られるスタック2cは、改変されていないレジスタ情報2である。
(6)さらに、データ修復部は、第2のタスクのスタック情報を格納する領域として、スタック2cの格納領域を指定する。このアクセスアドレス変更では、例えば、図4に示すように、第2のタスクのタスクコントロールブロック(TCB)で設定されているスタック領域の先頭位置のアドレスを書き換えることができる。スタック情報の修復とスタック領域の設定変更が終わると、ディスパッチャは、修復後のスタック情報を用いて、第1のタスクから第2のタスクにディスパッチを実行する。
(7)メモリ4からのコピーにより得られたスタック2cを利用して第2のタスクの復帰が行われる。すなわち、タスク処理部は、改変されていないスタック情報を用いて第2のタスクを処理する。また、第2のタスクを中断して他のタスクが実行される場合には、第2のタスクについてのレジスタ情報2は、スタック領域40のスタック2cの領域に記録され、メモリ4にもバッファリングされる。
このような手順により、他のタスクの実行によるオーバーフローなどが原因でスタック情報が破壊された場合においても、スタック情報が破壊される前の情報に修復することができる。このため、改変されたスタック情報に基づいてタスクを実行することに起因するシステムの暴走も回避できる。本実施形態は、例えば、マルチタスクOS、マルチタスクOSを用いた組込みシステムなどに適用することができる。
本実施形態に係るデータ修復装置やデータ修復方法では、改変されたスタック情報が改変前のスタック情報へと自律的に修復されるため、OSなどの動作を停止させずにスタック情報を修復できる。従って、本実施形態は、動作を一時的にでも停止させることが望ましくないシステムに適用することができ、例えば、人工衛星や工場の生産ラインのFAシステム(factory automation system)などで用いられるOS、組み込みシステムなどに適用できる。
さらに、本実施形態に係る装置では、オーバーフローでスタック情報が破壊された第2のタスクについては、スタック領域40の別の領域(スタック2cが書き込まれる領域)にスタック情報を修復させるため、スタック情報の書き換えによる誤動作は発生しない。
また、本実施形態では手順(6)、(7)で説明したように、バッファリングしてあった改変前のスタック情報をコピーした領域(スタック2cが書き込まれる領域)を、スタック情報の修復後に第2のタスクのスタック情報を格納する領域とする。このため、スタック2aが格納されていた領域は、スタック情報の修復とともに手順(6)の処理によって開放され、他のタスクが使用できる空き領域になる。従って、図4に示したケースでは、第1のタスクのためのスタックがオーバーフローしているデータ部分(41)が、第2のタスクで用いられるスタック情報の修復によって発生した空き領域に格納されることになり、第1のタスクのスタック情報も変更されずに保存される。言い換えると、本実施形態では、各タスクについて確保されているスタック領域が小さすぎる場合でも、スタック破壊の修復により、各タスクの実行に十分なスタック領域の設定がOSなどによって自律的に行われるといえる。
図3と図4を参照しながら、記録部などがディスパッチャに含まれていない場合について述べたが、記録部、比較部、データ修復部の1つ以上をディスパッチャに含めることもできる。さらに、比較部は、ディスパッチャに読み込まれたスタック領域40上のスタック2aなどのデータをメモリ4にバッファリングした上で、メモリ4上にバッファリングしておいたデータと比較して差分を検出するように変形することもできる。また、上記の実施形態では、レジスタ情報が改変された場合について述べたが、改変される情報は、レジスタ情報に限られず、タスクの実行に係る任意の情報とすることができる。
図5は、ディスパッチの際にデータの改変を修復する場合の例を説明するフローチャートである。図5を参照しながら、記録部、比較部、データ修復部がディスパッチャに含まれている実施形態について述べる。また、ここでは、ディスパッチャが復帰させるタスクのレジスタ情報をメモリ4にバッファリングし、比較部が、メモリ4にバッファリングされたデータを用いてレジスタ情報が改変されているかを確認する場合について述べる。
第1のタスクからOSのシステムコールが呼び出されると、ディスパッチ処理が発生し、ディスパッチャが処理を開始する(ステップS11)。ディスパッチャは、第1のタスクの実行に用いられたレジスタ情報をスタック1aとして退避させ、さらに、スタック1bとしてバッファリングする(ステップS12、13)。
次に、スタック領域40に格納されているレジスタ情報が改変されているかを確認するために、スタック領域40に格納されている第2のタスクのレジスタ情報(スタック2a)をメモリ4にバッファリングする(ステップS14)。比較部は、スタック領域40からバッファリングされたスタック2aと、第2のタスクの退避の際にバッファリングされていたスタック2bとを比較し、差分があるかを確認する。差分が検出された場合はデータ修復部が修復する(ステップS15)。
図6は、データの修復方法の一例を説明するフローチャートである。図6を参照しながら、ステップS15の処理を詳しく説明する。比較部は、第2のタスクを退避させたときにバッファリングしたレジスタ情報と、スタック領域40に格納されているレジスタ情報を取得し、両者に差分があるかを確認する(ステップS21、22)。両者が一致しない場合には、スタック領域40に空きメモリ領域を獲得し、第2のタスクの退避の際にバッファリングしておいたレジスタ情報をコピーする(ステップS23、24)。その後、第2のタスクのタスクコントロールブロックの設定を変更し、スタック領域の先頭アドレスを、ステップS23で獲得した領域の先頭アドレスにする(ステップS25)。一方、ステップS22で、レジスタ情報が改変されていないことが確認されると修復処理を行わずに終了する。
このような処理を行うことにより、スタック領域上の情報が改変されても改変前の正しい情報を用いて第2のタスクを処理できる。
図3〜図6を参照しながら、ディスパッチの際に行われるスタック情報の修復について述べたが、割り込み処理の際にも同様に情報の修復ができる。また、記録部、比較部、データ修復部の1つ以上を割り込みハンドラに含めることもできる。割り込み処理の際に行われるスタック情報の修復でも、比較部は、メモリ4上にバッファリングされたスタック情報を比較することによって差分を検出することができ、また、バッファリングされたスタック情報をテーブルに保持することもできる。図7は、メモリ4にバッファリングされたスタック情報を保持するスタック情報テーブルの例である。「(LEAVE)」で表されている値は、タスクの退避に際して保存されたスタック情報であり、「(ENTER)」で表されている値は、タスクの復帰に際して読み出されたスタック情報である。
実施形態(3)として、第1のタスクの処理中に第2のタスクが割り込む場合に割り込みハンドラが行う動作について、図7を参照しながら説明する。ここでは割り込みハンドラには、記録部、比較部、データ修復部が含まれるものとし、スタック領域40上に格納されたレジスタ情報が改変された場合について述べる。
(1)割り込みハンドラは、第1のタスクの処理中に第2のタスクの割り込み処理を実行するために、第1のタスクのレジスタ情報をバッファリングする。このバッファリングでは、レジスタ情報は、スタック情報テーブルに記録される。また、第1のタスクのタスクIDを「1」として、プログラムカウンタ、スタックポインタ、リターンポインタの3種類のレジスタ情報についての退避値(LEAVE)が、図7に示すとおりに記録されたとする。
(2)タスク処理部に第2のタスクを実行させるために、割り込みハンドラは、第2のタスクの復帰処理をする。
(3)タスク処理部が第2のタスクを実行する。ここでは、第2のタスクの実行によってスタックオーバーフローが発生し、スタック領域40中で、第1のタスクのスタック情報が改変されたとする。
(4)第2のタスクの実行が終わると、割り込みハンドラは、第2のタスクの退避処理をする。
(5)割り込みハンドラは、スタック領域40に格納されている第1のタスクのスタック情報をメモリ4にバッファリングして、スタック情報テーブルに格納する。ここでは、タスクID「1」のタスクのプログラムカウンタ、スタックポインタ、リターンポインタについての復帰値(ENTER)が、図7に示すとおりに記録されたとする。
(6)比較部は、メモリ4のスタック情報テーブルを参照して、タスクID「1」の退避値(LEAVE)と復帰値(ENTER)を比較し、第1のタスクのスタック情報が改変されているかチェックする。タスクIDが「1」のタスクでは、プログラムカウンタ値が一致していないため、比較部は、スタック情報が改変されていることを検出する。
(7)第1のタスクについてスタック情報が改変されているので、データ修復部は、スタック領域40に空き領域を獲得して、スタック情報テーブルに記録されている退避値(LEAVE)をコピーする。さらに、第1のタスクのスタック情報を格納する領域を、退避値をコピーした領域に設定し、コピーされた退避値をスタック情報として割り込みハンドラに読み込ませる。これらの処理により、割り込みハンドラは、改変される前のスタック情報を取得した上で、第1のタスクの復帰処理をすることができる。
以上の処理により、割り込みの前後でスタック情報が改変されても、改変前のスタック情報を用いて第1のタスクの処理を継続できる。
図8は、実施形態(3)で割り込みハンドラが行う動作を説明するフローチャートである。なお、図8は、スタック領域にレジスタ情報が格納されているときの例である。
割り込みが発生すると、第1のタスクのレジスタ情報がスタック領域40に記録される。また、割り込みハンドラが起動されると、割り込みハンドラはメモリ4へ第1のタスク(タスク1)のレジスタ情報をバッファリングする(ステップS31、32)。
割り込みのタスクの実行が終わると、割り込みハンドラは、割り込みで処理したタスクの退避などの処理を行う(ステップS33)。スタック領域40に格納されている第1のタスクのレジスタ情報がメモリ4にバッファリングされると、比較部は、ステップS32でバッファリングしてあったレジスタ情報と比較する(ステップS34、35)。比較の結果、スタック領域40に格納されているレジスタ情報の改変が検出されると、データ修復部がレジスタ情報を修復する(ステップS35)。ステップS35の処理は、ディスパッチ処理の際の修復について、図6を参照しながら説明した修復方法と同様である。
比較部は、割り込み前後のレジスタ情報に差分があるかを確認し、差分がある場合には、データ修復部が、スタック領域40に空きメモリ領域を獲得して割り込み処理前のレジスタ情報をコピーする(ステップS21〜24)。その後、データ修復部は、第1のタスクで用いるスタック領域のアドレスを変更する(ステップS25)。一方、ステップS22で、割り込みの前後でレジスタ情報に変化がないことが確認されると修復処理を行わない。
このような手順により、割り込み処理のために第1のタスクを退避させている間に第1のタスクのスタック情報が破壊された場合においても、スタック情報を修復できる。このため、割り込み処理の際に、スタックのオーバーフローや悪意のあるプログラムによるスタック情報の書き換えなどが起こっても、スタック情報の改変に起因したシステムの暴走などを防止できる。
本実施形態も他の形態と同様に、任意のOSに適用できる。また、自律的にデータ修復することが可能であるため、動作を停止させることが望ましくないシステムに適用することができる。また、本実施形態でも、他の実施形態と同様に、スタック情報が改変されたタスクは、改変前のスタック情報をコピーした領域を修復後に使用する領域とするため、改変されたデータが格納されていた領域は、他のタスクなどに開放される。従って、システムの設計時に各タスクについて確保されているスタック領域が小さすぎるなどの問題がある場合でも、スタック破壊に伴うデータ修復を繰り返すことにより、スタック領域の設定がOSによって自律的に行われるといえる。
なお、本発明は上記の実施形態に限られるものではなく、様々に変形可能である。以下にその例をいくつか述べる。
以上の説明で、実施形態(1)〜(3)に分けて説明しているのは、理解を助けるためである。従って、例えば、いずれの実施形態においても、スタック情報テーブルを用いて情報の改変を検出することもできる。
以上の実施形態では、改変される情報をスタック情報として説明したが、実施形態(1)〜(3)に係るデータ修復を適用することができる情報は、スタック領域に格納されている情報に限られない。実装に応じてヒープ領域など他の任意のメモリ領域に格納される情報に適用することができる。また、上記の実施形態では、レジスタ情報が改変された場合について述べたが、改変される情報は、レジスタ情報に限られない。すなわち、実施形態(1)〜(3)のいずれにおいても、データ修復の対象は、タスクに係わる任意の情報とすることができる。
また、いずれの実施形態でも、スタック情報などの情報の一部をデータ修復の対象とすることもできる。例えば、プログラムカウンタ値についての改変をモニタして、改変が起こったときにデータ修復をすることもできる。いずれの実施形態においても、実装に応じて、スタック情報などの情報を、システム時刻などの他の任意の情報とともにバッファリングすることもできる。
実施形態(3)では、スタック情報テーブルがメモリ4にある場合について述べたが、実装に応じて、スタック領域40に格納することもできる。この場合には、比較部での比較や差分検出が早くなる。
いずれの実施形態でも、比較部やデータ修復部での処理が終わった後に、ディスパッチャなどが、スタック情報を取得する場合について述べたが、スタック情報の取得は、差分検出の前にすることもできる。この場合には、比較部やデータ修復部での処理によってデータが修復された後で、ディスパッチャなどが再度スタック情報を読み込んで、ディスパッチャが読み込んでいる情報に、改変される前のスタック情報(スタック2c)を上書きする。
情報の改変の検出と情報の修復は、ソフトウェアによる処理によって行うことができ、また、その一部をハードウェアによる処理に変更することもできる。ソフトウェアを用いる場合は、プロセッサ1を動作させるためのソフトウェアは、メモリ4に記録することができ、また、記憶媒体に記録されているソフトウェアを読み込むこともできる。ソフトウェアによって情報の改変の検出と情報の修復が行われる場合は、プロセッサ1、入力部2、モニタ3、メモリ4などを、例えば、コンピュータの一部として実現することもできる。
上述の各実施形態に対し、さらに以下の付記を開示する。
(付記1)
第1のタスクに係る第1の情報および第2のタスクに係る第2の情報を格納する第1のメモリ領域を含む記憶部と、
タスク処理部の処理対象が前記第2のタスクから他のタスクに変更されるときに前記第2の情報を前記第1のメモリ領域に格納し、前記第2の情報を第2のメモリ領域にも格納する記録部と、
前記第2のタスクを前記タスク処理部の処理対象とするときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較する比較部と、
前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、前記タスク処理部のアクセス先として前記第3のメモリ領域を指定するデータ修復部を備える
ことを特徴とする情報処理装置。
(付記2)
前記記憶部は、前記第3のメモリ領域を含むことを特徴とする付記1に記載の情報処理装置。
(付記3)
前記データ修復部は、前記第2の情報の格納領域のアドレスを前記第1のメモリ領域のアドレスから前記第3のメモリ領域のアドレスに変更する
ことを特徴とする付記1に記載の情報処理装置。
(付記4)
前記データ修復部は、前記第2の情報が格納される領域として前記タスク処理部がアクセスする領域を、前記第1のメモリ領域から前記第3のメモリ領域に変更することにより、前記第1のメモリ領域のうちの前記第2の情報が格納されていた領域を開放する
ことを特徴とする付記3に記載の情報処理装置。
(付記5)
前記第2の情報は前記タスク処理部が前記第2のタスクを処理する際に用いるレジスタ情報であり、
前記比較部は、前記第1および第2のメモリ領域に記録された前記レジスタ情報が一致するかを確認し、
前記データ修復部は、前記第1および第2のメモリ領域に記録された前記レジスタ情報が一致しないとき、前記第2のメモリ領域に記録されたレジスタ情報を前記第3のメモリ領域に複写して、前記第3のメモリ領域に記録されたレジスタ情報を前記タスク処理部が用いるレジスタに記録する
ことを特徴とする付記3に記載の情報処理装置。
(付記6)
ディスパッチの要求に応じて前記タスク処理部の処理対象が第2のタスクに変更される場合に、前記比較部は、前記第2のメモリ領域に記録された前記レジスタ情報と前記第1のメモリ領域に記録された前記レジスタ情報を比較する
ことを特徴とする付記5に記載の情報処理装置。
(付記7)
前記タスク処理部への割り込み処理が要求されたことにより、前記タスク処理部の処理対象が前記第1のタスクから前記第2のタスクに変更された場合に、前記比較部は、前記第2のメモリ領域に記録された前記レジスタ情報と前記第1のメモリ領域に記録された前記レジスタ情報を比較する
ことを特徴とする付記5に記載の情報処理装置。
(付記8)
コンピュータを
第1のタスクに係る第1の情報および第2のタスクに係る第2の情報を格納する第1のメモリ領域に、タスク処理部の処理対象が前記第2のタスクから他のタスクに変更されるときに前記第2の情報を格納し、前記第2の情報を第2のメモリ領域にも格納する記録手段、
前記第2のタスクを前記タスク処理部の処理対象とするときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較する比較手段、
前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、前記タスク処理部のアクセス先として前記第3のメモリ領域を指定するデータ修復手段
として機能させることを特徴とするデータ修復プログラム。
(付記9)
第1のタスクに係わる第1の情報および第2のタスクに係わる第2の情報を格納する第1のメモリ領域に、タスク処理部の処理対象が前記第2のタスクから他のタスクに変更されるときに前記第2の情報を格納し、前記第2の情報を第2のメモリ領域にも格納し、
前記第2のタスクを前記タスク処理部の処理対象とするときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較し、
前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、
前記タスク処理部のアクセス先として、前記第3のメモリ領域を指定する
ことを特徴とするデータ修復方法。
1 プロセッサ
2 入力部
3 モニタ
4 メモリ
5 バス
40 スタック領域
41 データが破壊されたスタック領域

Claims (8)

  1. 第1のタスクに係る第1の情報および第2のタスクに係る第2の情報を格納する第1のメモリ領域を含む記憶部と、
    タスク処理部の処理対象が前記第2のタスクから前記第1のタスクに変更されるときに前記第2の情報を前記第1のメモリ領域に格納し、前記第2の情報を前記第1のメモリ領域よりも改変が発生しにくい第2のメモリ領域にも格納する記録部と、
    前記タスク処理部の処理対象が前記第1のタスクから前記第2のタスクに変更されるときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較する比較部と、
    前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、前記タスク処理部の前記第2のタスクに関するアクセス先として前記第3のメモリ領域を指定するデータ修復部を備え
    前記第1のメモリ領域において前記第2のタスクに係る前記第2の情報の格納に使用した領域を、前記第1のタスクに関しての、前記タスク処理部のアクセス先として用いることを特徴とする情報処理装置。
  2. 前記データ修復部は、前記第2の情報の格納領域のアドレスを前記第1のメモリ領域のアドレスから前記第3のメモリ領域のアドレスに変更する
    ことを特徴とする請求項1に記載の情報処理装置。
  3. 前記データ修復部は、前記第2の情報が格納される領域として前記タスク処理部がアクセスする領域を、前記第1のメモリ領域から前記第3のメモリ領域に変更することにより、前記第1のメモリ領域のうちの前記第2の情報が格納されていた領域を開放する
    ことを特徴とする請求項2に記載の情報処理装置。
  4. 前記第2の情報は前記タスク処理部が前記第2のタスクを処理する際に用いるレジスタ情報であり、
    前記比較部は、前記第1および第2のメモリ領域に記録された前記レジスタ情報が一致するかを確認し、
    前記データ修復部は、前記第1および第2のメモリ領域に記録された前記レジスタ情報が一致しないとき、前記第2のメモリ領域に記録されたレジスタ情報を前記第3のメモリ領域に複写して、前記第3のメモリ領域に記録されたレジスタ情報を前記タスク処理部が用いるレジスタに記録する
    ことを特徴とする請求項2に記載の情報処理装置。
  5. 前記第1のメモリ領域は、前記第1の情報を格納するための第1の割り当て領域と前記第2の情報を格納するための第2の割り当て領域を含み、
    前記第1のタスクを前記タスク処理部の処理対象としているときに、前記第1の割り当て領域に対する前記第1の情報のオーバーフローが起こると、前記第2の割り当て領域に前記第1の情報が格納されることにより、前記第2の割り当て領域に格納された前記第2の情報が破壊される
    ことを特徴とする請求項1〜4のいずれか1項に記載の情報処理装置。
  6. 前記第1の割り当て領域と前記第2の割り当て領域は、前記第1のメモリ領域において連続するように設けられている
    ことを特徴とする請求項5に記載の情報処理装置。
  7. 前記記憶部は、前記第3のメモリ領域を含み、
    前記第3のメモリ領域は、前記記憶部のメモリ領域のうちの、前記第1の情報及び前記第2の情報を格納されていない空き領域である
    ことを特徴とする請求項1〜6のいずれか1項に記載の情報処理装置。
  8. 1のタスクに係る第1の情報および第2のタスクに係る第2の情報を格納する第1のメモリ領域に、タスク処理部の処理対象が前記第2のタスクから前記第1のタスクに変更されるときに前記第2の情報を格納し、
    前記第2の情報を前記第1のメモリ領域よりも改変が発生しにくい第2のメモリ領域にも格納し、
    前記タスク処理部の処理対象が前記第1のタスクから前記第2のタスクに変更されるときに、前記第1のメモリ領域に格納されている第2の情報と前記第2のメモリ領域に格納されている第2の情報を比較し、
    前記比較の結果、不一致が検出されると、前記第2のメモリ領域に格納されている前記第2の情報を第3のメモリ領域に複写し、
    前記タスク処理部の前記第2のタスクに関するアクセス先として前記第3のメモリ領域を指定し、
    前記第1のメモリ領域において前記第2のタスクに係る前記第2の情報の格納に使用した領域を、前記第1のタスクに関しての、前記タスク処理部のアクセス先として用いる
    処理をコンピュータに実行させることを特徴とするデータ修復プログラム。
JP2009072040A 2009-03-24 2009-03-24 情報処理装置およびデータ修復方法 Expired - Fee Related JP5316148B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009072040A JP5316148B2 (ja) 2009-03-24 2009-03-24 情報処理装置およびデータ修復方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009072040A JP5316148B2 (ja) 2009-03-24 2009-03-24 情報処理装置およびデータ修復方法

Publications (2)

Publication Number Publication Date
JP2010224908A JP2010224908A (ja) 2010-10-07
JP5316148B2 true JP5316148B2 (ja) 2013-10-16

Family

ID=43042025

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009072040A Expired - Fee Related JP5316148B2 (ja) 2009-03-24 2009-03-24 情報処理装置およびデータ修復方法

Country Status (1)

Country Link
JP (1) JP5316148B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015011436A (ja) * 2013-06-27 2015-01-19 株式会社デンソー プロセッサ

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6386035A (ja) * 1986-09-30 1988-04-16 Ricoh Co Ltd スタツクのプ−ル管理方式
JPH0731617B2 (ja) * 1989-05-19 1995-04-10 株式会社ピーエフユー プログラム暴走検知方法
JP2000132462A (ja) * 1998-10-27 2000-05-12 Hitachi Ltd プログラム自己修復方式
JP3986950B2 (ja) * 2002-11-22 2007-10-03 シャープ株式会社 Cpuおよびこれを備えた情報処理装置、cpuの制御方法
EP1662379A4 (en) * 2003-09-04 2008-12-03 Science Park Corp FALSE COORDINATE PROCEDURE AND PREVENTION PROGRAM
JP4447977B2 (ja) * 2004-06-30 2010-04-07 富士通マイクロエレクトロニクス株式会社 セキュアプロセッサ、およびセキュアプロセッサ用プログラム。
JP4813882B2 (ja) * 2004-12-24 2011-11-09 川崎マイクロエレクトロニクス株式会社 Cpu

Also Published As

Publication number Publication date
JP2010224908A (ja) 2010-10-07

Similar Documents

Publication Publication Date Title
US7774636B2 (en) Method and system for kernel panic recovery
US8782643B2 (en) Device and method for controlling communication between BIOS and BMC
EP3040854B1 (en) Method, apparatus and storage medium for dynamically patching function
JP5359601B2 (ja) ダンプ出力制御装置、ダンプ出力制御プログラム、ダンプ出力制御方法
JP2005316599A (ja) 割込制御装置
JP2005202523A (ja) コンピュータ装置及びプロセス制御方法
JP5316148B2 (ja) 情報処理装置およびデータ修復方法
JP2016066139A (ja) 車両制御装置
JP6218652B2 (ja) 計算機、障害処理方法及びプログラム
JP2006018684A (ja) タスク管理システム
US10540222B2 (en) Data access device and access error notification method
JP2008003940A (ja) 保護制御装置、保護制御方法及び保護制御プログラム
JP2007172414A (ja) 組込機器向けのコンパクトコアダンププログラム及びコンパクトコアダンプを用いた方法
WO2016121077A1 (ja) ダンプファイル生成方法及び装置
JPH11134204A (ja) スタック保護装置
JP6555908B2 (ja) 情報処理装置及びその制御方法、プログラム
JP5023169B2 (ja) 要実行パッチリスト作成装置および方法
JP5791524B2 (ja) Os動作装置及びos動作プログラム
JP2018067057A (ja) 制御プログラムの検証装置及びプログラム
JP7074291B2 (ja) 情報処理装置、情報処理方法及びプログラム
JP2005284925A (ja) コンピュータシステムおよびプログラム更新方法
JP5504876B2 (ja) プロセス異常復旧装置及びプロセス異常復旧方法
JP2007148529A (ja) バッファオーバーフロー検知装置、バッファオーバーフロー検知方法およびバッファオーバーフロー検知プログラム
JPH0319574B2 (ja)
JP2007272493A (ja) コンピュータシステム、データの正常性確認方法、及び、プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111125

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20121218

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130108

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130311

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130611

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130624

R150 Certificate of patent or registration of utility model

Ref document number: 5316148

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees