GPSD փաթեթում կարևոր խնդիր է հայտնաբերվել, որն օգտագործվում է GPS սարքերից ճշգրիտ ժամանակի և դիրքի տվյալներ հանելու համար, ինչը կհանգեցնի հոկտեմբերի 24-ի ժամը 1024 շաբաթով հետ տեղափոխվելու կամ 2002 թվականի մարտ ամիսը: GPSD օգտագործող համակարգերի բոլոր օգտվողները պետք է անմիջապես տեղադրեն թարմացումներ կամ պատրաստ լինեն ձախողման:
Վրիպակի ազդեցությունը կարող է հանգեցնել անկանխատեսելի խափանումների տարբեր համակարգերում, ներառյալ նրանց, որոնք ուղղակիորեն չեն օգտագործում GPSD, քանի որ այս հավելվածն օգտագործվում է ժամանակի համաժամացման համար օգտագործվող որոշ NTP սերվերներից ճշգրիտ ժամանակի տվյալներ ստանալու համար: Երբ համակարգերում ժամանակային տեղաշարժեր են տեղի ունենում, նույնականացման հետ կապված խնդիրներ կարող են առաջանալ (օրինակ՝ մեկանգամյա գաղտնաբառերը, Kerberos-ը և մուտքի վերահսկման այլ մեխանիզմները, որոնք ունեն ժամկետի ավարտ, այլևս չեն աշխատի), վկայագրի վավերացման և ժամանակային միջակայքերը կառավարող հաշվարկների հետ (օրինակ՝ օգտատիրոջ աշխատաշրջանի ժամանակի հաշվարկը): GPSD-ը հասանելի է նաև մի շարք ներկառուցված և շարժական սարքերի վրա, որոնցից շատերն այլևս չեն ստանում որոնվածի թարմացումներ:
GPS արձանագրությունը ներառում է շաբաթների հաշվիչը, որը հաշվում է շաբաթներ սկսած 5 թվականի հունվարի 1980-ից: Խնդիրն այն է, որ հեռարձակման ժամանակ այս հաշվիչին հատկացվում է ընդամենը 10 բիթ, ինչը նշանակում է, որ այն լցվում է 1023 շաբաթը մեկ (19.7 տարի): Առաջին արտահոսքը տեղի է ունեցել 1999-ին, երկրորդը՝ 2019-ին, իսկ երրորդը տեղի կունենա 2038-ին: Այս իրադարձություններին հետևում են արտադրողները, և դրանց համար նախատեսված են հատուկ մշակողներ: Ներկայումս զուգահեռ ներդրվել է GPS հաղորդագրության նոր ձևաչափը (CNAV), որում հաշվիչի համար հատկացվում է 13 բիթ (այսինքն՝ արտահոսք սպասվում է միայն 2137 թվականին)։
GPSD-ում վայրկյանների շտկման տրամաբանության մեջ ներմուծվեց մի սխալ (ավելացվել է աշխարհի հենակետային ատոմային ժամացույցները Երկրի աստղագիտական ժամանակի հետ համաժամեցնելու համար), որի պատճառով 2021 թվականի հոկտեմբերի 24-ին շաբաթվա հաշվիչից վաղաժամ հանվեց 1024-ը: Կոդի հեղինակը նախատեսել էր, որ տեղաշարժը տեղի կունենա 2022 թվականի դեկտեմբերի 31-ին, բայց այս ամսաթվի շաբաթների քանակի փոխակերպումը սխալ է կատարվել, և ստուգման մեջ նշված շաբաթների իրական թիվը ընկել է 2021 թվականի հոկտեմբերի սահմաններում (նշված արժեքը 2600-ի փոխարեն 2180 էր): /* առողջական վիճակի ստուգման շաբաթվա համարը, GPS դարաշրջանը, ցատկային վայրկյանների դեմ * Լավ չի աշխատում ռեգրեսիաների հետ, քանի որ leap_sconds *-ը կարող է լինել ընդունիչից կամ BUILD_LEAPSECONDS-ից: */ եթե (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* ենթադրենք, որ 2022 թվականի դեկտեմբերի 31-ի դրությամբ ցատկային վայրկյանը = 19 է * այսինքն՝ շաբաթ > 2180-ը շատ հեռու է ապագայում, թույլ մի տվեք դա */ week -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS շաբաթվա շփոթություն։ Կարգավորվել է շաբաթ %u-ն ցատկային %d\n-ի համար", week, session->context->leap_seconds); }
Source: opennet.ru
