يُترجم الخطأ في GPSD هذا الأحد إلى تغيير زمني منذ 19 عامًا

تم تحديد مشكلة حرجة في حزمة GPSD، والتي تُستخدم لاستخراج بيانات الوقت والموقع الدقيقة من أجهزة GPS، والتي بسببها سيعود الوقت بمقدار 24 أسبوعًا في 1024 أكتوبر، أي 2002 أكتوبر. سيتم تغيير الوقت إلى مارس 3.20. تظهر المشكلة في الإصدارات من 3.22 إلى 3.23 ضمنًا وتم حلها في GPSD XNUMX. يحتاج جميع مستخدمي الأنظمة التي تستخدم 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، مقابل الثواني الكبيسة * لا يعمل بشكل جيد مع الانحدارات لأن القفزات * يمكن أن تكون من جهاز الاستقبال، أو من BUILD_LEAPSECONDS. */ if (0 < session->context->leap_thans && 19 > session->context->leap_thans && 2180 <week) { /* افترض أن الثانية الكبيسة = 19 بحلول 31 ديسمبر 2022 * لذا فإن الأسبوع> 2180 هو الطريق في المستقبل ، لا تسمح بذلك */week -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, "ارتباك أسبوع GPS. تم تعديل الأسبوع %u للقفزة %d\n"، أسبوع، جلسة->سياق->leap_ثانية)؛ }

المصدر: opennet.ru

إضافة تعليق