Napaka v GPSD to nedeljo pomeni spremembo časa pred 19 leti

V paketu GPSD, ki se uporablja za pridobivanje natančnih podatkov o času in položaju iz naprav GPS, je bila ugotovljena kritična težava, zaradi katere se bo 24. oktobra čas premaknil za 1024 tednov nazaj, tj. ura bo prestavljena na marec 2002. Težava se pojavi v izdajah od 3.20 do vključno 3.22 in je odpravljena v GPSD 3.23. Vsi uporabniki sistemov, ki uporabljajo GPSD, morajo takoj namestiti posodobitve ali pa biti pripravljeni na napake.

Učinek napake lahko privede do nepredvidljivih okvar na različnih sistemih, vključno s tistimi, ki ne uporabljajo neposredno GPSD, saj se ta aplikacija uporablja za pridobivanje natančnih časovnih podatkov na nekaterih strežnikih NTP, ki se uporabljajo za sinhronizacijo časa. Ko pride do časovnih premikov v sistemih, se lahko pojavijo težave z avtentikacijo (na primer enkratna gesla, Kerberos in drugi mehanizmi za preverjanje dostopa, ki imajo datum poteka, ne bodo več delovali), s preverjanjem potrdil in z izračuni, ki manipulirajo s časovnimi razponi ( na primer izračun časa uporabniške seje). GPSD je na voljo tudi na različnih vgrajenih in mobilnih napravah, od katerih mnoge ne prejemajo več posodobitev vdelane programske opreme.

Protokol GPS vključuje tedenski števec, ki šteje tedne od 5. januarja 1980. Težava je v tem, da je med oddajanjem temu števcu dodeljenih le 10 bitov, kar pomeni, da se prelije vsakih 1023 tednov (19.7 let). Prvo prelivanje se je zgodilo leta 1999, drugo leta 2019, tretje pa se bo zgodilo leta 2038. Te dogodke spremljajo proizvajalci in zanje zagotovijo posebne upravljalce. Trenutno je vzporedno uveden nov format sporočila GPS (CNAV), v katerem je za števec dodeljenih 13 bitov (tj. presežek pričakujemo šele leta 2137).

V GPSD je v logiki prilagajanja videza dodatne sekunde (dodane za sinhronizacijo svetovnih referenčnih atomskih ur z zemeljskim astronomskim časom) prišlo do napake, zaradi katere bo 24. oktobra 2021 1024 predčasno odšteto od tedenski števec. Po mnenju avtorja kode bi se moral premik zgoditi 31. decembra 2022, vendar prevedba tega datuma v število tednov ni bila pravilno izvedena in dejansko je število tednov, navedeno v čeku, padlo pod oktober 2021 (navedena vrednost je 2180 namesto 2600). /* številka tedna preverjanja razumnosti, epoha GPS, glede na prestopne sekunde * Ne deluje dobro z regresijami, ker so prestopne_skonde * lahko od sprejemnika ali od BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* predpostavimo, da je prestopna sekunda = 19 do 31. decembra 2022 * torej je teden > 2180 daleč v prihodnosti , tega ne dovoli */ teden -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "Tedenska zmeda GPS. Prilagojen teden %u za prestop %d\n", teden, session->context->leap_seconds); }

Vir: opennet.ru

Dodaj komentar