Το σφάλμα στο GPSD αυτή την Κυριακή μεταφράζεται σε αλλαγή ώρας πριν από 19 χρόνια

Εντοπίστηκε ένα κρίσιμο ζήτημα στο πακέτο GPSD, το οποίο χρησιμοποιείται για την εξαγωγή ακριβών δεδομένων ώρας και θέσης από συσκευές GPS, λόγω του οποίου, στις 24 Οκτωβρίου, η ώρα θα μεταφερθεί πίσω κατά 1024 εβδομάδες, δηλ. Η ώρα θα αλλάξει σε Μάρτιο 2002. Το ζήτημα εμφανίζεται στις εκδόσεις 3.20 έως 3.22 συμπεριλαμβανομένων και επιδιορθώνεται στην έκδοση του GPSD 3.23. Όλοι οι χρήστες συστημάτων που χρησιμοποιούν GPSD πρέπει να εγκαταστήσουν επειγόντως ενημερώσεις ή να είναι προετοιμασμένοι για αποτυχία.

Η επίδραση του σφάλματος μπορεί να οδηγήσει σε απρόβλεπτες βλάβες σε διάφορα συστήματα, συμπεριλαμβανομένων αυτών που δεν χρησιμοποιούν απευθείας GPSD, καθώς αυτή η εφαρμογή χρησιμοποιείται για τη λήψη ακριβών δεδομένων ώρας σε ορισμένους διακομιστές NTP που χρησιμοποιούνται για συγχρονισμό χρόνου. Κατά τη μετατόπιση χρόνου, τα συστήματα μπορεί να αντιμετωπίσουν προβλήματα με τον έλεγχο ταυτότητας (για παράδειγμα, οι κωδικοί πρόσβασης μίας χρήσης, οι Kerberos και άλλοι μηχανισμοί επαλήθευσης πρόσβασης που έχουν περίοδο ισχύος θα σταματήσουν να λειτουργούν), με την επαλήθευση πιστοποιητικού και με υπολογισμούς που χειρίζονται χρονικά εύρη (για παράδειγμα, υπολογισμός χρόνου συνεδρίας χρήστη) . Το GPSD είναι επίσης διαθέσιμο σε μια ποικιλία ενσωματωμένων και φορητών συσκευών, πολλές από τις οποίες δεν λαμβάνουν πλέον ενημερώσεις υλικολογισμικού.

Το πρωτόκολλο GPS προβλέπει έναν μετρητή εβδομάδων που μετρά τις εβδομάδες από τις 5 Ιανουαρίου 1980. Το πρόβλημα είναι ότι κατά τη μετάδοση, εκχωρούνται μόνο 10 bit για αυτόν τον μετρητή, πράγμα που συνεπάγεται την υπερχείλισή του κάθε 1023 εβδομάδες (19.7 χρόνια). Η πρώτη υπερχείλιση σημειώθηκε το 1999, η δεύτερη το 2019 και η τρίτη το 2038. Αυτά τα συμβάντα παρακολουθούνται από τους παραγωγούς και παρέχονται ειδικοί χειριστές για αυτά. Επί του παρόντος, έχει εφαρμοστεί παράλληλα μια νέα μορφή μηνύματος GPS (CNAV), στην οποία εκχωρούνται 13 bit για τον μετρητή (δηλαδή, η υπερχείλιση αναμένεται μόνο το 2137).

Στο GPSD, έγινε ένα σφάλμα στη λογική για τη διόρθωση της εμφάνισης ενός επιπλέον δευτερολέπτου (που προστέθηκε για να συγχρονίσει το παγκόσμιο ατομικό ρολόι αναφοράς με την αστρονομική ώρα της Γης), λόγω του οποίου το 24 θα αφαιρεθεί πρόωρα από τον μετρητή εβδομάδας του Οκτωβρίου 2021, 1024. Όπως αντιλήφθηκε ο συντάκτης του κώδικα, η μετατόπιση υποτίθεται ότι θα γινόταν στις 31 Δεκεμβρίου 2022, αλλά η μετάφραση αυτής της ημερομηνίας στον αριθμό των εβδομάδων έγινε εσφαλμένα και ο αριθμός των εβδομάδων που δόθηκε στην επιταγή ήταν κάτω από τον Οκτώβριο του 2021 ( αντί για 2180 αναγράφεται η τιμή 2600). /* Αριθμός εβδομάδας ελέγχου λογικής, εποχή GPS, έναντι άλμα δευτερολέπτων * Δεν λειτουργεί καλά με παλινδρομήσεις, επειδή τα άλματα_δευτερόλεπτα * μπορεί να προέρχονται από τον δέκτη ή από BUILD_LEAPSECONDS. */ if (0 < session->context->leap_seconds && 19 > session->context->leap_seconds && 2180 < week) { /* assume leap second = 19 by 31 Dec 2022 * άρα εβδομάδα > 2180 είναι πολύ στο μέλλον , μην το επιτρέψετε */ εβδομάδα -= 1024; GPSD_LOG(LOG_WARN, &session->context->error, "GPS week confusion. Προσαρμοσμένη εβδομάδα %u για άλμα %d\n", εβδομάδα, session->context->leap_seconds); }

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο