O erro no GPSD deste domingo tradúcese nun cambio de hora de hai 19 anos

Identificouse un problema crítico no paquete GPSD, que se usa para extraer datos precisos de tempo e posición dos dispositivos GPS, polo que o tempo retrotraerá 24 semanas o 1024 de outubro, é dicir. a hora cambiarase a marzo de 2002. O problema aparece nas versións 3.20 a 3.22 inclusive e resólvese na GPSD 3.23. Todos os usuarios de sistemas que usan GPSD deben instalar actualizacións inmediatamente ou estar preparados para fallas.

O efecto do erro pode provocar fallos imprevisibles en varios sistemas, incluídos aqueles que non usan directamente GPSD, xa que esta aplicación úsase para obter datos precisos de tempo nalgúns servidores NTP utilizados para a sincronización horaria. Cando se producen cambios de tempo nos sistemas, poden xurdir problemas coa autenticación (por exemplo, contrasinais únicos, Kerberos e outros mecanismos de verificación de acceso que teñan data de caducidade xa non funcionarán), coa verificación de certificados e con cálculos que manipulan intervalos de tempo ( por exemplo, calcular o tempo da sesión dun usuario) . GPSD tamén está dispoñible nunha variedade de dispositivos móbiles e integrados, moitos dos cales xa non reciben actualizacións de firmware.

O protocolo GPS inclúe un contador de semanas que conta as semanas desde o 5 de xaneiro de 1980. O problema é que durante a emisión, só se asignan 10 bits para este contador, o que significa que se desborda cada 1023 semanas (19.7 anos). O primeiro desbordamento produciuse en 1999, o segundo en 2019 e o terceiro producirase en 2038. Estes eventos son supervisados ​​polos fabricantes e provénselles manipuladores especiais. Actualmente, introduciuse en paralelo un novo formato de mensaxe GPS (CNAV), no que se asignan 13 bits para o contador (é dicir, só se espera un desbordamento en 2137).

No GPSD, na lóxica de axustar a aparencia dun segundo extra (engadido para sincronizar os reloxos atómicos de referencia do mundo coa hora astronómica da Terra), cometeuse un erro polo que o 24 de outubro de 2021, 1024 restarase prematuramente do contador de semanas. Segundo o autor do código, a quenda debería ter lugar o 31 de decembro de 2022, pero a tradución desta data ao número de semanas non se levou a cabo correctamente e, de feito, o número de semanas indicado no cheque caeu por debaixo de outubro de 2021. (o valor indicado é 2180 en lugar de 2600). /* Número de semana de comprobación de cordura, época GPS, contra segundos intercalados * Non funciona ben coas regresións porque os saltos_sconds * poderían ser do receptor ou de BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < semana) { /* asume que segundo intercalar = 19 para o 31 de decembro de 2022 * polo que a semana > 2180 está moi no futuro , non o permitas */ semana -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "Confusión da semana GPS. Semana %u axustada para o salto %d\n", semana, sesión->contexto->segundos_bisestos); }

Fonte: opennet.ru

Engadir un comentario