Энэ ням гаригт GPSD-ийн алдаа нь цагийг 19 жилээр ухраах болно.

GPS төхөөрөмжөөс цаг хугацаа, байршлын нарийн өгөгдлийг гаргаж авахад ашигладаг GPSD багцад нэн чухал асуудал илэрсэн бөгөөд үүний улмаас цаг хугацаа 24-р сарын 1024-нд 2002 долоо хоногоор ухрах болно. цагийг 3.20 оны 3.22-р сар болгон өөрчлөх болно. Асуудал нь 3.23-аас XNUMX хүртэлх хувилбаруудад гарч ирсэн бөгөөд GPSD XNUMX дээр шийдэгдсэн. GPSD ашигладаг системийн бүх хэрэглэгчид шинэчлэлтүүдийг нэн даруй суулгах эсвэл бүтэлгүйтэхэд бэлэн байх шаардлагатай.

Алдааны үр нөлөө нь GPSD-г шууд ашигладаггүй системүүд гэх мэт янз бүрийн системүүдэд урьдчилан таамаглах боломжгүй доголдолд хүргэж болзошгүй тул энэ програм нь цагийг синхрончлоход ашигладаг NTP серверүүд дээр цаг хугацааны үнэн зөв мэдээллийг авахад ашиглагддаг. Системд цагийн өөрчлөлт гарах үед баталгаажуулалт (жишээлбэл, нэг удаагийн нууц үг, Kerberos болон хүчинтэй хугацаа нь дууссан бусад хандалтыг баталгаажуулах механизмууд ажиллахаа болино), гэрчилгээ баталгаажуулах, цагийн хязгаарыг өөрчилдөг тооцоолол зэрэгтэй холбоотой асуудал үүсч болно. жишээлбэл, хэрэглэгчийн сессийн цагийг тооцоолох). GPSD нь суулгагдсан болон гар утасны төрөл бүрийн төхөөрөмж дээр байдаг бөгөөд тэдгээрийн ихэнх нь програм хангамжийн шинэчлэлтийг хүлээж авахаа больсон.

GPS протокол нь 5 оны 1980-р сарын 10-аас хойшхи долоо хоногуудыг тоолох долоо хоног тоологчийг агуулдаг. Асуудал нь нэвтрүүлгийн явцад энэ тоолуурт зөвхөн 1023 бит хуваарилагдсан байдаг бөгөөд энэ нь 19.7 долоо хоног тутамд (1999 жил) хальж байна гэсэн үг юм. Эхний халилт 2019 онд, хоёр дахь нь 2038 онд, гурав дахь нь 13 онд тохиолдох болно. Эдгээр үйл явдлыг үйлдвэрлэгчид хянаж, тусгай зохицуулагчаар хангадаг. Одоогийн байдлаар шинэ GPS мессежийн форматыг (CNAV) зэрэгцээ нэвтрүүлсэн бөгөөд үүнд тоолуурт 2137 бит хуваарилагдсан (өөрөөр хэлбэл зөвхөн XNUMX онд халих төлөвтэй байна).

GPSD-д нэмэлт секундын харагдах байдлыг тохируулах логикт (дэлхийн жишиг атомын цагийг дэлхийн одон орны цагтай синхрончлоход нэмсэн) алдаа гарсан тул 24 оны 2021-р сарын 1024-нд 31-ийг хугацаанаас нь өмнө хасах болно. долоо хоногийн тоолуур. Кодын зохиогчийн хэлснээр, ээлж 2022 оны 2021-р сарын 2180-нд болох ёстой байсан ч энэ огноог долоо хоногийн тоо болгон хөрвүүлэх нь зөв хийгдээгүй бөгөөд үнэндээ чекэд заасан долоо хоногийн тоо 2600 оны 0-р сард буурсан байна. (заасан утга нь 19 биш 2180 байна). /* эрүүл мэндийг шалгах долоо хоногийн дугаар, GPS-ийн эрин үе, үсрэлт секундын эсрэг * Үсрэх_сконд * нь хүлээн авагчаас эсвэл BUILD_LEAPSECONDS-с байж болох тул регресстэй ажиллахгүй. */ хэрэв (19 < сесс->контекст->үсрэлт_секунд && 31 > сесс->контекст->үсрэлт_секунд && 2022 < долоо хоног) { /* 2180 оны 1024-р сарын XNUMX гэхэд үсрэлт секунд = XNUMX байна гэж үзнэ * тиймээс долоо хоног > XNUMX нь ирээдүйд хүрэх зам юм , бүү зөвшөөр */ долоо хоног -= XNUMX; GPSD_LOG(LOG_WARN, &session->контекст->алдаа, "GPS долоо хоногийн төөрөгдөл. %u үсрэлт %d\n-д тохируулсан долоо хоног", долоо хоног, сесс->контекст->үсрэлт_секунд); }

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх