Feil i GPSD denne søndagen betyr en tidsendring for 19 år siden

Et kritisk problem er identifisert i GPSD-pakken, som brukes til å trekke ut nøyaktige tids- og posisjonsdata fra GPS-enheter, på grunn av dette, 24. oktober, vil tiden bli forskjøvet tilbake med 1024 uker, dvs. tidspunktet endres til mars 2002. Problemet vises i utgivelsene 3.20 til og med 3.22 og er løst i GPSD 3.23-utgaven. Alle brukere av systemer som bruker GPSD må raskt installere oppdateringer, eller være forberedt på feil.

Effekten av feilen kan føre til uforutsigbare feil på ulike systemer, inkludert de som ikke direkte bruker GPSD, siden denne applikasjonen brukes til å få nøyaktige tidsdata på enkelte NTP-servere som brukes til tidssynkronisering. Ved skiftende tid kan systemer oppleve problemer med autentisering (for eksempel engangspassord, Kerberos og andre tilgangsverifiseringsmekanismer som har en gyldighetsperiode vil slutte å fungere), med sertifikatverifisering og med beregninger som manipulerer tidsperioder (for eksempel, beregning av brukersesjonstid). GPSD er også tilgjengelig på en rekke innebygde og mobile enheter, hvorav mange ikke lenger mottar fastvareoppdateringer.

GPS-protokollen sørger for en uketeller som teller ukene siden 5. januar 1980. Problemet er at ved kringkasting blir det bare tildelt 10 biter for denne telleren, noe som innebærer overløp hver 1023. uke (19.7 år). Det første overløpet skjedde i 1999, det andre i 2019 og det tredje i 2038. Disse hendelsene spores av produsenter og spesialbehandlere tilbys for dem. For tiden er et nytt GPS-meldingsformat (CNAV) implementert parallelt, der 13 biter er tildelt for telleren (dvs. et overløp forventes først i 2137).

I GPSD ble det gjort en feil i logikken for å korrigere utseendet til et ekstra sekund (lagt til for å synkronisere verdens referanseatomklokke med jordens astronomiske tid), på grunn av dette vil 24 trekkes fra uketelleren for tidlig i oktober. 2021, 1024. Som unnfanget av forfatteren av koden, skulle skiftet skje 31. desember 2022, men oversettelsen av denne datoen til antall uker ble utført feil og antallet uker som faktisk ble gitt i sjekken falt under oktober 2021 ( verdien 2180 er angitt i stedet for 2600). /* fornuftssjekk ukenummer, GPS-epoke, mot skuddsekunder * Fungerer ikke bra med regresjoner fordi leap_sconds * kan være fra mottakeren, eller fra BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* anta sprangsekund = 19 innen 31. desember 2022 * så uke > 2180 er langt i fremtiden , ikke tillat det */ uke -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS-ukeforvirring. Justert uke %u for sprang %d\n", uke, økt->kontekst->sprangsekunder); }

Kilde: opennet.ru

Legg til en kommentar