Η Google ανακάλυψε εκατοντάδες συνθήκες αγώνων στον πυρήνα Linux χρησιμοποιώντας το KCSAN

Linux Kernel

Μηχανικοί της Google που συμβάλλουν στον πυρήνα του Linux έχουν ανακοινώσει ότι έχουν ανακαλύψει εκατοντάδες "Race Conditions", στον πυρήνα χρησιμοποιώντας το KCSAN. Η εταιρεία εργάζεται εδώ και πολύ καιρό στο AddressSanitizer για να βρει σφάλματα που σχετίζονται με καταστροφή της μνήμης ή UndefinedBehaviorSanitizer για μη καθορισμένη συμπεριφορά στον κώδικα.

Αυτή τη φορά, Η Google προσφέρει έναν νέο ανιχνευτή "Race Conditions" για τον πυρήνα Linux που ονομάζεται KCSAN (Απολυμαντικό ταυτότητας πυρήνα). Αυτές οι κρίσιμες ευπάθειες δεν είναι νέες. Στην πραγματικότητα το Οι συνθήκες του αγώνα εμφανίζονται όταν δύο ή περισσότερα νήματα στην ίδια διαδικασία έχουν πρόσβαση στην ίδια θέση μνήμης ταυτόχρονα, όπου τουλάχιστον μία από τις προσβάσεις είναι η εγγραφή και όταν τα νήματα δεν χρησιμοποιούν αποκλειστικές κλειδαριές για τον έλεγχο της πρόσβασής τους σε αυτήν τη μνήμη.

Όταν πληρούνται αυτές οι προϋποθέσεις, η εντολή πρόσβασης δεν είναι ντετερμινιστική και ο υπολογισμός μπορεί να δώσει διαφορετικά αποτελέσματα από τη μία εκτέλεση στην άλλη ανάλογα με αυτήν τη σειρά.

Οι συνθήκες των αγώνων θεωρούνται όλο και περισσότερο ως ταυτόχρονα σφάλματα πρόσβασης και είναι δύσκολο να αναπαραχθούν και διάγνωση σε παράλληλα προγράμματα. Ο πυρήνας Linux είναι ένα σύστημα λογισμικού μεγάλης κλίμακας, στο οποίο ο παραλληλισμός με έντονο νήμα και η μη ντετερμινιστική αλληλεπίδραση νήματος υπόκεινται περισσότερο σε ανταγωνιστικές συνθήκες.

Ορισμένες ανταγωνιστικές καταστάσεις μπορεί να είναι καλοήθεις, αλλά πολλές από αυτές που έχουν προσδιοριστεί μέχρι στιγμής θεωρούνται λάθη.

Ο πυρήνας Linux παρέχει διάφορους μηχανισμούς για την αποφυγή και τη διαχείριση αυτών των τύπων συνθηκών Δεδομένου ότι υπάρχουν εργαλεία όπως το Thread Analyzer ή το KTSAN (Kernel Thread Sanitizer) για την ανίχνευση κρίσιμων σφαλμάτων εκτέλεσης στον πυρήνα Linux.

Ωστόσο, η Google, η οποία συμβάλλει επίσης στον πυρήνα του Linux, πρότεινε πρόσφατα το KCSAN, ένας νέος ανιχνευτής Race Conditions για τον πυρήνα, παρόμοιος με το KTSAN.

Σύμφωνα με την Google, το KCSAN επικεντρώνεται στην ανακάλυψη ανταγωνιστικών καταστάσεων στον κώδικα του πυρήνα. Αυτός ο δυναμικός κρίσιμος ανιχνευτής επιτυχίας είναι μια εναλλακτική λύση του Kernel Thread Sanitizer (KTSAN).

Σύμφωνα με την εξήγηση της Google, Το KCSAN βασίζεται σε σημεία παρακολούθησης δειγματοληψίας, σε αντίθεση με τον ανιχνευτή KTSAN, που είναι ένας κρίσιμος ανιχνευτής αγώνα πριν από την εκδήλωση. Βασικές προτεραιότητες στο σχεδιασμό KCSAN είναι η έλλειψη ψευδών θετικών, η επεκτασιμότητα και η απλότητα.

Το KCSAN χρησιμοποιεί εργαλεία συλλογής για πρόσβαση στη μνήμη. Το KCSAN είναι συμβατό με τους μεταγλωττιστές GCC και Clang. Με το GCC, απαιτεί έκδοση 7.3.0 ή μεταγενέστερη και με το Clang, απαιτεί έκδοση 7.0.0 ή μεταγενέστερη.

Στη σελίδα GitHub του έργουΟ Marco Elver της Google έγραψε ότι χρησιμοποιώντας το KCSAN σε δοκιμές τον περασμένο μήνα, βρήκαν σε μόλις δύο ημέρες περισσότερες από 300 μοναδικές βασικές καταστάσεις ανταγωνισμού. Το KCSAN παρέχει πολλές επιλογές διαμόρφωσης για να προσαρμόσετε τη συμπεριφορά του.

«Χρησιμοποιούμε το KCSAN μέσω του Syzkaller για αρκετές εβδομάδες και έχουμε βρει πολλά σφάλματα. Αρχικά τον Σεπτέμβριο του 2019, εντοπίσαμε περισσότερες από 300 μοναδικές καταστάσεις ανταγωνισμού μέσα σε μόλις δύο ημέρες », έγραψε.

Η Google είπε ότι η συνολική προσέγγιση βασίζεται στο DataCollider, Ένας άλλος δυναμικός ανιχνευτής ανταγωνιστικών καταστάσεων στις μονάδες πυρήνα. Αλλά σε αντίθεση με το DataCollider, το KCSAN δεν χρησιμοποιεί σημεία παρακολούθησης υλικού, αλλά βασίζεται σε εργαλεία συλλογής.

Τα σημεία παρακολούθησης εφαρμόζονται χρησιμοποιώντας αποτελεσματική κωδικοποίηση που αποθηκεύει τον τύπο, το μέγεθος και τη διεύθυνση πρόσβασης σε ένα μακρύ αρχείο. Τα οφέλη από τη χρήση ευέλικτων σημείων παρακολούθησης είναι η φορητότητα και μεγαλύτερη ευελιξία στον περιορισμό της πρόσβασης που μπορεί να ενεργοποιήσει ένα σημείο παρακολούθησης.

Ακολουθούν ορισμένα από τα βασικά σημεία που έκανε το KCSAN για το Google:

  • Υψηλή απόδοση: Ο χρόνος εκτέλεσης του KCSAN είναι ελάχιστος και δεν απαιτεί κοινόχρηστο κλείδωμα κατάστασης για κάθε πρόσβαση. Το αποτέλεσμα είναι πολύ καλύτερη απόδοση από το KTSAN.
  • Χωρίς επιπλέον μνήμη: σύμφωνα με την Google, δεν απαιτείται προσωρινή μνήμη. Η τρέχουσα εφαρμογή χρησιμοποιεί έναν μικρό αριθμό μήκους για την κωδικοποίηση των πληροφοριών του σημείου παρακολούθησης, κάτι που είναι αμελητέο.
  • Εντολή μνήμης: Το KCSAN δεν γνωρίζει τους κανόνες ελέγχου του μοντέλου μνήμης πυρήνα Linux (LKMM). Αυτό μπορεί να οδηγήσει σε απώλεια κρίσιμων αγώνων (ψευδώς αρνητικά) σε σύγκριση με έναν ανιχνευτή αγώνων πριν από την εκδήλωση, όπως το KTSAN
  • Ακρίβεια: Σύμφωνα με την Google, το KCSAN είναι ανακριβές επειδή χρησιμοποιεί μια στρατηγική δειγματοληψίας.
  • Απαιτείται σχολιασμός: Απαιτείται ελάχιστος σχολιασμός εκτός του χρόνου εκτέλεσης του KCSAN. Στην περίπτωση ενός ακροατή συμβάντων προϋποθέσεων, οποιαδήποτε παράλειψη οδηγεί σε ψευδώς θετικά, το οποίο είναι ιδιαίτερα σημαντικό στο πλαίσιο του πυρήνα που περιλαμβάνει προσαρμοσμένους μηχανισμούς χρονισμού.
  • Ανίχνευση δυναμικών εγγραφών από συσκευές: Ελέγχοντας τις τιμές δεδομένων κατά τη ρύθμιση του σημείου παρακολούθησης, μπορούν επίσης να εντοπιστούν δυναμικές εγγραφές από συσκευές.

Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.