Памылка ў GPSD у гэтую нядзелю перавядзе да змены часу на 19 гадоў таму

У пакеце GPSD, які ўжываецца для вымання дакладнага часу і дадзеных аб каардынатах з GPS-прылад, выяўлена крытычная праблема, з-за якой 24 кастрычніка адбудзецца зрушэнне часу на 1024 тыдні таму, г.зн. час будзе пераведзены на сакавік 2002 года. Праблема выяўляецца ў выпусках з 3.20 па 3.22 уключна і ўхіленая ў выпуску GPSD 3.23. Усім карыстальнікам сістэм, у якіх выкарыстоўваецца 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). /* Sanity check week number, GPS epoch, against leap seconds * Не працаваць без запуску, таму што leap_sconds * можна будзе з receiver, або з BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* assume leap second = 19 by 31 Dec 2022 * so week > 2180 is way in the , do not allow it */ week -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "GPS week confusion. Adjusted week %u for leap %d\n", week, session->context->leap_seconds); }

Крыніца: opennet.ru

Дадаць каментар