GPSD-i viga sel pühapäeval tähendab ajamuutust 19 aastat tagasi

GPS-seadmetest täpsete aja- ja asukohaandmete väljavõtmiseks kasutatavas GPSD paketis on tuvastatud kriitiline probleem, mille tõttu nihkub kellaaeg 24. oktoobril 1024 nädalat tagasi, s.o. aeg muudetakse 2002. aasta märtsiks. Probleem ilmneb versioonides 3.20–3.22 (kaasa arvatud) ja on lahendatud GPSD 3.23-s. Kõik GPSD-d kasutavate süsteemide kasutajad peavad värskendused kohe installima või olema rikkeks valmis.

Vea mõju võib põhjustada ettearvamatuid tõrkeid erinevates süsteemides, sealhulgas nendes, mis otseselt GPSD-d ei kasuta, kuna seda rakendust kasutatakse täpsete ajaandmete hankimiseks mõnes aja sünkroonimiseks kasutatavas NTP-serveris. Kui süsteemides ilmnevad ajalised nihked, võivad tekkida probleemid autentimisega (nt ühekordsed paroolid, Kerberos ja muud aegumiskuupäevaga juurdepääsu kontrollimise mehhanismid enam ei tööta), sertifikaadi kontrollimise ja ajavahemikega manipuleerivate arvutustega ( näiteks kasutaja seansi aja arvutamine) . GPSD on saadaval ka mitmesugustes manustatud ja mobiilseadmetes, millest paljud ei saa enam püsivara värskendusi.

GPS-protokoll sisaldab nädalaloendurit, mis loeb nädalaid alates 5. jaanuarist 1980. Probleem on selles, et edastuse ajal eraldatakse sellele loendurile ainult 10 bitti, mis tähendab, et see voolab üle iga 1023 nädala (19.7 aasta) järel. Esimene ülevool toimus 1999. aastal, teine ​​2019. aastal ja kolmas 2038. aastal. Neid sündmusi jälgivad tootjad ja nende jaoks on ette nähtud spetsiaalsed käitlejad. Praegu on paralleelselt kasutusele võetud uus GPS-sõnumivorming (CNAV), milles loenduri jaoks on eraldatud 13 bitti (st ületäitumist on oodata alles 2137. aastal).

GPSD-s tekkis lisasekundi välimuse reguleerimise loogikas (lisatud, et sünkroniseerida maailma võrdlusaatomkellad Maa astronoomilise ajaga) viga, mille tõttu 24. oktoobril 2021 lahutatakse 1024 ennetähtaegselt nädala loendur. Koodi autori hinnangul oleks nihe pidanud toimuma 31. detsembril 2022, kuid selle kuupäeva tõlkimine nädalate arvuks ei sujunud korrektselt ja tegelikult jäi tšekis antud nädalate arv 2021. aasta oktoobri alla. (näidatud väärtus on 2180 asemel 2600). /* mõistuse kontrolli nädala number, GPS epohh, hüpesekundite vastu * Ei tööta hästi regressioonidega, kuna hüppesekundid * võivad pärineda vastuvõtjast või BUILD_LEAPSECONDSist. */ if (0 < seanss->kontekst->hüppe_sekundid && 19 > seanss->kontekst->hüppesekundid && 2180 < nädal) { /* oletame hüpesekund = 19 31. detsembriks 2022 * nii et nädal > 2180 on tulevikus , ei luba seda */ nädal -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS-i nädala segadus. Kohandatud nädal %u hüppeks %d\n", nädal, seanss->kontekst->hüppe_sekundid); }

Allikas: opennet.ru

Lisa kommentaar