Technology
Engineers resolve long-standing Go runtime bug affecting 32-bit embedded Linux systems
A pointer aliasing flaw introduced in Go 1.14 caused long-running programs on 32-bit architectures to crash after recycling millions of polling objects.
The short version
- Engineers identified and patched a Go runtime bug causing sporadic netpoll crashes on 32-bit ARM and i386 Linux systems.
- The crash was caused by pointer aliasing between event counters and pointer addresses on 32-bit little-endian systems after sequence counters reached into the millions.
- A fix replacing raw pointers with tagged nil pointers in the netpoll logic was merged into the official Go repository.
Key facts
- A Go runtime bug introduced in Go 1.14 in 2020 caused sporadic crashes in long-running applications on 32-bit ARM and i386 Linux systems.[Hacker News]
- The bug resulted from address aliasing in Go's netpoll_epoll.go where lower-byte address storage overlapped with sequence counter tags on 32-bit little-endian systems.[Hacker News]
- First reported in March 2025, the issue remained unresolved until August 2026 when engineers built a reproducible test case and submitted a patch.[Hacker News]
- The accepted fix stores a tagged nil pollDesc for event file descriptors, eliminating the pointer overlap.[Hacker News]