June 1

Крупный сбой 1 июня 2025 г. или как неверно поставленная точка аппаратно повалила сервера.

Привет, все вы давно знаете, что я являюсь разработчиком Linux-дистрибутива «‎Веди ОС», который еще находится на стадии бета тестирования среди узкого круга лиц, который базируется на Arch Linux для 64-битных и ARM машин и Debian для 32-Bit ONLY машин, также в некотором разе идет тестирование модулей моего дистрибутива на чистых версиях этих дистрибутивов и иногда люди устанавливают данные модули из-за их простоты и я думал до сегодняшнего дня что ничего не требует доработок - все работает и так, остается только улучшать код - но на сколько я ошибался в тот момент.

Наступило 1 июня 2025 года, по истине печальный день, запомнившийся людям терактом в Брянской области, но не одним единым таким обстоятельством обстояло дело этим жарким летним днем, дело в том, что днем в 14 часов по Хабаровску обрушились сервера без явной на то причины, притом не все, а те что использовали проприетарный протокол синхронизации времени GTM (General Time Management) в своих операционных системах (а он кстати используется во всех Альфа и бета версиях ВЕДИ ОС, а также его иногда устанавливают вместо стандартного NTP в Debian-подобных системах из-за его точности).

Ну а теперь углубимся в суть бага - дело в том, что во время синхронизации времени сервер передает число в 96-битной системе счисления, при этом формат времени несколько иной, чем вы привыкли видеть (т.е. число с 29 знаками, при этом формат даты и времени - 2009-xx/MM/DD HH:MM:SS, где xx разница между нынешним и 2009 годом (началом исчисления) - 2, а передается это число в перемноженном друг на друга формате, т.е. если сегодня 1 января 2025 г. 12 часов 40 минут 20 секунд, то это передастся как число 00000000000000000000270009600 или если расшифровать 2009-14/01/01 00:40:20 PM, кстати тут ресурса есть еще на несколько тысяч лет так как крайнее число календаря 999-99 (заметили переворот вниз колбасой? т.е. через 100 лет год перевернется и составит 114-09, а через 1000 лет 014-19 тут уже тысяча ушла вперед)), ладно мы оторвались от дела.

Ну так вот, дело в том, что для корректной работы времени его требуется постоянно переводить в формат Unix Time, либо 32-битный, либо 64-битный, так как Linux еще не научилась работать с таким форматом времени который был изложен выше и все бы хорошо, но в коде самого алгоритма закрался баг, который проявился только 1 июня 2025 года - связан он с переполнением буфера из-за ошибки в алгоритме где делается постановка точки в числе из-за чего вместо того, в переменную записывалось недостижимое число года и тогда или все улетало за пределы 2099 года или наоборот все уходило в отрицательное значение из-за чего даже BIOS материнской платы крашился при попытке расшифровки значений CMOS (дата и время ОС выставляет и там), но в оучшем случае все заканчивалось Kernel Panic и нежеланием ОС грузиться, ну а решением проблемы стало обнуление настроек CMOS и выставление даты и времени в BIOS Setup.

об этом я даже написал на своем телеграм канале

Впрочем ошибку в коде я нашел достаточно быстро и и даже выкатил заплатку, которую можно установить по комманде

Arch

Pacman -Syu

Debian

apt-get upgrade

Веди ОС

arjman --updateos

А на этом у меня все. Спасибо за прочтение!

Поддержите обязательно копеечкой.