(57)【要約】【課題】  ＣＦＩ技術を用いつつ、かつドメインに依存せず、プログラム実行時のオーバーヘッドを抑制すること。【解決手段】  本発明の電子制御装置２０は、関数と前記関数のコール／リターン関係である制御フローとを有するとともに、前記制御フローが正しく実行されるかをチェックするチェック処理命令がプログラムコード内に挿入されているプログラム、を保存するメモリ１００と、前記関数の使用頻度を示す使用頻度情報が入力される入力部２０１と、前記電子制御装置の負荷量を測定する測定部２０２と、前記使用頻度情報及び前記負荷量に基づいて、実行する前記チェック処理命令を決定する実行対象決定部２０３と、前記プログラムの実行時に、決定された前記チェック処理命令を実行する演算部２０４と、を有する。【選択図】図５
2019012498.tif 000002
【特許請求の範囲】
【請求項１】
電子制御装置（２０）であって、
関数と前記関数のコール／リターン関係である制御フローとを有するとともに、前記制御フローが正しく実行されるかをチェックするチェック処理命令がプログラムコード内に挿入されているプログラム、を保存するメモリ（１００）と、
前記関数の使用頻度を示す使用頻度情報が入力される入力部（２０１）と、
前記電子制御装置の負荷量を測定する測定部（２０２）と、
前記使用頻度情報及び前記負荷量に基づいて、実行する前記チェック処理命令を決定する実行対象決定部（２０３）と、
前記プログラムの実行時に、決定された前記チェック処理命令を実行する演算部（２０４）と、
を有する電子制御装置。
【請求項２】
前記チェック処理命令の出力を監視し、前記関数のコール／リターンの異常を検知する検知部（２０５）と、
前記検知部の検知結果に基づき、所定の処理を行う処理部（２０６）と、
を更に備える、請求項１記載の電子制御装置。
【請求項３】
当該電子制御装置は車両に搭載されており、
前記使用頻度情報は、前記車両の外部環境に関する情報である外部環境情報と前記関数の前記使用頻度との相関を示す情報である、
請求項１記載の電子制御装置。
【請求項４】
前記メモリはさらに負荷量閾値を保存し、
前記使用頻度情報は、前記関数の前記使用頻度が前記外部環境情報によって変化しない場合には前記チェック処理命令をスキップしないことを示すスキップ不可情報であり、前記使用頻度が前記外部環境情報によって変化する場合には前記チェック処理命令をスキップすることを示すスキップ可情報であり、
前記実行対象決定部は、前記負荷量と前記負荷量閾値とを比較し、前記負荷量が前記負荷量閾値よりも高い場合に、挿入された前記チェック処理命令のうち、前記使用頻度情報が前記スキップ不可情報である前記関数の前記制御フローをチェックするチェック処理命令のみを実行することを決定する、
請求項３記載の電子制御装置。
【請求項５】
前記メモリはさらに負荷量閾値を保存し、
前記使用頻度情報は、前記関数の前記使用頻度が所定の使用頻度よりも低い場合には前記チェック処理命令をスキップしないことを示すスキップ不可情報であり、前記所定の使用頻度よりも高い場合には前記チェック処理命令をスキップすることを示すスキップ可情報であり、
前記実行対象決定部は、前記負荷量と前記負荷量閾値とを比較し、前記負荷量が前記負荷量閾値よりも高い場合に、挿入された前記チェック処理命令のうち、前記使用頻度情報が前記スキップ不可情報である前記関数の前記制御フローをチェックするチェック処理命令のみを実行することを決定する、
請求項１又は３記載の電子制御装置。
【請求項６】
前記メモリはさらに、負荷量閾値と使用頻度閾値とを保存し、
前記実行対象決定部は、前記負荷量と前記負荷量閾値とを比較し、前記負荷量が前記負荷量閾値よりも高い場合に、挿入された前記チェック処理命令のうち、前記使用頻度情報に示された前記使用頻度が前記使用頻度閾値よりも低い前記関数の前記制御フローをチェックするチェック処理命令のみを実行することを決定する、
請求項１又は３記載の電子制御装置。
【請求項７】
前記実行対象決定部は、前記負荷量が増加するほど、前記使用頻度情報に示された前記使用頻度が高い前記関数の前記制御フローをチェックするチェック処理命令から順に実行対象から外すことを決定する、
請求項１又は３記載の電子制御装置。
【請求項８】
前記使用頻度情報は、当該電子制御装置のユーザによって予め設定される、
請求項１記載の電子制御装置。
【請求項９】
前記プログラムの実行時に前記関数の前記使用頻度を求める使用頻度算出部をさらに備え、
前記使用頻度情報は、前記使用頻度算出部にて求めた前記使用頻度に基づいて更新される、
請求項１記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バッファオーバーフロー攻撃に対して耐性を有する電子制御装置に関し、主として自動車の車載システムに搭載される電子制御装置に関するものである。
【背景技術】
【０００２】
バッファオーバーフロー攻撃は、実行中のプログラムのメモリ内に攻撃者の作成したプログラムが送り込まれることにより実行され、この結果、コンピュータの制御が奪われてしまう。具体的には、攻撃者が送り込んだプログラムによって、例えばスタックに置かれたリターンアドレスが変更され、当該プログラムに制御が移ることによりコンピュータの制御が奪われてしまうものである。
【０００３】
バッファオーバーフロー攻撃に対しては様々な解決策が提案されている、その一つに攻撃者がリターンアドレスを修正することを許容するが、損害が生じる前にこの変更を検出する制御フローインテグリティ（ＣＦＩ）技術がある。しかし、ＣＦＩにおいては、プログラム実行に際してチェック処理に時間を要するという課題を有している。
【０００４】
かかる課題を解決するため、例えば特許文献１には、プログラム命令を特定領域のメモリに格納し、ジャンプ／リターン時に目的アドレスをマスクすることで、攻撃者が単純にジャンプ／リターンアドレスを修正しても有用な操作を行うことを制限することでチェック処理によるオーバーヘッドが生じるという課題を解決することが記載されている。
【０００５】
また、特許文献２には、時間的オーバーヘッド、および空間的オーバーヘッドを抑制しつつ、ドメイン間の実行制限を考慮して、非信頼ドメインからの関数コール時と関数リターン時のアドレスチェックを効率よく行うことが記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１１−８７７８号公報
【特許文献２】特開２０１１−１２３６５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、特許文献１では、従来のＣＦＩ技術とは異なるアプローチであり、ＣＦＩ技術に対して直接適用できるものではない。
【０００８】
また、特許文献２では、非信頼ドメイン内の関数コール／リターンはチェック対象外となってしまい、非信頼ドメイン内では不適切な関数コール／リターンによって、設計者の意図しない命令列を実行してしまう恐れがある。
【０００９】
本発明の目的は、ＣＦＩ技術を用いつつ、かつドメインに依存せず、プログラム実行時のオーバーヘッドを抑制することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の電子制御装置（２０）は、
関数と前記関数のコール／リターン関係である制御フローとを有するとともに、前記制御フローが正しく実行されるかをチェックするチェック処理命令がプログラムコード内に挿入されているプログラム、を保存するメモリ（１００）と、
前記関数の使用頻度を示す使用頻度情報が入力される入力部（２０１）と、
前記電子制御装置の負荷量を測定する測定部（２０２）と、
前記使用頻度情報及び前記負荷量に基づいて、実行する前記チェック処理命令を決定する実行対象決定部（２０３）と、
前記プログラムの実行時に、決定された前記チェック処理命令を実行する演算部（２０４）と、
を有する。
【発明の効果】
【００１１】
本発明の電子制御装置によれば、ＣＦＩ技術を用いつつ、かつドメインに依存せず、プログラム実行時のオーバーヘッドを抑制することができる。
【図面の簡単な説明】
【００１２】
【図１】実施形態１の電子制御装置及び当該電子制御装置に搭載されるプログラムの生成に関係する装置の配置を示す配置図
【図２】実施形態１の電子制御装置で用いられるプログラムの生成方法における各ステップを説明する説明図
【図３】実施形態１の電子制御装置で用いられるプログラムの生成方法における抽出ステップを説明する説明図
【図４】実施形態１の電子制御装置で用いられるプログラムの構成を説明する説明図
【図５】実施形態１の電子制御装置の構成を示す構成図
【図６】実施形態１の電子制御装置がチェック処理命令の実行対象の決定に用いる実行対象テーブルを説明する説明図
【図７】実施形態１の電子制御装置で用いられるプログラムの構成を説明する説明図
【図８】実施形態１の電子制御装置の動作を示す説明図
【図９】実施形態１の変形例１の電子制御装置がチェック処理命令の実行対象の決定に用いる実行対象テーブルを説明する説明図
【図１０】実施形態２の電子制御装置がチェック処理命令の実行対象の決定に用いる実行対象テーブルを説明する説明図
【図１１】実施形態３において説明する負荷量と関数の使用頻度との対応を示す図
【図１２】実施形態３において説明する負荷量と関数の使用頻度との対応を示す図
【図１３】実施形態３の電子制御装置で用いられるプログラムの構成を説明する説明図
【図１４】実施形態３において説明する負荷量と関数の使用頻度との対応を示す図
【発明を実施するための形態】
【００１３】
以下、本発明の電子制御装置の構成及び機能について、図面を参照して説明する。なお、本発明とは、特許請求の範囲又は課題を解決するための手段の項に記載された発明を意味するものであり、以下の実施形態に限定されるものではない。また、鉤括弧内の語は、特許請求の範囲又は課題を解決するための手段の項に記載された語を意味し、同じく以下の実施形態に限定されるものではない。
また、特許請求の範囲の従属項に記載の構成及び方法、および従属項に記載の構成及び方法に対応する実施形態の構成及び方法は、本発明においては任意の構成及び方法である。
【００１４】
なお、以下の実施形態は、主として自動車の車載用電子制御装置および当該電子制御装置に書き込まれるプログラムを例として説明するが、本発明は、特許請求の範囲で限定がない限り、車載用途以外の電子制御装置やプログラムも含むものである。
【００１５】
（各実施形態に共通の構成）
図１は、本発明の実施形態に共通の各種装置の配置を示すものである。自動車の車載ネットワーク１０には、Ｎ個の電子制御装置（ＥＣＵ）２０、プログラム生成装置３０、車両制御装置４０、表示装置５０、データコミュニケーションモジュール（ＤＣＭ）６０、車両動作状態取得装置７０、等が接続されている。なお、プログラム生成装置３０は、常時車載ネットワーク１０に接続されていてもよいし、必要なときのみコネクタとケーブル等を用いて接続されてもよい。また、プログラム生成装置３０に代えて、データコミュニケーションモジュール６０を介して無線通信を用いて、常時又は必要なときのみプログラム生成装置８０が接続されてもよい。
【００１６】
まず、本発明の電子制御装置２０において実行されるプログラムの生成方法及び生成されるプログラムについて説明する。
【００１７】
図２は、電子制御装置２０において実行されるプログラムの生成方法を示すフローチャートである。電子制御装置２０において実行されるプログラムは、図１に記載の、演算装置（ＣＰＵ）およびメモリを有する専用又は汎用のプログラム生成装置３０またはプログラム生成装置８０を用いて生成されるが、これに代えて、プログラムが書き込まれる対象である電子制御装置（ＥＣＵ）２０等の内部で生成されてもよい。
【００１８】
まず、電子制御装置２０に書き込まれるプログラムの「プログラムコード」内の「関数」、および関数のコール／リターン関係である制御フローを抽出する（Ｓ１０１）。
【００１９】
ここで、本発明の「プログラムコード」とは、機械語やアセンブリ言語で記述されたものの他、高級言語で記述されたものも含む。
また、本発明の「関数」とは、狭義の関数の他、メソッドと呼ばれるものも含む。
【００２０】
図３は、プログラムコードから抽出した関数及び制御フローを、制御フローグラフ（ＣＦＧ）として示したものである。図３の例では、プログラムコードから関数Ａから関数Ｆが抽出されるとともに、各関数のコール／リターン関係である制御フローが抽出されている。
【００２１】
次いで、関数のコール／リターンが正しく行われるか、すなわち、制御フローが正しく実行されるかをチェックするチェック処理命令をプログラムコード内に「挿入」する（Ｓ１０２）。このチェック処理命令は挿入された箇所の制御フローを全てチェックするものであるが、後述するように、特定の条件下では、挿入された箇所の制御フローのうち特定の制御フローのみをチェックする。
なお、本実施形態では、プログラムを構成する全ての制御フローをチェックできるようにチェック処理命令が挿入されているが、プログラムを構成する制御フローの一部のみをチェックするようにチェック処理命令が挿入されていてもよい。
【００２２】
ここで、本発明の「挿入」とは、プログラムコード内にチェック処理命令が直接記述されている場合の他、ジャンプ命令を介してサブルーチンあるいはモジュールとして設ける場合も含む。
【００２３】
最後に、このようなチェック処理命令が挿入されたプログラムコードを有するプログラムが実装対象の電子制御装置２０に書き込まれる（Ｓ１０３）。なお、生成したプログラムは、車載ネットワーク１０、又はＤＣＭ６０を介して、プログラムが実行される電子制御装置（ＥＣＵ）に書き込まれる。プログラムが書き込まれ、かつ実行される電子制御装置（ＥＣＵ）には、狭義の電子制御装置２０の他、車両制御部４０、表示装置５０、ＤＣＭ６０、その他車載ネットワーク１０に接続された情報処理装置すべてが含まれる。
【００２４】
図４は、チェック処理命令を挿入したプログラムを模式的にＣＦＧとして示すものである。図４に示すとおり、関数ＡないしＦそれぞれから異なる関数への遷移時のフローチェック処理を行うチェック処理命令がプログラムコード内にそれぞれ挿入されている。
【００２５】
つまり、以上の方法で生成されたプログラム（以下、本件プログラムという）は、関数ＡないしＦ（本発明の「関数」に相当）、及び関数のコール／リターン関係である制御フロー（本発明の「制御フロー」に相当）をプログラムコード内に含むプログラムであり、制御フローが正しく実行されるかをチェックするチェック処理命令がプログラムコード内に挿入されているプログラムである。
【００２６】
なお、チェック処理命令の例として、あらかじめ把握している正しいコール／リターン先と、実行予定のプログラムにおけるコール／リターン先を比較して、一致すればプログラムを実行し、一致しなければプログラムの実行を停止するという命令が挙げられるが、これに限るものではない。
【００２７】
（実施形態１）
本件プログラムを搭載した電子制御装置２０の構成を、図５を用いて説明する。電子制御装置２０は、メモリ１００及び中央演算装置（ＣＰＵ）２００から構成される。
【００２８】
メモリ１００は、本件プログラムを保存している。本実施形態１では、メモリ１００はさらに、本件プログラムに加えて、後述する使用頻度情報を規定する実行対象テーブルと、ＣＰＵ使用率の閾値（本発明の「負荷量閾値」に対応）とを保存しており、これらの情報は電子制御装置の「ユーザ」によって予め設定されている。
【００２９】
ここで、本発明の「負荷量閾値」とは、特定の負荷量である場合の他、条件に応じて所定の演算により求まる負荷量も含む。また、負荷量閾値は単数の場合の他、複数であってもよい。また、本発明の「ユーザ」とは、例えば、電子制御装置を搭載する車両のディーラー又は製造業者だけでなく、電子制御装置の製造業者をも含む。
【００３０】
中央演算装置２００の入力部２０１には、メモリ１００から、あるいは、車載ネットワーク１０から、本件プログラムを構成する関数の「使用頻度」を「示す」使用頻度情報が入力される。本実施形態１では、入力部２０１には、使用頻度情報を規定した実行対象テーブル及びＣＰＵ使用率の閾値が、これらの情報を保存しているメモリ１００から入力される。
【００３１】
ここで、本発明の「使用頻度」とは、当該関数を実行する回数の他、当該関数を実行した合計時間、当該関数の使用率、当該関数の実行回数の変化率等、使用の程度を示すものであれば足りる。また、本発明の「示す」とは、直接的に示すものの他、間接的に示すものも含む。すなわち、直接使用頻度を表現するもののほか、他情報と使用頻度との（相関）関係や、使用頻度に基づいて定義されたものも含む概念である。
【００３２】
本実施形態１では、後述する特定の条件下においてチェック処理命令をスキップして制御フローをチェックしない関数の使用頻度情報は『スキップ可』（本発明の「スキップ可情報」に対応）を示し、特定の条件下においてもチェック処理命令をスキップせずに実行して制御フローをチェックする関数の使用頻度情報は『スキップ不可』（本発明の「スキップ不可情報」に対応）を示す。そして、使用頻度情報が『スキップ可』又は『スキップ不可』のいずれを示すかは、関数の使用頻度が、電子制御装置２０が搭載された車両の「外部環境」に関する情報である外部環境情報に依存するか否かによって定められる。ここでは、関数の使用頻度が外部環境情報によって変化する場合には、使用頻度情報は『スキップ可』を示し、関数の使用頻度が外部環境情報によって変化せず一定の場合には、使用頻度情報は『スキップ不可』を示す。
つまり、本実施形態１の使用頻度情報は、外部環境情報と関数の使用頻度との相関を示す情報である。
【００３３】
ここで、本発明の「外部環境」とは、車両の外部の環境を意味し、例えば、車両の周囲を走行する他車両の台数や天候等が挙げられる。
【００３４】
図６は、本実施形態の実行対象テーブルの例である。この例の関数Ａ〜Ｆは、車車間通信に関するプログラムのプログラムコードから抽出した関数であり、Ａはメイン関数、Ｂは他車両に対して送信する自車両情報の取得に関する関数、Ｃは他車両に自車両情報を送信する関数、Ｄは他車両からの情報の受信に関する関数、Ｅは受信した情報の解析に関する関数、Ｆは自車両から所定の距離内に存在する他車両との相対位置関係の特定に関する関数である。ここで、関数Ｆにおける相対位置関係の特定とは、例えば、自車両の進行方向や位置に基づいて、他車両が対向車両、交差車両、又は方車両のいずれであるか、あるいは、他車両が自車両の前方、前側方、後側方、後方のいずれを走行しているかを特定することをいう。
【００３５】
車車間通信を行う車両は、常に他車両から無線通信によって情報を受信している。そして、自車両の周囲を走行する他車両から情報を受信するたびに、関数Ｄ、関数Ｅ、及び関数Ｆの処理を繰り返し実行する。すなわち、これらの関数の使用頻度は「外部環境」である他車両の台数によって変化しており、外部環境に依存するものである。そのため、関数Ｄ、Ｅ、Ｆの使用頻度情報は『スキップ可』を示している。
これに対し、自車両は、一定時間毎に自車両の位置情報を取得するために関数Ｂを、自車両情報を他車両に送信するために関数Ｃを実行する。すなわち、関数Ｂ及び関数Ｃの使用頻度は「外部環境」に依存せず、常に一定である。そのため、関数Ｂ、関数Ｃの使用頻度情報は『スキップ不可』を示している。
なお、メイン関数である関数Ａは、プログラム実行時に必ず実行する関数であり、使用頻度は常に一定であるため、関数Ａの使用頻度情報は『スキップ不可』を示している。
【００３６】
測定部２０２は、電子制御装置２０に対する「負荷量」として、中央演算装置２００の使用率（以下、ＣＰＵ使用率）を測定する。
【００３７】
ここで、本発明の「負荷量」とは、例えば、ＣＰＵ使用率、受信パケット数、あるいはユーザによる操作量のように、電子制御装置の負荷を直接的に示すものであってもよく、あるいは、電子制御装置の温度や発熱量のように、電子制御装置の負荷を間接的に示すものであってもよい。
【００３８】
実行対象決定部２０３は、入力部２０１に入力された使用頻度情報と、測定部２０２にて測定したＣＰＵ使用率とに「基づいて」、プログラムコードに挿入されたチェック処理命令のうち、チェック処理命令を実行するものを「決定」する。
【００３９】
具体的には、実行対象決定部２０３は、測定部２０２にて測定したＣＰＵ使用率と、メモリ１００に保存されたＣＰＵ使用率の閾値とを比較する。比較した結果、測定したＣＰＵ使用率がＣＰＵ使用率の閾値「より」も低い場合には、実行対象決定部２０３はプログラムコード内に挿入された全てのチェック処理命令を実行することを決定する。
これに対し、測定したＣＰＵ使用率がＣＰＵ使用率の閾値「より」も高い場合には、実行対象決定部２０３は、実行対象テーブルに規定された使用頻度情報が『スキップ不可』を示している関数の制御フローをチェックするチェック処理命令のみを実行することを決定する。
【００４０】
本実施形態１では、図６に示す実行対象テーブルに規定された使用頻度情報が『スキップ不可』を示している関数は関数ＡないしＣであるから、実行対象決定部２０３は関数ＡないしＣが呼び出し元、あるいは呼び出し先に含まれる制御フローをチェックするチェック処理命令を実行することを決定する。
【００４１】
ここで、本発明の「基づいて」とは、使用頻度情報及び負荷量と用いて実行するチェック処理命令が決定されていればよく、使用頻度情報及び負荷量以外の要素を用いて実行するチェック処理命令を決定する場合も含む。また、本発明の「決定」とは、結果的に実行対象のチェック処理命令が定まっていればよい。
また、本発明の負荷量閾値「より」も高い又は低い、とは、比較対象となる負荷量と同じ値を含む場合及び含まない場合の両方が含まれる。以下、同じ。
【００４２】
演算部２０４は、本件プログラムを実行するとともに、本件プログラムの実行時に、実行対象決定部２０３が決定したチェック処理命令を実行する。
【００４３】
図７は、測定したＣＰＵ使用率がＣＰＵ使用率の閾値よりも高い場合に実行されるプログラムを模式的にＣＦＧとして示している。使用頻度情報が『スキップ不可』を示している関数Ａ、Ｂ、Ｃのコール／リターン関係である制御フローをチェックするため、関数Ａ、Ｂ、Ｃから他の関数への遷移時のフローチェック処理を行っている。なお、図７において、黒丸は実行対象のチェック処理命令、白丸は実行対象外のチェック処理命令である。
【００４４】
検知部２０５は、本件プログラムを実行した際に実行されるチェック処理命令の出力を監視し、制御フローの異常を検知する。具体的には、あらかじめ把握している正しいコール／リターン先と、実行予定の本件プログラムにおけるコール／リターン先を比較し、これらが一致するか否かで異常を検知する。
【００４５】
処理部２０６は、検知部２０５の検知結果に基づき、「所定の処理」を行なう。例えば、検知結果が異常を示した場合、本件プログラムの実行を停止する。あるいは、表示装置５０を通じてユーザに通知したり、本件プログラムの実行ログを保存してもよい。本件プログラムを途中で停止することが安全上困難である場合は、例えば安全確保に関する処理（例えば車両の停止等）を行った上で停止又はリセットするなどしてもよい。
【００４６】
ここで、本発明の「所定の処理」とは、予め定められた一定の処理の他、条件等に応じて処理内容が変わる処理も含まれる。
【００４７】
次に、電子制御装置２０の動作を、図８を用いて説明する。
Ｓ２０１において、中央演算装置２００の演算部２０４は、メモリ１００に保存した本件プログラムを読み出して、本件プログラムの実行を開始する。
【００４８】
Ｓ２０２において、測定部２０２は、本件プログラムを実行する電子制御装置２０のＣＰＵ使用率を測定する。そして、Ｓ２０３において、実行対象決定部２０３は、測定したＣＰＵ使用率と、メモリ１００に保存されたＣＰＵ使用率の閾値とを比較する。
【００４９】
Ｓ２０４において、実行対象決定部２０３が、測定したＣＰＵ使用率がＣＰＵ使用率の閾値よりも低いと判断した場合、実行対象決定部２０３はプログラムコード内に挿入された全てのチェック処理命令を実行対象として決定し、演算部２０４は実行対象として決定された全てのチェック処理命令を実行する（Ｓ２０５）。
【００５０】
一方、Ｓ２０４において、実行対象決定部２０３が、測定したＣＰＵ使用率がＣＰＵ使用率の閾値よりも高いと判断した場合、Ｓ２０６において、実行対象決定部２０３はＣＰＵ使用率がＣＰＵ使用率の閾値よりも高くなってからの経過時間が所定の時間内であるかどうかを判断する。ここで、経過時間が所定の時間を過ぎていると判断した場合、実行対象決定部２０３はプログラムコード内に挿入された全てのチェック処理命令を実行対象として決定し、演算部２０４は実行対象として決定された全てのチェック処理命令を実行する（Ｓ２０５）。
【００５１】
これに対し、Ｓ２０６において経過時間が所定の時間内であると判断した場合、実行対象決定部２０３はプログラムコード内に挿入されたチェック処理命令のうち、使用頻度情報が『スキップ不可』を示す関数の制御フローをチェックするチェック処理命令のみを実行対象として決定し、演算部２０４は実行対象として決定されたチェック処理命令のみを実行する（Ｓ２０７）。
【００５２】
なお、Ｓ２０６においてＣＰＵ使用率がＣＰＵ使用率の閾値よりも高くなってからの経過時間が所定の時間内であるかどうかを判断する理由は、ＣＰＵ使用率が高い状態が続いた場合に、チェック処理命令の実行対象が限定された状態が続くことを回避し、セキュリティ性を高めるためである。
【００５３】
Ｓ２０８において、検知部２０５は、本件プログラムを実行した際に実行されるチェック処理命令の出力を監視し、関数のコール／リターンの異常を検知する。
【００５４】
検知部２０５が異常を検知した場合（Ｓ２０８）は、Ｓ２０９において、中央演算装置２００の処理部２０６は、本件プログラムの停止等の「所定の処理」を行なう。異常を発見しない場合は、引き続きプログラムの実行を継続する。
【００５５】
プログラムの処理対象が多い外部環境においては、プログラムの処理対象の数に比例して電子制御装置における処理量が増加し、ひいては、ＣＰＵ使用率等で表される電子制御装置の負荷量が増加する場合がある。また、プログラムの処理対象が多い場合、関数の呼び出し回数が増えることで使用頻度が増大し、チェック処理を実行することによるオーバーヘッドが増加してしまう。
そこで、電子制御装置の負荷量が一定値よりも高くなった場合に、使用頻度が外部環境に依存する関数の制御フローをチェック処理命令の実行対象から除外し、チェック処理命令の実行対象を限定することにより、制御フローに対するセキュリティチェックを行いながら、チェック処理を実行することによるオーバーヘッドの増加を抑制することができる。
【００５６】
（変形例１）
上記実施形態１では、関数の使用頻度が外部環境情報に依存するか否かによって、使用頻度情報は『スキップ不可』又は『スキップ可』のいずれか示した。しかしながら、外部環境情報に対する関数の使用頻度の依存性の有無以外の要素に基づいて、使用頻度情報は『スキップ不可』又は『スキップ可』のいずれかを示してもよい。例えば、使用頻度情報は、外部環境情報に対する関数の実行回数の変化率に基づいて、使用頻度情報は『スキップ不可』又は『スキップ可』のいずれかを示してもよい。
【００５７】
本変形例１では、環境情報に対する関数の実行回数の変化率が「所定の」変化率よりも低い場合には使用頻度情報は『スキップ不可』を示し、関数の実行回数の変化率が所定の変化率よりも高い場合には使用頻度情報は『スキップ可』を示す。
【００５８】
ここで、本発明の「所定の」とは、常に一定の場合の他、条件に応じて一意に定まる場合も含む。
【００５９】
図９は本変形例１の実行対象テーブルの例であり、実施形態１と同じ関数ＡないしＦを抽出している。メイン関数である関数Ａ、自車両情報の取得に関する関数Ｂ、及び自車両情報の送信に関する関数Ｃの使用頻度は外部環境に依存せず、常に一定であるため、外部環境情報に対する関数Ａ、Ｂ、Ｃの実行回数の変化率は低い。したがって、図９に示す実行対象テーブルには、関数Ａ、Ｂ、Ｃの変化率が“低”で示されている。
一方、他車両からの情報の受信に関する関数Ｄ、他車両から受信した情報の解析に関する関数Ｅの使用頻度は、外部環境である他車両の台数の増加に比例して増大するため、外部環境情報に対する関数Ｄ、Ｅの実行回数の変化率は高いと考えられる。したがって、図９に示す実行対象テーブルには、関数Ｄ、Ｅの変化率が“高”で示されている。
また、自車両から所定の距離内に存在する他車両との相対位置関係の特定に関する関数Ｆの使用頻度は、外部環境である他車両の台数の増加に伴って増大するが、自車両に対して情報を送信する他車両の台数と、自車両から所定の距離内に存在して相対位置関係を特定すべき他車両の台数は必ずしも等しいものではない。したがって、外部環境情報に対する関数Ｆの実行回数の変化率は、関数ＡないしＣの変化率よりも高く、関数Ｄ、Ｅの変化率よりも低いと考えられるため、図９に示す実行対象テーブルには、関数Ｆの変化率が“中”で示されている。
【００６０】
そこで、関数の実行回数の変化率が所定の変化率よりも低い関数Ａ、Ｂ、Ｃの使用頻度情報を『スキップ不可』に設定し、関数の実行回数の変化率が所定の変化率よりも高い関数Ｄ、Ｅ、Ｆの使用頻度情報を『スキップ可』に設定する。
あるいは、所定の変化率を高めに設定して、関数Ａ、Ｂ、Ｃの実行回数の変化率よりも高く、関数Ｄ、Ｅの実行回数の変化率よりも低い関数Ｆの使用頻度情報を、関数ＡないしＣと共に『スキップ不可』に設定してもよい。
【００６１】
（変形例２）
上記実施形態１では、実行対象テーブルには、ユーザによって予め設定された使用頻度情報が規定されていた。しかしながら、使用頻度情報は、実際の電子制御装置の使用状況に基づいて更新してもよい。
【００６２】
本変形例では、中央演算装置２００は、図５に示す構成に加えて、使用頻度算出部をさらに備える。使用頻度算出部は、演算部２０４がプログラムを実行する時に、当該プログラムを構成する各関数の使用頻度をリアルタイムで求める。そして、使用頻度算出部が求めたリアルタイムの使用頻度に基づいて、実行対象テーブルに規定された使用頻度情報の内容を更新する。
【００６３】
電子制御装置のＣＰＵ使用率が増加して、測定部２０２にて測定したＣＰＵ使用率がＣＰＵ使用率の閾値より高くなっても、関数の使用頻度が実際には増加していないことが起こりうる。このような場合、チェック処理命令の実行対象を限定しても、オーバーヘッドを抑制する効果は低い。そこで、プログラムを構成する関数のリアルタイムの使用頻度を求め、実際の使用頻度を使用頻度情報に反映させることにより、各関数の使用頻度情報が『スキップ不可』又は『スキップ可』のいずれを示すかを動的に変化させる。
【００６４】
例えば、図６に示す例では、関数Ａ、Ｂ、Ｃの使用頻度情報は『スキップ不可』に、関数Ｄ、Ｅ、Ｆの使用頻度情報は『スキップ可』に設定されている。しかしながら、使用頻度算出部が求めた関数Ｄ、Ｅ、Ｆの実際の使用頻度が低い場合には、これらの関数の全て、又は一部の使用頻度情報を『スキップ不可』に設定してもよい。
【００６５】
この変形例では、実際の関数の使用頻度に基づいてチェック処理命令の実行対象を決定することができるため、効率的にオーバーヘッドの増加を抑制することが可能である。
【００６６】
（実施形態２）
実施形態１では、実行対象決定部２０３は、『スキップ不可』又は『スキップ可』のいずれかを示す使用頻度情報を用いて、チェック処理命令の実行対象を決定した。本実施形態２では、関数の使用頻度の程度を示す使用頻度情報を用いて、実行対象を決定する。なお、実施形態１との共通点の詳しい説明は省略し、相違点を中心に説明する。
【００６７】
本実施形態２のメモリ１００には、本件プログラムに加えて、実行対象テーブル、ＣＰＵ使用率の閾値、及び使用頻度の閾値（本発明の「使用頻度閾値」に対応）が保存されている。そして、実行対象テーブル、ＣＰＵ使用率の閾値、及び使用頻度の閾値は、入力部２０１に入力される。
【００６８】
ここで、本発明の「使用頻度閾値」とは、特定の使用頻度である場合の他、条件によって変化する使用頻度も含む。また、使用頻度閾値は単数の場合の他、複数であってもよい。
【００６９】
図１０は、実施形態２における使用頻度情報を規定する実行対象テーブルの例を示している。本実施形態では、使用頻度情報は、『スキップ不可』又は『スキップ可』に代わり、プログラムの実行対象が多い外部環境において想定される関数の使用頻度を“高”、“中”、又は“低”で示している。しかしながら、使用頻度情報は、例えば、単位時間当たりの関数の呼び出し回数といった数値によって表されてもよい。
【００７０】
段落００５９に述べた通り、関数Ａ、Ｂ、Ｃの使用頻度は外部環境に依存せず、常に一定であるため、関数の使用頻度を示す使用頻度情報は“低”を示している。
一方、外部環境情報に対する関数Ｄ、Ｅの実行回数の変化率は高いため、プログラムの実行対象が多い外部環境においては、関数Ｄ、Ｅの使用頻度は高くなると考えられる。そのため、これらの関数の使用頻度を示す使用頻度情報は“高”を示している。
また、自車両と自車両から所定の距離内に存在する他車両との相対位置関係の特定に関する関数Ｆの使用頻度は、関数Ａ、Ｂ、Ｃの使用頻度よりも高く、関数Ｄ、Ｅの使用頻度よりも低いと考えられるため、関数の使用頻度を示す使用頻度情報は“中”を示している。
【００７１】
実施形態２の実行対象決定部２０３は、実施形態１と同様、測定部２０２にて測定したＣＰＵ使用率と、メモリ１００に保存されたＣＰＵ使用率の閾値とを比較する。そして、測定したＣＰＵ使用率がＣＰＵ使用率の閾値よりも高い場合には、実行対象決定部２０３は、実行対象テーブルに規定された使用頻度情報に基づいてチェック処理命令の実行対象を決定する。
【００７２】
ここで、実行対象決定部２０３は、実施形態１とは異なり、メモリ１００に保存された使用頻度の閾値と、実行対象テーブルに規定された使用頻度情報に示された関数の使用頻度とを比較する。そして、使用頻度情報に示された関数の使用頻度が使用頻度の閾値よりも低い関数の制御フローをチェックするチェック処理命令を実行対象として決定する。
【００７３】
例えば、メモリ１００に、使用頻度の閾値として“低”、あるいは“低”に相当する数値が保存されている場合、実行対象決定部２０３は、使用頻度情報に示された関数の使用頻度が、使用頻度の閾値“低”よりも低い関数Ａ、Ｂ、Ｃの制御フローをチェックするチェック処理命令のみを実行することを決定する。
【００７４】
本実施形態２によれば、使用頻度情報を『スキップ不可』又は『スキップ可』のいずれかで示すよりも詳細に設定することができるため、チェック処理命令の実行対象をより効率的に決定することができる。
【００７５】
（実施形態３）
実施形態１、２では、電子制御装置２０の負荷量が予め設定した負荷量閾値を超えた場合に、使用頻度情報が『スキップ不可』を示す関数、あるいは、使用頻度情報に示された使用頻度が所定の値よりも低い関数の制御フローをチェックするチェック処理命令を実行対象として決定した。
これに対して、本実施形態３では、電子制御装置の負荷量に応じて、チェック処理命令の実行対象を変化させる構成を説明する。
【００７６】
図１１、図１２は、ＣＰＵ使用率と、ＣＰＵ使用率に対応する関数の使用頻度を示している。この例では、２つのＣＰＵ使用率閾値、すなわち、第１のＣＰＵ使用率閾値（６０％）、第２のＣＰＵ使用率閾値（８０％）が予め設定されており、第１のＣＰＵ使用率閾値以下の時、第１のＣＰＵ使用率閾値以上で第２のＣＰＵ使用率閾値以下の時、及び第２のＣＰＵ使用率閾値以上の時、にチェック処理命令を実行する制御フローの関数がそれぞれ規定されている。
【００７７】
例えば、測定部２０２にて測定したＣＰＵ使用率が第１のＣＰＵ使用率閾値である６０％以下の場合には、実行対象決定部２０３は、使用頻度情報にかかわらず、プログラムコード内に挿入された全てのチェック処理命令を実行対象として決定する。この時に実行されるプログラムの構成を図１３（Ａ）に示す。
これに対し、ＣＰＵ使用率が第１のＣＰＵ使用率閾値（６０％）以上、第２のＣＰＵ使用率閾値（８０％）以下の場合には、実行対象決定部２０３は、図１３（Ｂ）に示すように、使用頻度情報が“中”又は“低”である関数、例えば、図１０に示す関数Ａ、Ｂ、Ｃ、Ｆを呼び出し元、あるいは呼び出し先に含む制御フローをチェックするチェック処理命令を実行対象として決定する。
また、ＣＰＵ使用率が第２のＣＰＵ使用率閾値（８０％）以上の場合には、実行対象決定部２０３は、図１３（Ｃ）に示すように、使用頻度情報が“低”である関数、例えば、図１０に示す関数Ａ、Ｂ、Ｃを呼び出し元、あるいは呼び出し先に含む制御フローをチェックするチェック処理命令のみを実行対象として決定する。
【００７８】
すなわち、本実施形態３では、実行対象決定部２０３は、ＣＰＵ使用率が第１のＣＰＵ使用率閾値以上になると、使用頻度情報に示された使用頻度が“高”の関数の制御フローをチェックするチェック処理命令を実行対象から外し、ＣＰＵ使用率がさらに増加して第２のＣＰＵ使用率閾値以上になると、使用頻度情報に示された使用頻度が“高”の関数に加えて、“中”の関数の制御フローをチェックするチェック処理命令を実行対象から外しており、ＣＰＵ使用率が増加するほど、使用頻度情報に示された使用頻度が大きい関数の制御フローをチェックするチェック処理命令から順に、実行対象から外している。
【００７９】
なお、図１１、図１２は、２つのＣＰＵ使用率閾値を設定して、チェック処理命令の実行対象を２段階で限定する構成であるが、図１４に示すように、測定部２０２にて測定したＣＰＵ使用率が増加するのに伴って、実行対象決定部２０３は、使用頻度が高い関数の制御フローをチェックするチェック処理命令から実行対象を徐々に限定してもよい。
【００８０】
本実施形態によると、ＣＰＵ使用率の増加、すなわち、ＥＣＵの負荷量の増加に伴ってチェック対象関数を限定することができるため、効率的にオーバーヘッドの増加を抑制することが可能となる。
【００８１】
（総括）
以上、本発明の各実施形態における電子制御装置の特徴について説明した。
【００８２】
なお、各実施形態の特徴を２以上含むようにしてもよい。つまり、各実施形態は、実施形態同士組み合わせることが可能である。例えば、実施形態１乃至３を組み合わせて、実行するチェック処理命令を決定してもよい。
【００８３】
また、各実施形態の使用頻度情報は、外部環境情報と関数の使用頻度との相関を示す情報として説明したが、使用頻度情報は関数の使用頻度を示すものであればよく、外部環境情報に依存するものでなくともよい。例えば、プログラムを構成する関数にループ関数が含まれる場合には、使用頻度情報はループする回数を使用頻度として示すものであってもよい。
【００８４】
また、各実施形態に開示の構成、方法は、その要素を本発明に適宜組み合わせることができる。つまり、各実施形態に開示の要素同士が必須の組み合わせという訳ではなく、各要素を適宜発明として組み込むことが可能である。
【産業上の利用可能性】
【００８５】
本発明は、主として自動車の電子制御装置に用いられるものであるが、自動車以外の車両、例えば、二輪車、電動アシスト自転車の他、船舶、航空機などにも用いることができる。さらに、本発明はこれらの車載用途に限られるものではない。
【符号の説明】
【００８６】
２０  電子制御装置（ＥＣＵ）、１００  メモリ、２００  中央演算装置、２０１  入力部、２０２  測定部、２０３  実行対象決定部、２０４  演算部、２０５  検知部、２０６  処理部
【図１】
2019012498.tif 000003
【図２】
2019012498.tif 000004
【図３】
2019012498.tif 000005
【図４】
2019012498.tif 000006
【図５】
2019012498.tif 000007
【図６】
2019012498.tif 000008
【図７】
2019012498.tif 000009
【図８】
2019012498.tif 000010
【図９】
2019012498.tif 000011
【図１０】
2019012498.tif 000012
【図１１】
2019012498.tif 000013
【図１２】
2019012498.tif 000014
【図１３】
2019012498.tif 000015
【図１４】
2019012498.tif 000016