Goランタイムの32ビット組み込みシステムでのバグを追跡

Hunting Down a Go Runtime Bug on 32-Bit Embedded Systems

Goランタイムの32ビット組み込みシステムでのバグを追跡

Goで書かれたアプリケーションが32ビットARM組み込みLinuxシステムで不定期にクラッシュするという報告を受け、その原因を調査しました。エラーメッセージは「runtime: netpoll: eventfd ready for something unexpected」で、Goのnetpollメカニズムの内部仮定が崩れたことを示していました。調査の結果、32ビットリトルエンディアンシステムでは、ev.Dataフィールドに生ポインタとタグ付きポインタを混在させることが原因で、fdseqタグがnetpollEventFdのアドレスとエイリアスし、ソケットfdをイベントfdと誤認することが判明しました。この問題はGo 1.14で導入され、2026年に修正されました。

このバグは2020年のGo 1.14でランタイムに紛れ込み、2025年3月の最初の報告まで気づかれず、2026年にようやく修正されました。推測するしかありませんが、これはGoogle自身がもはや32ビットのGoプログラムを実行していないことを示唆しています。そうでなければ、私たちよりずっと前に彼ら自身がこのバグに遭遇していたはずです。

この日のほかの記事

2026-08-29