NI LabVIEW Real-Timeモジュール: 浮動小数点の脆弱性
使用ソフトウェア:
使用ソフトウェア・バージョン:
使用ソフトウェア・バージョンに特化:
二次のソフトウェア: N/A
ハードウェア: Compact FieldPoint>>Controllers>>cFP-2200, Compact FieldPoint>>Controllers>>cFP-2210, Compact FieldPoint>>Controllers>>cFP-2220, CompactRIO>>Controllers>>cRIO-9012, CompactRIO>>Controllers>>cRIO-9014, CompactRIO>>Chassis (Backplanes)>>cRIO-9074, CompactRIO>>Controllers>>cRIO-9072, CompactRIO>>Controllers>>cRIO-9073
問題: ナショナルインスツルメンツは、特定の状況下でLabVIEW Real-Timeモジュールが浮動小数点レジスタに格納されたデータを誤って上書きし、予期しないデータ結果を返す可能性がある旨の通知を発表しました。
この脆弱性は、一部のNI Real-Timeターゲットに影響を及ぼします。 影響を受けるLabVIEW Real-Timeアプリケーションを識別し、影響を受けるターゲットでこの問題を解決するには、どうすればよいでしょうか。
解決策: 影響を受けるLabVIEW Real-Timeのバージョン:
- LabVIEW Real-Time 8.2からLabVIEW Real-Time 2009まで
メモ: この問題は、LabVIEW 2009 SP1 Real-Timeモジュールで修正されています。 この問題を解決するためには、ホストとターゲットの両方をLabVIEW 2009 SP1 Real-Timeモジュールにアップグレードしてください。
影響を受ける製品:
- すべてのシングルボードRIOターゲット(sbRIO-96xx)
- Compact FieldPointターゲット(cFP-2200、cFP-2210、cFP-2220)
- CompactRIOターゲット(cRIO-9012、cRIO-9014、cRIO-9022、cRIO-9024、cRIO-9072、cRIO-9073、cRIO-9074)
- NI Smart Cameraターゲット(NI 1722、NI 1742、NI 1744、NI 1762、NI 1764)
ナショナルインスツルメンツは、浮動小数点の脆弱性により、NI LabVIEW Real-Timeモジュールアプリケーションで予期しないデータ結果が発生する可能性があることを確認しました。特定の状況下で、LabVIEW Real-Timeは浮動小数点レジスタに格納されたデータを誤って上書きすることがあります。 誤ったデータをユーザに警告するエラーメッセージは返されないため、アプリケーションコードは誤ったデータを処理し続ける可能性があります。 弊社は、この問題の再現に必要な条件が揃うことはまれであると認識していますが、モジュールのすべてのバージョンでこの問題が発生する恐れがあるため、重大な問題を解決するパッチをすべてのお客様にインストールしていただくことを推奨します。
この問題を解決するには、LabVIEW Real-Timeモジュール2009 f2パッチをホストPCにインストールし、浮動小数点の脆弱性を解決するパッチをインストールする方法で記載された方法のいずれか1つを使用して、Real-Timeターゲットにすべてのソフトウェアを再インストールしてください。
影響を受けるLabVIEW Real-Timeアプリケーションを識別する方法
この脆弱性により、浮動小数点の計算中にスレッドを切り替えるとレジスタレベルでデータが破損し、周期的なグリッチの発生や誤ったデータの原因となる可能性があります。
以下のリストは、浮動小数点レジスタを破損する可能性がある、最も一般的なスレッドを示します。 オペレーティングシステムで作成される一部のスレッドはユーザが制御できないタスクを実行するため、このリストは包括的なものではありません。
- ファイル転送プロトコル(FTP)
- GCCコンパイラを使用して作成された、カスタムC++生成.outファイル
- NIサービスロケータ
- 以下のNI-VISAタスク:
- NI-VISAサーバ
- NI-VISA非同期パスポート
- NI-VISAを使用したENET-Serialデバイスとの通信
- TCP/IP、PXI、またはUSBデバイスでのVISAイベントの使用
たとえば、FFTやPID演算を実行するループと同じ優先度で、FTPやC++で生成された.outスレッドを実行すると、この問題が発生する可能性があります。 これらの演算から返された結果データは、範囲内の値ですが正しくありません。 誤ったデータをユーザに警告するエラーメッセージは返されないため、アプリケーションコードは誤ったデータを処理し続ける可能性があります。
ほとんどのアプリケーションでは、影響を受けるスレッドを含むコンテキストの切り替えは、浮動小数点演算中に発生しません。 ただし、すべての演算結果を確認しない限り、アプリケーションの安全性を保証することはできません。 ナショナルインスツルメンツはすべてのお客様にパッチをインストールしていただくか、または影響を受ける可能性のあるスレッドを実行するシステムでのリスクをご理解いただくことを推奨します。
浮動小数点の脆弱性を解決するパッチをインストールする方法
以下の方法のいずれか1つを使用してコンポーネントをインストールし、影響を受けるターゲットに浮動小数点の脆弱性を解決するパッチを適用することができます。 これらの手順は、ユーザがRTターゲットをすでに構成し、アプリケーションの実行に必要なソフトウェアをインストールしていることを前提としています。
方法1: Measurement & Automation Explorer(MAX)を使用したカスタムソフトウェアインストール
以下の手順に従って、浮動小数点の脆弱性を解決するパッチをMAXからインストールします。
- NI Measurement & Automation Explorer(MAX)を起動します。
- リモートシステムツリーを展開し、RTターゲットを参照します。
- RTターゲット項目を展開します。
- RTターゲットの下のソフトウェア項目を右クリックし、ソフトウェアの追加と削除を選択して、LabVIEW Real-Timeソフトウェアウィザードを起動します。
- ターゲットが推奨ソフトウェアセットを使用している場合、カスタムソフトウェアインストールを選択します。
- 次へをクリックし、インストールする機能を手動で選択するかどうかを尋ねるメッセージが表示されたらはいを選択します。
- 機能ツリーからVxWorks Floating-point support for VxWorks 1.0(VxWorks 1.0用VxWorks浮動小数点サポート)を選択し、次へボタンをクリックして、インストールを開始します。
- 画面の指示に従って、インストールプロセスを完了します。 インストールが完了してターゲットが再起動すると、パッチが適用されます。
方法2: 手動によるパッチコンポーネントのFTP転送とターゲットの構成ファイルの更新
浮動小数点の脆弱性を解決するためにナショナルインスツルメンツのソフトウェアを使用しない場合、添付の LVRTf2Patch.zip に含まれるファイルとFTPクライアントを使用して、ターゲットにパッチを手動で適用することができます。 FTP転送はパッシブおよびバイナリモードで行う必要があります。
LabVIEW Real-Time 8.2.0および8.2.1
ホストの ¥LVRTf2Patch¥vxworks61 にある vxfpsup.out を、ターゲットの /c/ni-rt/system/ にコピーします。 ターゲットのルートディレクトリに進み、ホストに ni-rt.ini をFTP転送します。 ファイルを開き、STARTUP セクションの EarlyStartupLibraries に vxfpsup.out; を追加します。セクションとラインが存在しない場合、それらをファイルの終わりに追加することができます(以下を参照)。
[STARTUP]
EarlyStartupLibraries=vxfpsup.out;
ni-rt.iniを保存し、ターゲットにFTP転送(既存のファイルを上書き)してターゲットを再起動します。
LabVIEW Real-Time 8.5.0から2009までのバージョン
ホストの ¥LVRTf2Patch¥vxworks63 にある vxfpsup.out を、ターゲットの /c/ni-rt/system/ にコピーします。 ターゲットのルートディレクトリに進み、ホストに ni-rt.ini をFTP転送します。 ファイルを開き、STARTUP セクションの EarlyStartupLibraries に vxfpsup.out; を追加し、MODULE VERSIONS セクションに Vxfpsup.out=6.3 を追加します。セクションとラインが存在しない場合、それらをファイルの終わりに追加することができます(以下を参照)。
[STARTUP]
EarlyStartupLibraries=vxfpsup.out;
[MODULE VERSIONS]
vxfpsup.out=6.3
ni-rt.iniを保存し、ターゲットにFTP転送(既存のファイルを上書き)してターゲットを再起動します。
VxWorks 1.0用VxWorks浮動小数点サポートのインストール後のアプリケーションの確認
大半のアプリケーションでは、パッチのインストールによりパフォーマンスに大きな影響が及ぶことはありません。 ただし、この問題の発生に必要な条件を満たすアプリケーションでは、パッチのインストール後に実行時間が著しく増加する可能性があります。 アプリケーションがタイミング要件を引き続き満たすことを確認するため、パッチのインストール後にアプリケーションのベンチマークを取得することを推奨します。
その他のサポート
問題が継続する場合は、ナショナルインスツルメンツ(0120-527196)までご連絡ください。 この問題はCAR ID 184584で調査されています。 ナショナルインスツルメンツの技術サポートへのお問い合わせの際は、このID番号をお知らせください。
関連リンク: LabVIEW Real-Timeモジュール 2009 f2パッチ
添付: - LVRTf2Patch.zip
報告日時: 11/20/2009
最終更新日: 02/24/2010
ドキュメントID: 53JFCCQ0