設計に問題があるrcv_mbf
2010-02-09


rcv_mbf()は指定したメッセージバッファIDのメッセージバッファからメッセージを受信するまで待つサービスコールです。

メッセージバッファへの送信はsnd_mbf()を使います。

ここで問題。

snd_mbf()には送信サイズを指定して、そのサイズがメッセージバッファ生成時に指定した最大サイズを超えているとエラーリターンします。

一方rcv_mbf()は受信したメッセージサイズをリターン値として取得するようなインターフェースはありますが、異常動作を未然に防ぐような仕組みは全く用意されていない。 この仕様だとどうなるかというとバグによりRAM領域を破壊する可能性が高い。

というような不具合が平気で発生します。

rcv_mbf()にstrncpy()のような最大サイズを指定するようなインターフェースを用意するのが組込み屋さんとしての最低限の実装でしょう。 その上でエラーリターンしてくれないと・・・・

代替案としてはrcv_mbf()を直接使うのではなく、受信サイズと領域サイズをチェックするようなマクロを通常は使うようにする。というようなところでしょうか。

[組込み]
[μITRON]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット