(57)【要約】【課題】プログラムカウンタの異常による不正アクセスを検出する電子制御装置を提供する。【解決手段】電子制御装置は、関数が正常に呼び出されるときの開始処理で、呼び出された関数の関数名をスタックに格納し（Ｓ４００）、関数本体の処理を実行すると（Ｓ４０２）、スタックから関数名を取り出す（Ｓ４０４）。関数が正常にＳ４００から呼び出されてＳ４０４の処理が実行されれば、スタックから取り出した関数名はＳ４００でスタックに格納した関数名と一致する筈である。電子制御装置は、スタックから取り出した関数名が実行中の関数名と一致しない場合（Ｓ４０６：Ｎｏ）、プログラムカウンタが異常になり関数が不正なアクセスにより途中から実行されたと判断する。電子制御装置は、関数が途中から実行されると関数の処理が適切に実行されないので、フェイルセーフ処理として、例えば自装置をリセットする（Ｓ４０８）。【選択図】図２
2014035741.tif 000002
【特許請求の範囲】
【請求項１】
プログラムカウンタ（２２）が示すアドレスの命令を読み出して複数の処理単位をそれぞれ実行する電子制御装置（１０）であって、
複数の前記処理単位のうち前記処理単位を識別するための識別情報が設けられている少なくとも一つの対象処理単位において、前記対象処理単位の実行が正常に開始されるときの開始処理で前記識別情報をスタックに格納する格納手段（２０、Ｓ４００）と、
前記対象処理単位の終了処理で前記スタックに格納されている前記識別情報を取り出す取り出し手段（２０、Ｓ４０４）と、
前記取り出し手段が前記スタックから取り出した前記識別情報と、実行中の前記対象処理単位の前記識別情報とを前記終了処理時に比較して一致しない場合、前記プログラムカウンタの異常による前記対象処理単位への不正アクセスであると判定する判定手段（２０、Ｓ４０６）と、
を備えることを特徴とする電子制御装置。
【請求項２】
前記対象処理単位として不正なアクセスを許可しない前記処理単位が選択されていることを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記プログラムカウンタの異常であると前記判定手段が判定すると、フェイルセーフ処理を実行するフェイルセーフ手段（２０、Ｓ４０８）を備えることを特徴とする請求項１または２に記載の電子制御装置。
【請求項４】
前記フェイルセーフ手段は前記フェイルセーフ処理として自装置をリセットすることを特徴とする請求項３に記載の電子制御装置。
【請求項５】
前記電子制御装置は車両に搭載される装置であることを特徴とする請求項１から４のいずれか一項に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムカウンタの異常による不正アクセスを検出する電子制御装置に関する。
【背景技術】
【０００２】
マイクロコンピュータ（以下、「マイコン」とも言う。）は、ＣＰＵがメモリに記憶されているプログラムの命令を読み出して実行することにより処理を行う。命令の読み出しアドレスはプログラムカウンタに示されており、処理の流れに応じてプログラムカウンタは更新される。
【０００３】
しかし、宇宙線、電磁ノイズ等の影響によりプログラムカウンタが異常な値に更新されると、実行中のプログラムの処理流れからはアクセスされない他のプログラムの命令をＣＰＵが読み出して実行するおそれがある。
【０００４】
この問題を解決するため、例えば特許文献１には、命令と命令との境界アドレスとプログラムカウンタが示すアドレスとを比較することにより、プログラムカウンタのアドレスが命令の境界アドレスよりも小さい値、境界アドレスに一致した値、境界アドレスよりも大きい値と順番に変化するか否かを判定し、境界アドレスに一致せずに更新されるとプログラムカウンタの異常と判定する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１８８６８８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１の技術では、プログラムカウンタが命令の境界アドレスと一致してから異常値に更新されると、プログラムカウンタの異常のために実行中の処理単位から他の処理単位を不正にアクセスしても、不正アクセスであることを検出できないおそれがある。
【０００７】
本発明は上記課題を解決するためになされたものであり、プログラムカウンタの異常による不正アクセスを検出する電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の電子制御装置によると、複数の処理単位のうち処理単位を識別するための識別情報が設けられている少なくとも一つの対象処理単位において、対象処理単位の実行が正常に開始されるときの開始処理で識別情報をスタックに格納し、対象処理単位の終了処理でスタックに格納されている識別情報を取り出す。
【０００９】
その結果、対象処理単位が開始処理からではなく不正なアクセスにより途中から実行されると、開始処理が実行されないために実行中の対象処理単位の識別情報がスタックに格納されない。この場合、対象処理単位の終了処理でスタックから取り出した識別情報と実行中の対象処理単位の識別情報とが一致しない。
【００１０】
したがって、スタックから取り出した識別情報と、実行中の対象処理単位の識別情報とを対象処理単位の終了処理時に比較して一致しない場合、プログラムカウンタの異常により該当する対象処理単位が不正にアクセスされたと判定できる。
【００１１】
尚、本発明に備わる複数の手段の各機能は、構成自体で機能が特定されるハードウェア資源、プログラムにより機能が特定されるハードウェア資源、またはそれらの組合せにより実現される。また、これら複数の手段の各機能は、各々が物理的に互いに独立したハードウェア資源で実現されるものに限定されない。
【図面の簡単な説明】
【００１２】
【図１】本実施形態による電子制御装置を示すブロック図。
【図２】関数名を用いたアクセスチェック処理を示すフローチャート。
【図３】スタックの変化を示す説明図。
【図４】不正アクセスにおけるスタックの変化を示す説明図。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図に基づいて説明する。
図１に示す電子制御装置（Electronic Control Unit：ＥＣＵ）１０は、例えば車両に搭載されており、ＣＰＵ２０、ＲＯＭ３０、ＲＡＭ４０、図示しない入出力インタフェース等からなるマイクロコンピュータにより主に構成されている。ＣＰＵ２０は、プログラムカウンタ２２が示すアドレスの命令を読み出してＲＯＭ３０等に記憶されたプログラムを実行することにより、各種処理を実行する。
【００１４】
ＲＯＭ３０の記憶領域は、複数の重要プログラムを記憶している重要プログラム領域３２と、複数の通常プログラムを記憶している通常プログラム領域３４とに分割されている。ＲＡＭ４０の記憶領域は、重要データを記憶する重要データ領域４２と、通常データを記憶する通常データ領域４４とに分割されている。
【００１５】
ＣＰＵ２０は、プログラムが他のプログラムにアクセスするとき、両方のプログラムのアドレスをチェックすることにより、重要プログラム領域３２から重要プログラム領域３２または通常プログラム領域３４へのアクセス、ならびに通常プログラム領域３４から通常プログラム領域３４へのアクセスであれば許可し、通常プログラム領域３４から重要プログラム領域３２へのアクセスであれば禁止する。
【００１６】
また、プログラムがデータにアクセスするとき、プログラムアドレスとデータアドレスとをチェックすることにより、重要プログラム領域３２から重要データ領域４２または通常データ領域４４へのアクセス、ならびに通常プログラム領域３４から通常データ領域４４へのアクセスであれば許可し、通常プログラム領域３４から重要データ領域４２へのアクセスであれば禁止する。
【００１７】
ここで、プログラムが他のプログラムにアクセスするとき、重要プログラム領域３２から重要プログラム領域３２または通常プログラム領域３４へのアクセス、ならびに通常プログラム領域３４から通常プログラム領域３４へのアクセスは、前述したように領域レベルでは許可されている。
【００１８】
しかし、宇宙線、電磁ノイズ等によりプログラムカウンタの値が異常値に更新されると、プログラムが正常な開始処理からではなく途中から不正なアクセスにより実行されるおそれがある。領域レベルではアクセスが許可されているプログラムであっても、プログラムを正常な開始処理からではなく途中から実行すると、適正な処理を実行できない。
【００１９】
本実施形態では、プログラムを構成する関数を処理単位とし、関数を識別するための識別情報として関数名を採用している。そして、関数名を格納して取り出すための識別情報用スタック（以下、単に「スタック」とも言う。）をＲＡＭ４０に設けている。
【００２０】
重要プログラムを構成する関数であれば重要データ領域４２または通常データ領域４４のどちらにスタックを設けてもよく、通常プログラムを構成する関数であれば通常データ領域４４にスタックを設ける。尚、関数に代えてタスクを処理単位としてよい。
【００２１】
（アクセスチェック処理）
識別情報を用いたアクセスチェック処理を図２に示す。図２において、「Ｓ」はステップを表わしている。
【００２２】
ＣＰＵ２０は、関数が正常に呼び出されるときの開始処理で、呼び出された関数の関数名をスタックに格納し（Ｓ４００）、関数本体の処理を実行する（Ｓ４０２）。図３に示すように、関数Ａ、Ｂ、Ｃには関数Ａ、Ｂ、Ｃを識別するための識別情報として関数名を表わす「Ａ」、「Ｂ」、「Ｃ」がそれぞれ設定されており、関数が呼び出されると関数名がスタックに格納される。
【００２３】
関数本体の処理を終了すると、スタックから関数名を取り出す（Ｓ４０４）。この場合、スタックに格納されている関数名がなくスタックが空であるかを判定し、スタックが空の場合は関数名を取り出さず、取り出す関数名としてブランクを設定する等の処理を行うことが望ましい。
【００２４】
関数が正常に開始処理から呼び出され、Ｓ４００の処理が実行されてからＳ４０４の処理が実行されれば、スタックから取り出した関数名はＳ４００でスタックに格納した関数名と一致する筈である。
【００２５】
これに対し、図４の関数Ｂのように関数Ｃから不正にアクセスされて途中から実行され、Ｓ４００の開始処理が実行されずにＳ４０４でスタックから関数名が取り出されると、関数ＢのＳ４０４でスタックから取り出された関数名は関数Ｃがスタックに格納した「Ｃ」であり、自身の関数名である「Ｂ」と一致しない。
【００２６】
そこで、ＣＰＵ２０は、スタックから取り出した関数名が実行中の自関数の関数名と一致するか否かを判定する（Ｓ４０６）。スタックから取り出した関数名が自身の関数名と一致する場合（Ｓ４０６：Ｙｅｓ）、プログラムカウンタは正常であり関数は開始処理から正常に呼び出されたと判断し、ＣＰＵ２０は本処理を終了する。
【００２７】
領域レベルではアクセスが許可されている関数であっても、スタックから取り出した関数名が自身の関数名と一致しない場合（Ｓ４０６：Ｎｏ）、ＣＰＵ２０は、プログラムカウンタが異常になり関数が不正なアクセスにより途中から実行されたと判断する。関数が途中から実行されると関数の処理が適切に実行されないので、ＣＰＵ２０はフェイルセーフ処理として、例えば自ＥＣＵをリセットする（Ｓ４０８）。
【００２８】
車両に搭載されるＥＣＵの場合には、ガソリンエンジンの場合にはスロットル開度を制限して吸気量を低減したり、ディーゼルエンジンの場合にはインジェクタからの噴射量を低減したり、あるいは変速段を固定にしたりして退避走行を実現するフェイルセーフ処理を実行してもよい。
【００２９】
また、複数の関数のすべてを、識別情報である関数名をスタックに格納してアクセス状態をチェックする対象となる対象処理単位としてもよいし、途中から不正アクセスされると重大な障害を引き起こすので不正アクセスを許可しない重要な関数だけを対象処理単位としてもよい。
【００３０】
識別情報をスタックに格納する重要な関数として、車両に搭載されるＥＣＵの場合には、ガソリンエンジンであれば吸気量制御、ディーゼルエンジンであれば噴射量制御、さらに過給制御、ブレーキ油圧制御、パワーステアリング制御等を実行する関数等が考えられる。
【００３１】
このように、すべての関数ではなく重要な関数だけを、識別情報をスタックに格納する対象処理単位とすることにより、識別情報をスタックに格納しない関数について、ＲＯＭ、ＲＡＭの記憶容量および処理負荷を低減できる。
【００３２】
また、重要プログラム領域３２から重要プログラム領域３２または通常プログラム領域３４のように、記憶されている領域レベルでは関数へのアクセスが許可されている場合であっても、プログラムカウンタの異常により正常な開始処理からではなく途中から関数が実行されたことをスタックから取り出した関数名と自関数の関数名とを比較して検出することにより、プログラムカウンタの異常による不正アクセスであることを検出できる。
【００３３】
また、プログラムカウンタが実行中の関数の命令の境界アドレスと一致してから異常値に更新されて他の関数を途中から実行しても、プログラムカウンタの異常による不正アクセスであることを検出できる。
【００３４】
［他の実施形態］
上記実施形態では、関数Ａ、Ｂ、Ｃを識別するための識別情報として関数名である「Ａ」、「Ｂ」、「Ｃ」をそれぞれ設定した。これに対し、関数名と関係のない数字、あるいは関数の終了アドレスが分かる場合には終了アドレスを識別情報として採用してもよい。
【００３５】
本発明の電子制御装置は、車両に搭載される装置に限らず、処理単位のアクセス状態に基づいてプログラムカウンタの異常による不正アクセスを検出することを目的とするのであれば、どのような用途に使用される電子制御装置に適用してもよい。
【００３６】
このように、本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々の実施形態に適用可能である。
【符号の説明】
【００３７】
１０：ＥＣＵ（電子制御装置、格納手段、取り出し手段、判定手段、フェイルセーフ手段）、２２：プログラムカウンタ
【図１】
2014035741.tif 000003
【図２】
2014035741.tif 000004
【図３】
2014035741.tif 000005
【図４】
2014035741.tif 000006