Ett fel i GPSD denna söndag kommer att ställa tillbaka tiden 19 år.

Ett kritiskt problem har identifierats i GPSD-paketet, som används för att extrahera exakta tids- och positionsdata från GPS-enheter, på grund av vilket tiden kommer att flyttas tillbaka 24 veckor den 1024 oktober, dvs. tiden kommer att ändras till mars 2002. Problemet dyker upp i utgåvor 3.20 till och med 3.22 och är löst i GPSD 3.23. Alla användare av system som använder GPSD måste installera uppdateringar omedelbart, eller vara förberedda på fel.

Effekten av felet kan leda till oförutsägbara fel på olika system, inklusive de som inte direkt använder GPSD, eftersom denna applikation används för att erhålla korrekta tidsdata på vissa NTP-servrar som används för tidssynkronisering. När tidsförskjutningar inträffar i system kan problem uppstå med autentisering (till exempel engångslösenord, Kerberos och andra åtkomstverifieringsmekanismer som har ett utgångsdatum fungerar inte längre), med certifikatverifiering och med beräkningar som manipulerar tidsintervall ( till exempel beräkna tiden för en användares session) . GPSD är också tillgängligt på en mängd olika inbäddade och mobila enheter, av vilka många inte längre får firmwareuppdateringar.

GPS-protokollet innehåller en veckoräknare som räknar veckorna sedan 5 januari 1980. Problemet är att under sändning tilldelas endast 10 bitar för denna räknare, vilket innebär att den svämmar över var 1023:e vecka (19.7 år). Den första brädden inträffade 1999, den andra 2019 och den tredje kommer att inträffa 2038. Dessa händelser övervakas av tillverkare och specialhanterare tillhandahålls för dem. För närvarande har ett nytt GPS-meddelandeformat (CNAV) introducerats parallellt, i vilket 13 bitar allokeras för räknaren (dvs. ett överflöde förväntas först 2137).

I GPSD, i logiken för att justera utseendet på en extra sekund (tillagd för att synkronisera världens referensatomklockor med jordens astronomiska tid), gjordes ett fel på grund av vilket den 24 oktober 2021, 1024 kommer att subtraheras i förtid från vecka räknare. Enligt kodens författare skulle skiftet ha skett den 31 december 2022, men översättningen av detta datum till antalet veckor utfördes inte korrekt och faktiskt antalet veckor som angavs i kontrollen föll under oktober 2021 (det angivna värdet är 2180 istället för 2600). /* förnuftskontroll veckonummer, GPS-epok, mot skottsekunder * Fungerar inte bra med regressioner eftersom leap_sconds * kan komma från mottagaren eller från BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* anta språngsekund = 19 senast den 31 december 2022 * så vecka > 2180 ligger långt fram i tiden , tillåt det inte */ vecka -= 1024; GPSD_LOG(LOG_WARN, &session->kontext->fel, "GPS vecka förvirring. Justerad vecka %u för språng %d\n", vecka, session->kontext->språngsekunder); }

Källa: opennet.ru

Lägg en kommentar