Cazando un bug del runtime de Go en sistemas embebidos de 32 bits

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

Cazando un bug del runtime de Go en sistemas embebidos de 32 bits

Un fallo intermitente en una aplicación Go en un sistema embebido ARM de 32 bits llevó a un equipo de sigma-star a descubrir un bug en el runtime de Go. El error, 'netpoll: eventfd ready for something unexpected', se debía a una colisión de punteros etiquetados en la estructura epoll_event. En sistemas de 32 bits little-endian, el puntero al event fd se confundía con el contador de reciclaje de pollDesc, provocando un fallo tras millones de ciclos. El equipo creó un caso de prueba, propuso una solución que almacena un pollDesc nulo etiquetado, y fue integrada en el runtime de Go.

El bug se coló en el runtime de Go con Go 1.14 en 2020, pasó desapercibido hasta el primer informe en marzo de 2025 y finalmente se corrigió en 2026.

Más de este día

2026-08-29