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.
  1. dlopes7

    Lectura muy interesante; estos bugs que solo aparecen tras mucho tiempo en producción son los peores de depurar.

  2. nasretdinov

    Go nació en la era de 64 bits; recuerdo ver muchos más bugs que solo ocurrían en sistemas de 32 bits. Estoy bastante seguro de que la observación del artículo es correcta: nadie en Google prueba Go en nada que no sea ARM/x86 Linux de 64 bits.

  3. ReactiveJelly

    Entonces, ¿un sistema de tipos más fuerte en el límite entre Go y Linux habría atrapado esto?

Más de este día

2026-08-29