Ein GPSD-Fehler an diesem Sonntag entspricht einer Zeitumstellung von vor 19 Jahren

Im GPSD-Paket, das zum Extrahieren genauer Zeit- und Positionsdaten von GPS-Geräten verwendet wird, wurde ein kritisches Problem festgestellt, aufgrund dessen die Zeit am 24. Oktober um 1024 Wochen, d. h. Die Uhrzeit wird auf März 2002 geändert. Das Problem tritt in den Versionen 3.20 bis einschließlich 3.22 auf und wurde in der GPSD-Version 3.23 behoben. Alle Benutzer von Systemen, die GPSD verwenden, müssen dringend Updates installieren oder auf einen Ausfall vorbereitet sein.

Die Auswirkung des Fehlers kann zu unvorhersehbaren Ausfällen auf verschiedenen Systemen führen, auch auf solchen, die GPSD nicht direkt verwenden, da diese Anwendung verwendet wird, um genaue Zeitdaten auf einigen NTP-Servern zu erhalten, die für die Zeitsynchronisierung verwendet werden. Bei der Zeitverschiebung können bei Systemen Probleme mit der Authentifizierung (z. B. Einmalkennwörter, Kerberos und andere Zugriffsüberprüfungsmechanismen mit Gültigkeitsdauer funktionieren nicht mehr), mit der Zertifikatsüberprüfung und mit Berechnungen, die Zeitbereiche manipulieren (z. B. Berechnung der Benutzersitzungszeit). GPSD ist auch auf einer Vielzahl eingebetteter und mobiler Geräte verfügbar, von denen viele keine Firmware-Updates mehr erhalten.

Das GPS-Protokoll sieht einen Wochenzähler vor, der die Wochen seit dem 5. Januar 1980 zählt. Das Problem besteht darin, dass diesem Zähler beim Senden nur 10 Bit zugewiesen werden, was bedeutet, dass er alle 1023 Wochen (19.7 Jahre) überläuft. Der erste Überlauf ereignete sich im Jahr 1999, der zweite im Jahr 2019 und der dritte im Jahr 2038. Diese Ereignisse werden von Produzenten verfolgt und es werden spezielle Handler für sie bereitgestellt. Derzeit wurde parallel ein neues GPS-Nachrichtenformat (CNAV) implementiert, bei dem 13 Bits für den Zähler reserviert sind (d. h. ein Überlauf wird erst bei 2137 erwartet).

Bei GPSD wurde ein Fehler in der Logik zur Korrektur des Auftretens einer zusätzlichen Sekunde (hinzugefügt, um die Referenz-Atomuhr der Welt mit der astronomischen Zeit der Erde zu synchronisieren) gemacht, wodurch 24 vorzeitig vom Wochenzähler im Oktober abgezogen wird 2021. 1024. Nach der Vorstellung des Autors des Codes sollte die Verschiebung am 31. Dezember 2022 stattfinden, aber die Umrechnung dieses Datums in die Anzahl der Wochen wurde falsch durchgeführt und die tatsächlich im Scheck angegebene Anzahl der Wochen fiel unter Oktober 2021 ( es wird der Wert 2180 statt 2600 angezeigt). /* Wochennummer, GPS-Epoche, gegen Schaltsekunden überprüfen * Funktioniert nicht gut mit Regressionen, da die leap_sconds * vom Empfänger oder von BUILD_LEAPSECONDS stammen könnten. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < Woche) { /* Schaltsekunde = 19 bis zum 31. Dezember 2022 annehmen * Woche > 2180 liegt also weit in der Zukunft , nicht zulassen */ Woche -= 1024; GPSD_LOG(LOG_WARN, &session->context->errout, „GPS-Wochenverwirrung. Woche %u für Sprung %d\n angepasst“, Woche, session->context->leap_seconds); }

Source: opennet.ru

Kommentar hinzufügen