Erro no GPSD neste domingo se traduz em uma mudança de horário de 19 anos atrás

Um problema crítico foi identificado no pacote GPSD, que é usado para extrair dados precisos de tempo e posição de dispositivos GPS, devido ao qual o tempo retrocederá 24 semanas em 1024 de outubro, ou seja, o horário será alterado para março de 2002. O problema aparece nas versões 3.20 a 3.22 inclusive e é resolvido no GPSD 3.23. Todos os usuários de sistemas que utilizam GPSD precisam instalar atualizações imediatamente ou estar preparados para falhas.

O efeito do erro pode levar a falhas imprevisíveis em diversos sistemas, inclusive naqueles que não utilizam GPSD diretamente, uma vez que esta aplicação é utilizada para obter dados de tempo precisos em alguns servidores NTP utilizados para sincronização de horário. Quando ocorrem mudanças de horário nos sistemas, podem surgir problemas com a autenticação (por exemplo, senhas de uso único, Kerberos e outros mecanismos de verificação de acesso que tenham uma data de expiração não funcionarão mais), com a verificação de certificados e com cálculos que manipulam intervalos de tempo ( por exemplo, calculando o tempo da sessão de um usuário). O GPSD também está disponível em vários dispositivos embarcados e móveis, muitos dos quais não recebem mais atualizações de firmware.

O protocolo GPS inclui um contador semanal que conta as semanas desde 5 de janeiro de 1980. O problema é que durante a transmissão, apenas 10 bits são alocados para esse contador, o que significa que ele transborda a cada 1023 semanas (19.7 anos). O primeiro transbordamento ocorreu em 1999, o segundo em 2019 e o terceiro ocorrerá em 2038. Esses eventos são monitorados pelos fabricantes e manipuladores especiais são fornecidos para eles. Atualmente, um novo formato de mensagem GPS (CNAV) foi introduzido em paralelo, no qual 13 bits são alocados para o contador (ou seja, um overflow é esperado apenas em 2137).

No GPSD, na lógica de ajuste do aparecimento de um segundo extra (adicionado para sincronizar os relógios atômicos de referência mundial com o tempo astronômico da Terra), foi cometido um erro devido ao qual em 24 de outubro de 2021, 1024 serão subtraídos prematuramente do contador semanal. Segundo o autor do código, a mudança deveria ter ocorrido em 31 de dezembro de 2022, mas a tradução desta data para o número de semanas não foi realizada corretamente e de fato o número de semanas indicado no cheque caiu em outubro de 2021 (o valor indicado é 2180 em vez de 2600). /* número da semana de verificação de integridade, época do GPS, em relação aos segundos bissextos * Não funciona bem com regressões porque os leap_sconds * podem ser do receptor ou de BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* assume que o segundo bissexto = 19 até 31 de dezembro de 2022 * então semana > 2180 está bem no futuro , não permita */ semana -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "Confusão da semana GPS. Semana ajustada %u para salto %d\n", semana, sessão->context->leap_seconds); }

Fonte: opennet.ru

Adicionar um comentário