Chyba v GPSD tuto neděli znamená změnu času před 19 lety

V balíčku GPSD, který se používá k extrahování přesných údajů o čase a poloze ze zařízení GPS, byl identifikován kritický problém, což způsobí, že se čas 24. října posune o 1024 týdnů zpět, tj. čas se změní na březen 2002. Problém se objevuje ve verzích 3.20 až 3.22 včetně a je opraven ve verzi GPSD 3.23. Všichni uživatelé systémů, které používají GPSD, musí naléhavě nainstalovat aktualizace nebo být připraveni na selhání.

Vliv chyby může vést k nepředvídatelným poruchám na různých systémech, včetně těch, které přímo nepoužívají GPSD, protože tato aplikace se používá k získání přesných časových údajů na některých serverech NTP používaných pro synchronizaci času. Při posunu času mohou systémy zaznamenat problémy s autentizací (například přestanou fungovat jednorázová hesla, Kerberos a další mechanismy ověřování přístupu, které mají dobu platnosti), s ověřením certifikátu a s výpočty, které manipulují s časovými rozsahy (např. výpočet doby uživatelské relace). GPSD je také k dispozici na různých vestavěných a mobilních zařízeních, z nichž mnohá již nedostávají aktualizace firmwaru.

Protokol GPS poskytuje počítadlo týdnů, které počítá týdny od 5. ledna 1980. Problém je, že při vysílání je pro tento čítač alokováno pouze 10 bitů, což znamená jeho přetečení každých 1023 týdnů (19.7 roku). První přetečení nastalo v roce 1999, druhé v roce 2019 a třetí v roce 2038. Tyto události jsou sledovány výrobci a jsou pro ně zajištěni speciální manipulátoři. V současné době je paralelně implementován nový formát zpráv GPS (CNAV), ve kterém je pro čítač alokováno 13 bitů (tj. přetečení se očekává až v roce 2137).

V GPSD došlo k chybě v logice pro opravu vzhledu sekundy navíc (přidané za účelem synchronizace světových referenčních atomových hodin s astronomickým časem Země), kvůli které bude 24 předčasně odečteno od počítadla týdnů v říjnu 2021, 1024. V pojetí autora kódu mělo k posunu dojít 31. prosince 2022, ale převod tohoto data na počet týdnů byl proveden chybně a počet týdnů skutečně uvedený v šeku spadal pod říjen 2021 ( je uvedena hodnota 2180 místo 2600). /* Číslo týdne kontroly zdravého rozumu, epocha GPS, proti přestupným sekundám * Nefunguje dobře s regresemi, protože leap_sconds * mohou pocházet z přijímače nebo z BUILD_LEAPSECONDS. */ if (0 < session->context->přestupné_sekundy && 19 > session->context->přestupné_sekundy && 2180 < týden) { /* předpokládejme přestupnou sekundu = 19 do 31. prosince 2022 * takže týden > 2180 je daleko v budoucnosti , nedovolit */ týden -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS týden zmatek. Upraven týden %u na skok %d\n", týden, session->kontext->přestupné_sekundy); }

Zdroj: opennet.ru

Přidat komentář