incorrect udp checksum in linux-kernel-2.6.x??

i686アーキテクチャ用のkernel-2.6.xのうち、現在リリースされている版を含むいくつかのバージョンで、不正なudp checksumを出しているように見えることがわかりました。

実際に調べたのは

  • 2.6.12-1.1372_FC3smp
  • 2.6.11-1.35_FC3smp
  • 2.6.11-1.27_FC3smp
  • 2.6.9-1.667smp

です。

検査方法:

被疑計算機でetherealをあげておき、udp限定でキャプチャします。その状態で、被疑計算機から、nslookup/ntp等のUDPを使うアプリケーションを起動し、etherealでキャプチャさせます。送信パケットのUDPチェックサムが[incorrect]であることを確認しました。戻ってきたパケットは[correct]でした。
しかし、実際には、正しいchecksumでネットワークに出て行っているようです。
したがって、自分が送信したパケットをSOCK_RAWなソケットで受信するとき固有の問題のようです。(PF_PACKETだけでなく、socket(PF_INET, SOCK_RAW, IPPROTO_UDP)なソケットでも同じように自分発のパケットのchecksumは不正な値でした)
なお、kernel-2.4系ではこの問題はおきていないようです。