L'errore nel GPSD di questa domenica si traduce in un cambio di orario di 19 anni fa

È stato individuato un problema critico nel pacchetto GPSD, che viene utilizzato per estrarre dati accurati di ora e posizione dai dispositivi GPS, a causa del quale, il 24 ottobre, l'ora verrà spostata indietro di 1024 settimane, ovvero l'ora sarà cambiata a marzo 2002. Il problema si verifica nelle versioni dalla 3.20 alla 3.22 inclusa ed è stato risolto nella versione GPSD 3.23. Tutti gli utenti di sistemi che utilizzano GPSD dovrebbero installare urgentemente gli aggiornamenti o essere preparati al fallimento.

L'effetto dell'errore può portare a guasti imprevedibili su vari sistemi, compresi quelli che non utilizzano direttamente GPSD, poiché questa applicazione viene utilizzata per ottenere dati temporali precisi su alcuni server NTP utilizzati per la sincronizzazione dell'ora. Quando si sposta l'ora, i sistemi possono riscontrare problemi con l'autenticazione (ad esempio, le password monouso, Kerberos e altri meccanismi di verifica dell'accesso che hanno un periodo di validità smetteranno di funzionare), con la verifica del certificato e con i calcoli che manipolano gli intervalli di tempo (ad esempio, calcolo del tempo della sessione utente) . GPSD è disponibile anche su una varietà di dispositivi embedded e mobili, molti dei quali non ricevono più gli aggiornamenti del firmware.

Il protocollo GPS prevede un contatore settimanale che conta le settimane dal 5 gennaio 1980. Il problema è che durante la trasmissione, a questo contatore vengono assegnati solo 10 bit, il che implica il suo overflow ogni 1023 settimane (19.7 anni). Il primo overflow si è verificato nel 1999, il secondo nel 2019 e il terzo nel 2038. Questi eventi vengono monitorati dai produttori e per loro vengono forniti gestori speciali. Attualmente è stato implementato in parallelo un nuovo formato di messaggio GPS (CNAV), in cui sono allocati 13 bit per il contatore (ovvero, l'overflow è previsto solo nel 2137).

In GPSD è stato commesso un errore nella logica per correggere la comparsa di un secondo in più (aggiunto per sincronizzare l'orologio atomico di riferimento mondiale con l'ora astronomica della Terra), a causa del quale 24 verrà prematuramente sottratto dal contatore settimanale di ottobre 2021, 1024. Come concepito dall'autore del codice, lo spostamento doveva avvenire il 31 dicembre 2022, ma la traduzione di questa data nel numero di settimane è stata eseguita in modo errato e il numero di settimane effettivamente indicato nell'assegno è sceso sotto ottobre 2021 ( viene indicato il valore 2180 invece di 2600). /* numero della settimana del controllo di integrità, epoca GPS, rispetto ai secondi intercalari * Non funziona bene con le regressioni perché i leap_sconds * potrebbero provenire dal ricevitore o da BUILD_LEAPSECONDS. */ if (0 < sessione->contesto->secondi_intercalari && 19 > sessione->contesto->secondi_intercalari && 2180 < settimana) { /* assume secondo intercalare = 19 entro il 31 dicembre 2022 * quindi la settimana > 2180 è nel futuro , non consentirlo */ week -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "Confusione settimana GPS. Settimana %u modificata per %d\n intercalari", week, session->context->leap_seconds); }

Fonte: opennet.ru

Aggiungi un commento