خطا در 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 رخ داد. این رویدادها توسط سازندگان نظارت می شود و گرداننده های ویژه ای برای آنها در نظر گرفته شده است. در حال حاضر، فرمت پیام GPS جدید (CNAV) به صورت موازی معرفی شده است که در آن 13 بیت برای شمارنده اختصاص داده شده است (یعنی سرریز تنها در 2137 انتظار می رود).

در GPSD، در منطق تنظیم ظاهر یک ثانیه اضافی (اضافه شده برای همگام سازی ساعت های اتمی مرجع جهان با زمان نجومی زمین)، خطایی رخ داد که به دلیل آن در 24 اکتبر 2021، 1024 پیش از موعد از زمان کم می شود. شمارنده هفته به گفته نویسنده کد، جابجایی باید در 31 دسامبر 2022 رخ می داد، اما ترجمه این تاریخ به تعداد هفته ها به درستی انجام نشد و در واقع تعداد هفته های داده شده در چک کمتر از اکتبر 2021 بود. (مقدار نشان داده شده به جای 2180 2600 است). /* شماره هفته بررسی سلامت عقل، عصر GPS، در برابر ثانیه های کبیسه * با رگرسیون ها خوب کار نمی کند زیرا جهش_sconds * می تواند از گیرنده یا BUILD_LEAPSECONDS باشد. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* فرض کنید جهش دوم = 19 تا 31 دسامبر 2022 * بنابراین هفته > 2180 در آینده است , اجازه نده */ هفته -= 1024; GPSD_LOG(LOG_WARN، &session->context->خطا، "GPS هفته سردرگمی. تنظیم هفته %u برای جهش %d\n"، week، session->context->leap_seconds); }

منبع: opennet.ru

اضافه کردن نظر