По информации CISA (американского агентства по обеспечению кибербезопасности и безопасности инфраструктуры), 24 октября 2021 года из-за ошибки в исходном коде открытого пакета GPSD (в версиях 3.20-3.22) произойдет сброс при получении точного системного времени из GPS-устройств на март 2002 года. Баг в программе устранен разработчиками в версии 3.23 пакета GPSD.
Ошибка в обработке данных 10 битного счетчика недель может привести к различным коллапсам в работе GPS-устройств у пользователей — их системы и службы станут недоступными или перестанут отвечать. Этот счетчик переполняется каждые 1023 недели. Последний раз это произошло в августе 2019 года. Следующее его переполнение произойдет в 2038 году.
Разработчик модуля timebase.c пакета GPSD внес в код корректировку появления лишней секунды для синхронизации эталонных мировых атомных часов с астрономическим временем Земли. Это событие со сдвигом времени на секунду вперед должно было произойти 31 декабря 2022 года. Однако, программист неверно перевел нужную дату в число недель и внес в текст модуля значение 2180 — это неделя, начинающаяся с 24 октября 2021 года.
/* sanity check week number, GPS epoch, against leap seconds
* Does not work well with regressions because the leap_sconds
* could be from the receiver, or from 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 future, 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);
}
\
Пакет GPSD используется для работы с GPS-устройствами на различном оборудовании, включая навигаторы, мультикоптеры, мобильные устройства на Android, для которых производители часто не выпускают вовремя обновлений или вообще не поддерживают их через некоторое время.