Rilascio della libreria di sistema Glibc 2.35

Dopo sei mesi di sviluppo è stata rilasciata la libreria di sistema GNU C Library (glibc) 2.35, che è pienamente conforme ai requisiti degli standard ISO C11 e POSIX.1-2017. La nuova versione include correzioni di 66 sviluppatori.

Alcuni dei miglioramenti implementati in Glibc 2.35 includono:

  • Aggiunto il supporto per la locale "C.UTF-8", che include regole di confronto per tutti i codici Unicode, ma per risparmiare spazio è limitato all'uso di intervalli ASCII nelle funzioni fnmatch, regexec e regcomp. La localizzazione è di circa 400 KB, di cui 346 KB sono dati LC_CTYPE per Unicode, e richiede un'installazione separata (non incorporata in Glibc).
  • I dati di codifica, le informazioni sul tipo di carattere e le tabelle di traslitterazione sono stati aggiornati per supportare la specifica Unicode 14.0.0.
  • IN E sono implementate funzioni e macro che arrotondano il risultato a un tipo più ristretto: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN e fMxfmafNx. Le funzioni sono descritte nelle specifiche TS 18661-1:2014, TS 18661-3:2015 e aggiunte alla bozza del futuro standard ISO C2X C.
  • IN E implementate funzioni e macro per trovare il minimo e il massimo dei numeri in virgola mobile con i tipi float, long double, _FloatN e _FloatNx, descritti nella specifica IEEE 754-2019 e aggiunti alla bozza del futuro standard ISO C2X C: fmaximum, fmaximum_num , fmassima_mag, fmassima_mag_num, fminima, fminima_num, fminima_mag, fminima_mag_num.
  • IN aggiunte costanti per numeri in virgola mobile a precisione singola: M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f e M_SQRT1_2f.
  • Per le funzioni exp10 nel file di intestazione Aggiunte macro corrispondenti che non sono legate a tipi specifici.
  • IN aggiunta la macro _PRINTF_NAN_LEN_MAX proposta nella bozza dello standard ISO C2X.
  • Aggiunti gli identificatori di formato "%b" e "%B" alla famiglia di funzioni printf per stampare numeri interi nella rappresentazione binaria.
  • Il sistema di collegamento dinamico implementa un nuovo algoritmo di ordinamento, DSO, che utilizza la ricerca in profondità (DFS) per risolvere i problemi di prestazioni con le dipendenze in loop. Per selezionare l'algoritmo di ordinamento DSO viene proposto il parametro glibc.rtld.dynamic_sort, che può essere impostato a “1” per ripristinare il vecchio algoritmo.
  • L'ABI ha aggiunto il supporto per una nuova funzione '__memcmpeq', utilizzata dai compilatori per ottimizzare l'uso di 'memcmp' se il valore restituito da questa funzione viene utilizzato solo per verificare lo stato di completamento di un'operazione.
  • Aggiunto il supporto per la registrazione automatica dei thread utilizzando la chiamata di sistema rseq (sequenze riavviabili) fornita a partire dal kernel Linux 4.18. La chiamata di sistema rseq consente di organizzare l'esecuzione continua di un gruppo di istruzioni che non viene interrotta e conferma il risultato con l'ultima istruzione del gruppo. Essenzialmente, fornisce un mezzo per l'esecuzione atomica molto rapida di operazioni che, se interrotte da un altro thread, vengono ripulite e tentate nuovamente.
  • Aggiunto collegamento simbolico /usr/bin/ld.so.
  • Viene fornito l'assemblaggio predefinito di tutti i file eseguibili dei programmi incorporati e il set di test in modalità PIE (eseguibile indipendente dalla posizione). Per disabilitare questo comportamento, viene fornita l'opzione "--disable-default-pie".
  • Per Linux, è stata aggiunta un'impostazione glibc.malloc.hugetlb per consentire all'implementazione malloc di essere cambiata per utilizzare la chiamata di sistema madvise con il flag MADV_HUGEPAGE per mmap e sbrk o per utilizzare direttamente pagine di memoria di grandi dimensioni specificando il flag MAP_HUGETLB in mmap chiamate. Nel primo caso, è possibile ottenere miglioramenti in termini di prestazioni se le pagine enormi trasparenti vengono utilizzate in modalità madvise e, nel secondo caso, viene fornita la possibilità di utilizzare pagine enormi riservate dal sistema.
  • Aggiunta la funzione _dl_find_object che può essere utilizzata per aggiungere informazioni sullo svolgimento dello stack di chiamate.
  • Aggiunto il supporto per l'architettura OpenRISC (or1k-linux-gnu) in modalità soft-float. Il port richiede binutils 2.35, GCC 11 e Linux kernel 5.4.
  • Aggiunto un flag di compilazione "--with-rtld-early-cflags", che può essere utilizzato per specificare ulteriori flag di compilazione utilizzati durante la creazione del codice iniziale per il collegamento dinamico.
  • Per la piattaforma Linux è stata aggiunta la funzione epoll_pwait2 che differisce da epoll_wait specificando un timeout con precisione al nanosecondo.
  • Aggiunta la funzione posix_spawn_file_actions_addtcsetpgrp_np per eliminare le condizioni di competizione quando si imposta un terminale di controllo per un nuovo processo.
  • Per le applicazioni compilate con Glibc e GCC 12+, è implementata la modalità di protezione “_FORTIFY_SOURCE=3”, che rileva possibili overflow del buffer durante l'esecuzione delle funzioni stringa definite nel file header string.h. La differenza rispetto alla modalità “_FORTIFY_SOURCE=2” si riduce a controlli aggiuntivi, che possono potenzialmente portare a una riduzione delle prestazioni.
  • Il supporto per Intel MPX (Memory Protection Extensions), utilizzato per controllare i puntatori per i limiti di memoria, è stato interrotto (questa tecnologia non si è diffusa ed è già stata rimossa da GCC e LLVM).
  • Il meccanismo di prelink e le variabili di ambiente associate LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS sono stati deprecati e verranno rimossi in una versione futura.

    Vulnerabilità risolte:

    • CVE-2022-23218, CVE-2022-23219 – Overflow del buffer nelle funzioni svcunix_create e clnt_create, causato dalla copia del contenuto del parametro filename nello stack senza controllare la dimensione dei dati copiati. Per le applicazioni realizzate senza protezione dello stack e che utilizzano il protocollo “unix”, la vulnerabilità può portare all'esecuzione di codice malintenzionato durante l'elaborazione di nomi di file molto lunghi.
    • CVE-2021-3998 è una vulnerabilità nella funzione realpath() dovuta alla restituzione, in determinate condizioni, di un valore errato contenente dati residui non ripuliti dallo stack. Per il programma SUID-root fusermount, la vulnerabilità può essere utilizzata per ottenere informazioni sensibili dalla memoria del processo, ad esempio, per ottenere informazioni sui puntatori.
    • CVE-2021-3999 - Overflow del buffer a byte singolo nella funzione getcwd(). Il problema è causato da un bug presente dal 1995. Per causare un overflow, chiama semplicemente chdir() nella directory "/" in uno spazio dei nomi del punto di montaggio separato.

    Fonte: opennet.ru

Aggiungi un commento