Έκδοση βιβλιοθήκης συστήματος Glibc 2.31

Μετά από έξι μήνες ανάπτυξης δημοσιεύθηκε έκδοση βιβλιοθήκης συστήματος Βιβλιοθήκη GNU C (glibc) 2.31, το οποίο συμμορφώνεται πλήρως με τις απαιτήσεις των ISO C11 και POSIX.1-2008. Η νέα έκδοση περιλαμβάνει διορθώσεις από 58 προγραμματιστές.

Υλοποιήθηκε στο Glibc 2.31 βελτιώσεις μπορείτε να σημειώσετε:

  • Προστέθηκε η μακροεντολή _ISOC2X_SOURCE για να ενεργοποιηθούν οι δυνατότητες που ορίζονται στο προσχέδιο μελλοντικού προτύπου ISO C2X. Αυτές οι δυνατότητες ενεργοποιούνται επίσης κατά τη χρήση της μακροεντολής _GNU_SOURCE ή κατά τη δημιουργία gcc με τη σημαία "-std=gnu2x".
  • Για συναρτήσεις που ορίζονται στο αρχείο κεφαλίδας "math.h" που στρογγυλοποιούν τα αποτελέσματά τους σε μικρότερο τύπο, οι αντίστοιχες μακροεντολές γενικού τύπου προτείνονται στο αρχείο "tgmath.h", όπως απαιτείται από τις προδιαγραφές TS 18661-1:2014 και TS 18661-3: 2015;
  • Προστέθηκε η συνάρτηση pthread_clockjoin_np(), η οποία περιμένει να ολοκληρωθεί το νήμα, λαμβάνοντας υπόψη το χρονικό όριο (εάν το χρονικό όριο λήξει πριν από την ολοκλήρωση, η συνάρτηση θα εμφανίσει σφάλμα). Διαφορετικός pthread_timedjoin_np(), στο pthread_clockjoin_np() είναι δυνατό να ορίσετε τον τύπο του χρονοδιακόπτη για τον υπολογισμό του χρονικού ορίου - CLOCK_MONOTONIC (λαμβάνει υπόψη τον χρόνο που αφιερώνει το σύστημα σε κατάσταση αναστολής λειτουργίας) ή CLOCK_REALTIME.
  • Το πρόγραμμα επίλυσης DNS υποστηρίζει πλέον την επιλογή trust-ad στο /etc/resolv.conf και τη σημαία RES_TRUSTAD στο _res.options, όταν οριστεί, η σημαία DNSSEC μεταδίδεται σε αιτήματα DNS AD (επικυρωμένα δεδομένα). Σε αυτήν τη λειτουργία, η σημαία AD που έχει οριστεί από τον διακομιστή γίνεται διαθέσιμη σε εφαρμογές που καλούν λειτουργίες όπως η res_search(). Από προεπιλογή, εάν οι προτεινόμενες επιλογές δεν έχουν οριστεί, το glibc δεν καθορίζει τη σημαία AD στα αιτήματα και τη διαγράφει αυτόματα στις απαντήσεις, υποδεικνύοντας ότι λείπουν οι έλεγχοι DNSSEC.
  • Η δημιουργία δεσμεύσεων κλήσεων συστήματος εργασίας για το Glibc δεν απαιτεί πλέον την εγκατάσταση των αρχείων κεφαλίδας πυρήνα Linux. Η εξαίρεση είναι η αρχιτεκτονική RISC-V 64-bit.
  • Αποκλείστηκε τρωτό CVE-2019-19126, που σας επιτρέπει να παρακάμψετε την προστασία
    ASLR σε προγράμματα με τη σημαία setuid και προσδιορίστε τη διάταξη διευθύνσεων σε φορτωμένες βιβλιοθήκες μέσω χειρισμού της μεταβλητής περιβάλλοντος LD_PREFER_MAP_32BIT_EXEC.

Αλλαγές που διακόπτουν τη συμβατότητα:

  • totalorder(), totalordermag() και παρόμοιες συναρτήσεις για άλλους τύπους κινητής υποδιαστολής δέχονται πλέον δείκτες ως επιχειρήματα για την εξάλειψη των προειδοποιήσεων σχετικά με τη μετατροπή τιμών σε κατάσταση ΝΑΝ, σύμφωνα με τις συστάσεις του TS 18661-1 που προτείνεται για το μελλοντικό πρότυπο C2X.
    Τα υπάρχοντα εκτελέσιμα που περνούν απευθείας ορίσματα κινητής υποδιαστολής θα συνεχίσουν να εκτελούνται χωρίς τροποποίηση.

  • Η συνάρτηση χρονισμού που έχει καταργηθεί από καιρό δεν είναι πλέον διαθέσιμη για δυαδικά αρχεία που συνδέονται με glibc και ο ορισμός της έχει αφαιρεθεί από το time.h. Για να ρυθμίσετε την ώρα του συστήματος, χρησιμοποιήστε τη λειτουργία clock_settime. Στο μέλλον, σκοπεύουμε να καταργήσουμε την καταργημένη συνάρτηση ftime, καθώς και το αρχείο κεφαλίδας sys/timeb.h (θα πρέπει να χρησιμοποιείται το gettimeofday ή το clock_gettime αντί για το ftime).
  • Η συνάρτηση gettimeofday δεν μεταβιβάζει πλέον πληροφορίες σχετικά με τη ζώνη ώρας σε όλο το σύστημα (αυτή η δυνατότητα ήταν σχετική στις ημέρες του 4.2-BSD και έχει καταργηθεί για πολλά χρόνια). Το όρισμα 'tzp' θα πρέπει τώρα να μεταβιβαστεί με έναν μηδενικό δείκτη και η συνάρτηση localtime() θα πρέπει να χρησιμοποιηθεί για τη λήψη πληροφοριών ζώνης ώρας με βάση την τρέχουσα ώρα. Η κλήση του gettimeofday με ένα μη μηδενικό όρισμα 'tzp' θα επιστρέψει τα κενά πεδία tz_minuteswest και tz_dsttime στη δομή της ζώνης ώρας. Η ίδια η συνάρτηση gettimeofday έχει καταργηθεί στο POSIX (συνιστάται το clock_gettime αντί για το gettimeofday), αλλά δεν υπάρχουν σχέδια για την κατάργησή της από το glibc.
  • Το settimeofday δεν υποστηρίζει πλέον ταυτόχρονη μετάδοση παραμέτρων για τη ρύθμιση της ώρας και της μετατόπισης διόρθωσης χρόνου. Όταν καλείτε το settimeofday, ένα από τα ορίσματα (time or offset) πρέπει τώρα να οριστεί σε null, διαφορετικά η κλήση συνάρτησης θα αποτύχει με σφάλμα EINVAL. Όπως και το gettimeofday, η συνάρτηση settimeofday καταργείται από το POSIX και συνιστάται να αντικατασταθεί από τη συνάρτηση clock_settime ή την οικογένεια συναρτήσεων adjtime.
  • Η υποστήριξη για την αρχιτεκτονική SPARC ISA v7 έχει διακοπεί (η υποστήριξη v8 διατηρείται προς το παρόν, αλλά μόνο για επεξεργαστές που υποστηρίζουν οδηγίες CAS, όπως επεξεργαστές LEON, όχι επεξεργαστές SuperSPARC).
  • Εάν η σύζευξη αποτύχει στο "τεμπέλης", στην οποία ο σύνδεσμος δεν αναζητά σύμβολα μιας συνάρτησης μέχρι την πρώτη κλήση σε αυτήν τη συνάρτηση, η συνάρτηση dlopen αναγκάζει τώρα τη διαδικασία να τερματιστεί (προηγουμένως επέστρεφε NULL σε περίπτωση αποτυχίας).
  • Για το MIPS hard-float ABI, χρησιμοποιείται πλέον η εκτελέσιμη στοίβα, εκτός εάν η έκδοση περιορίζει ρητά τη χρήση του πυρήνα Linux 4.8+ μέσω της παραμέτρου "-enable-kernel=4.8.0" (με πυρήνες έως 4.8, τα σφάλματα είναι παρατηρήθηκε για ορισμένες διαμορφώσεις MIPS).
  • Οι δεσμεύσεις γύρω από κλήσεις συστήματος που σχετίζονται με χειρισμό χρόνου έχουν μετακινηθεί για να χρησιμοποιηθεί η κλήση συστήματος time64, εάν υπάρχει (σε ​​συστήματα 32 bit, το glibc δοκιμάζει πρώτα νέες κλήσεις συστήματος που χειρίζονται τον τύπο χρόνου 64 bit και, εάν δεν υπάρχουν, πέφτει επιστροφή στις παλιές κλήσεις 32 bit).

Πηγή: opennet.ru

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