(toppers-users 2948) Re: TINETデータグラム獲得・設定時のパディング書き込み位置異常

阿部 司 abe @ jo.tomakomai-ct.ac.jp
2009年 5月 20日 (水) 11:58:25 JST


(株)トワダ・ウェルデザイン 茂木様

苫小牧高専の阿部です。

返信が遅れ申し訳ありませんでした。
貴重な情報ありがとうございます。

> TINET 1.4のIPv4データグラム獲得・設定関数 in4_get_datagram に
> パディングの書き込み位置を誤る不具合が有ります。
> IPv6の関数 in6_get_datagram も同様の問題を抱えているようです。
> 以下に詳細を書きますので、不具合で間違いないかご確認のうえ、新しい
> バージョンに反映していただければ幸いです。もし、すでに1.5で修正済
> みでしたら、お騒がせしてすみません。

修正済みではありませんでした。

> 関数 in4_get_datagram には、4オクテット境界までパディングで埋める
> 処理が有ります。TINET 1.4ではin_subr.cの190行の処理です。以下に
> 引用します。
>   memset((VP)(GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len));
> マクロを展開すると、次のようになります。
>   memset((VP)(((UB*)((*nbuf)->buf) + ((sizeof(T_ETHER_HDR)) + (((UB)((UB)(((((T_IP4_HDR*)((*nbuf)->buf +
>   (sizeof(T_ETHER_HDR)))))->vhl)&0x0f)) << 2)))) + len), 0, (size_t)(align - len));
> この中の「〜 ->vhl」という箇所は、ネットワークバッファ内のIPv4ヘッ
> ダからバージョンおよびヘッダ長を取得する処理です。ところが、この
> 時点ではネットワークバッファを獲得したばかりで、まだその中にIPv4
> ヘッダを書き込んでいません。そのため、誤ったヘッダ長に基づいてパ
> ディングの書き込み先を決定してしまいます。その結果、獲得したネット
> ワークバッファの領域外へパディングを書き込む可能性があります。

こちらでも確認しました。
先に IP ヘッダを設定するように修正しました。
TINET-1.5 で対応したいと思います。なお、公開に向けて準備中です。

それでは、今後ともよろしくお願いいたします。

-- 
.\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
.\" 〒059-1275 北海道苫小牧市字錦岡443番地
.\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937