Versione della libreria di sistema Glibc 2.35

Dopo sei mesi di sviluppo è stato rilasciato il sistema della libreria GNU C Library (glibc) 2.35, che soddisfa completamente i requisiti degli standard ISO C11 e POSIX.1-2017. La nuova versione include correzioni da parte di 66 sviluppatori.

Tra i miglioramenti realizzati in Glibc 2.35 si possono evidenziare:

  • È stata aggiunta la supporto per la locale «C.UTF-8», che include le regole di ordinamento per tutti i codici Unicode, ma con l'uso limitato dei range ASCII nelle funzioni fnmatch, regexec e regcomp, per risparmiare spazio. La locale occupa circa 400 KB, di cui 346 KB sono dati LC_CTYPE per Unicode, e richiede un'installazione separata (non è integrata in Glibc).
  • I dati di codifica, le informazioni sui tipi di caratteri e le tabelle di traslitterazione sono stati aggiornati per supportare la specifica Unicode 14.0.0.
  • In e sono state implementate funzioni e macro che arrotondano il risultato a un tipo più ristretto: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN e fMfmafNx. Le funzioni sono descritte nelle specifiche TS 18661-1:2014, TS 18661-3:2015 e sono state aggiunte alla bozza del futuro standard C ISO C2X.
  • In e sono state implementate funzioni e macro per trovare il minimo e il massimo dei numeri a virgola mobile con tipi float, long double, _FloatN e _FloatNx, descritte nella specifica IEEE 754-2019 e aggiunte alla bozza del futuro standard C ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • In sono state aggiunte costanti per i numeri a virgola mobile di 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 la funzione exp10 nel file di intestazione sono state aggiunte le corrispondenti macro, non legate a tipi specifici.
  • In è stata aggiunta la macro _PRINTF_NAN_LEN_MAX, proposta nella bozza dello standard ISO C2X.
  • Nella famiglia di funzioni printf sono stati aggiunti i specificatori di formato «%b» e «%B» per l'output di numeri interi in rappresentazione binaria.
  • È stato implementato un nuovo algoritmo di ordinamento DSO nel sistema di collegamento dinamico, che utilizza il metodo di ricerca in profondità (DFS) per risolvere i problemi di prestazioni nella gestione di dipendenze circolari. È stato proposto il parametro glibc.rtld.dynamic_sort per la scelta dell'algoritmo di ordinamento DSO, al quale può essere assegnato il valore «1» per tornare al vecchio algoritmo.
  • In ABI è stata aggiunta la supporto per la nuova funzione ‘__memcmpeq’, utilizzata dai compilatori per ottimizzare l'uso di ‘memcmp’, nel caso in cui il valore restituito da questa funzione venga utilizzato solo per controllare lo stato di completamento dell'operazione.
  • Aggiunta la 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 ininterrotta di un gruppo di istruzioni, non interrotta e confermante il risultato dell'ultima istruzione nel gruppo. In sostanza, viene fornito un mezzo per eseguire in modo atomico operazioni molto rapide, che in caso di interruzione da un altro thread vengono annullate e si tenta nuovamente l'esecuzione.
  • Aggiunta la link simbolica /usr/bin/ld.so.
  • Assicurata la build predefinita di tutti i file eseguibili dei programmi integrati e del set di test in modalità PIE (eseguibile indipendente dalla posizione). Per disabilitare questo comportamento è prevista un'opzione «—disable-default-pie».
  • Per Linux è stata aggiunta l'impostazione glibc.malloc.hugetlb, che consente di passare l'implementazione di malloc per utilizzare la chiamata di sistema madvise con il flag MADV_HUGEPAGE per mmap e sbrk o direttamente utilizzare grandi pagine di memoria specificando il flag MAP_HUGETLB nelle chiamate mmap. Nel primo caso si può ottenere un aumento delle prestazioni se le Transparent Huge Pages sono utilizzate in modalità madvise, mentre nel secondo viene fornita la possibilità di utilizzare le grandi pagine riservate dal sistema (Huge Pages).
  • Aggiunta la funzione _dl_find_object, che può essere utilizzata per aggiungere informazioni sullo sfruttamento dello stack delle chiamate (unwind).
  • Aggiunta la supporto per l'architettura OpenRISC (or1k-linux-gnu) in modalità di elaborazione software delle operazioni in virgola mobile (soft-float). Per il funzionamento della porta è richiesto binutils 2.35, GCC 11, e il kernel Linux 5.4.
  • Aggiunto il flag di build «—with-rtld-early-cflags», mediante il quale è possibile specificare flag di compilazione aggiuntivi utilizzati durante la build del codice iniziale per il collegamento dinamico.
  • Per la piattaforma Linux è stata aggiunta la funzione epoll_pwait2, che si distingue da epoll_wait per la specifica di timeout con precisione nanosecondale.
  • Aggiunta la funzione posix_spawn_file_actions_addtcsetpgrp_np, che esclude le condizioni di gara durante l'impostazione del terminale di controllo per un nuovo processo.
  • Per le applicazioni compilate con Glibc e GCC 12+, è stata implementata la modalità di protezione «_FORTIFY_SOURCE=3», che rileva possibili overflow di buffer durante l'esecuzione delle funzioni di stringa definite nel file di intestazione string.h. La differenza rispetto alla modalità «_FORTIFY_SOURCE=2» consiste in controlli aggiuntivi che possono potenzialmente ridurre le prestazioni.
  • È stata interrotta la supporto per le estensioni Intel MPX (Memory Protection Extensions), utilizzate per controllare i puntatori in conformità ai limiti delle aree di memoria (la tecnologia indicata non ha avuto diffusione ed è stata già rimossa da GCC e LLVM).
  • Il meccanismo prelink e le variabili di ambiente correlate LD_TRACE_PRELINKING e LD_USE_LOAD_BIAS sono state dichiarate obsolete e saranno rimosse nella prossima versione.

    Sono state risolte le vulnerabilità:

    • CVE-2022-23218, CVE-2022-23219 — overflow di buffer nelle funzioni svcunix_create e clnt_create, causato dalla copia nel stack del contenuto di un parametro con il nome del file senza controllare la dimensione dei dati copiati. Per le applicazioni compilate senza protezione dello stack e che utilizzano il protocollo «unix», la vulnerabilità può consentire l'esecuzione di codice da parte di un malintenzionato durante l'elaborazione di nomi di file molto lunghi.
    • CVE-2021-3998 — vulnerabilità nella funzione realpath(), causata dal ritorno di un valore non corretto, contenente dati residui non puliti dallo stack, in determinate condizioni. Per il programma SUID-root fusermount, la vulnerabilità può essere sfruttata per ottenere informazioni riservate dalla memoria del processo, ad esempio, per ottenere informazioni sui puntatori.
    • CVE-2021-3999 — overflow di buffer a byte singolo nella funzione getcwd(). Il problema è dovuto a un errore presente dal 1995. Per provocare un overflow è sufficiente eseguire una chiamata a chdir() per la directory «/» in uno spazio di nomi dei punti di montaggio separato.

    Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster