産総研の清水です.
リングバッファにメモリの欄外参照を起こすバグが見付かりました. 修正パッチを作りましたので送ります. 場合によってはコンポーネント自体が落ちてしまうことがあるので, 早急な修正をお薦めいたします. 以下は問題の詳細です.
[問題] リングバッファのm_newPtrの初期値が バッファのlengthと同じになっており, その場所はバッファの欄外である. バッファのreadは,m_newPtrのアドレスを参照するため, DataPortをRingBufferと共にregisterしたあと, データのwriteが起こる前にreadを行うと, メモリの欄外参照を引き起こす. Fedoraの場合,RingBufferのメモリ領域は, DataPortの直前に配置されるらしく, RingBufferの欄外参照によってDataPortのメモリの 先頭領域が破壊されるため,Segmentation Fault となってコンポーネント自体が落ちる.
[対応] m_newPtrの初期値をlength-1とした.
清水
モーションエディタ/シミュレータ
動力学シミュレータ
統合開発プラットフォーム
産総研が提供するRTC集
東京オープンソースロボティクス協会
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
産総研の清水です.
リングバッファにメモリの欄外参照を起こすバグが見付かりました.
修正パッチを作りましたので送ります.
場合によってはコンポーネント自体が落ちてしまうことがあるので,
早急な修正をお薦めいたします.
以下は問題の詳細です.
[問題]
リングバッファのm_newPtrの初期値が
バッファのlengthと同じになっており,
その場所はバッファの欄外である.
バッファのreadは,m_newPtrのアドレスを参照するため,
DataPortをRingBufferと共にregisterしたあと,
データのwriteが起こる前にreadを行うと,
メモリの欄外参照を引き起こす.
Fedoraの場合,RingBufferのメモリ領域は,
DataPortの直前に配置されるらしく,
RingBufferの欄外参照によってDataPortのメモリの
先頭領域が破壊されるため,Segmentation Fault
となってコンポーネント自体が落ちる.
[対応]
m_newPtrの初期値をlength-1とした.
清水