Error en GPSD este domingo se traduce a un cambio de hora de hace 19 años

Se ha identificado un problema crítico en el paquete GPSD, que se utiliza para extraer datos precisos de hora y posición de dispositivos GPS, debido a que la hora retrocederá 24 semanas el 1024 de octubre, es decir, la hora se cambiará a marzo de 2002. El problema aparece en las versiones 3.20 a 3.22 inclusive y se resuelve en GPSD 3.23. Todos los usuarios de sistemas que utilizan GPSD deben instalar actualizaciones de inmediato o estar preparados para una falla.

El efecto del error puede provocar fallos impredecibles en varios sistemas, incluidos aquellos que no utilizan directamente GPSD, ya que esta aplicación se utiliza para obtener datos horarios precisos en algunos servidores NTP utilizados para la sincronización horaria. Cuando se producen cambios de tiempo en los sistemas, pueden surgir problemas con la autenticación (por ejemplo, las contraseñas de un solo uso, Kerberos y otros mecanismos de verificación de acceso que tienen fecha de vencimiento ya no funcionarán), con la verificación de certificados y con los cálculos que manipulan rangos de tiempo ( por ejemplo, calcular el tiempo de sesión de un usuario). GPSD también está disponible en una variedad de dispositivos móviles y integrados, muchos de los cuales ya no reciben actualizaciones de firmware.

El protocolo GPS incluye un contador de semanas que cuenta las semanas desde el 5 de enero de 1980. El problema es que durante la transmisión sólo se asignan 10 bits a este contador, lo que significa que se desborda cada 1023 semanas (19.7 años). El primer desbordamiento se produjo en 1999, el segundo en 2019 y el tercero se producirá en 2038. Estos eventos son monitoreados por los fabricantes y se les proporcionan controladores especiales. Actualmente, se ha introducido en paralelo un nuevo formato de mensajes GPS (CNAV), en el que se asignan 13 bits para el contador (es decir, se espera un desbordamiento solo en 2137).

En GPSD, en la lógica para ajustar la aparición de un segundo extra (agregado para sincronizar los relojes atómicos de referencia del mundo con el tiempo astronómico de la Tierra), se cometió un error por el cual el 24 de octubre de 2021 se restarán prematuramente 1024 del contador de semanas. Según el autor del código, el cambio debería haber ocurrido el 31 de diciembre de 2022, pero la traducción de esta fecha al número de semanas no se realizó correctamente y, de hecho, el número de semanas indicado en el cheque cayó en octubre de 2021. (el valor indicado es 2180 en lugar de 2600). /* número de semana de verificación de cordura, época de GPS, contra segundos intercalares * No funciona bien con regresiones porque los segundos_salto * podrían ser del receptor o de BUILD_LEAPSECONDS. */ if (0 < session->context->leap_segundos && 19 > session->context->leap_segundos && 2180 < semana) { /* asume segundo intercalar = 19 para el 31 de diciembre de 2022 * por lo que la semana > 2180 está en el futuro , no lo permitas */ semana -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "Confusión de semana de GPS. Semana ajustada %u para salto %d\n", semana, sesión->context->leap_segundos); }

Fuente: opennet.ru

Añadir un comentario