Pubblicazione della libreria di sistema Glibc 2.34

Dopo sei mesi di sviluppo, è stato pubblicato il rilascio della GNU C Library (glibc) 2.34, che risponde pienamente ai requisiti degli standard ISO C11 e POSIX.1-2017. La nuova versione include correzioni da parte di 66 sviluppatori.

Tra i miglioramenti apportati in Glibc 2.34 si possono annoverare:

  • Le librerie libpthread, libdl, libutil e libanl sono state integrate nella libreria principale libc, il che significa che l'uso delle loro funzionalità nelle applicazioni non richiede più il collegamento tramite i flag -lpthread, -ldl, -lutil e -lanl. È stata avviata la preparazione per l'integrazione di libresolv in libc. Questa integrazione permetterà di ottenere un processo di aggiornamento più coerente di glibc e semplificherà l'implementazione del runtime. Per garantire la compatibilità con le applicazioni compilate con versioni precedenti di glibc, sono state fornite librerie stub. A causa dell'aumento del numero di strutture e funzioni disponibili in glibc, potrebbero sorgere problemi nelle applicazioni in cui si verifica un'overlap di nomi con le librerie libpthread, libdl, libutil, libresolv e libanl non precedentemente utilizzate.
  • È stata fornita la possibilità di utilizzare il tipo time_t a 64 bit in configurazioni in cui tradizionalmente si utilizzava il tipo time_t a 32 bit. In tali configurazioni, ad esempio, sui sistemi x86, il time_t a 32 bit rimane di default, ma questo comportamento può essere ora modificato utilizzando il macro «_TIME_BITS». Questa possibilità è disponibile solo su sistemi con kernel Linux della versione 5.1 o successiva.
  • È stata aggiunta la funzione _Fork, che sostituisce la funzione fork, conforme ai requisiti «async-signal-safe», cioè consente un'assegnazione sicura dai gestori di segnali. Durante l'esecuzione di _Fork, viene creato un ambiente minimo, sufficiente per chiamare funzioni nei gestori di segnali, come raise e execve, senza attivare funzionalità che potrebbero cambiare i blocchi o lo stato interno. La chiamata a _Fork sarà definita in una futura versione dello standard POSIX, ma è già inclusa tra le estensioni GNU.
  • Per la piattaforma Linux è stata implementata la funzione execveat, che consente di eseguire un file eseguibile a partire da un descrittore di file aperto. La nuova funzione è utilizzata anche nell'implementazione della chiamata fexecve, che non richiede un filesystem pseudo-montato /proc al momento dell'avvio.
  • È stata aggiunta la funzione timespec_getres, definita nella bozza dello standard ISO C2X, che amplia la funzione timespec_get con capacità simili a quelle della funzione POSIX clock_getres.
  • È stata aggiunta la funzione close_range(), che consente al processo di chiudere simultaneamente un intero intervallo di descrittori di file aperti. La funzione è disponibile sui sistemi con kernel Linux, versione 5.9 o superiore.
  • Sono state aggiunte le funzioni closefrom e posix_spawn_file_actions_addclosefrom_np, che consentono di chiudere simultaneamente tutti i descrittori di file il cui numero è maggiore o uguale al valore specificato.
  • Nei modi «_DYNAMIC_STACK_SIZE_SOURCE» e «_GNU_SOURCE», i valori PTHREAD_STACK_MIN, MINSIGSTKSZ e SIGSTKSZ non sono più costanti, permettendo così il supporto per set di registri di dimensione dinamica, ad esempio quelli forniti dall'estensione ARM SVE.
  • Nel linker è stata implementata l'opzione "--list-diagnostics" per visualizzare informazioni relative alle operazioni di definizione di IFUNC (funzione indiretta) e alla selezione della sottodirectory glibc-hwcaps.
  • È stato implementato il macro __STDC_WANT_IEC_60559_EXT__, progettato per verificare la presenza di funzioni definite nell'applicazione "F" della specifica ISO C2X.
  • Per i sistemi powerpc64* è stata implementata l'opzione "--disable-scv", che consente di compilare glibc senza supporto per l'istruzione scv.
  • Nel file gconv-modules è rimasto solo un insieme minimo di moduli gconv di base, mentre gli altri sono stati spostati in un file aggiuntivo gconv-modules-extra.conf, situato nella directory gconv-modules.d.
  • Per la piattaforma Linux è stato implementato il parametro glibc.pthread.stack_cache_size, che può essere utilizzato per configurare la dimensione della cache dello stack pthread.
  • La funzione inet_neta del file di intestazione è stata dichiarata obsoleta, insieme a diverse funzioni raramente utilizzate da (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, p_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) e (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain). Si raccomanda di utilizzare librerie separate per lavorare con DNS.
  • Le funzioni pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np e pthread_yield sono state dichiarate obsolete e dovrebbero essere sostituite da pthread_mutex_consistent, thread_mutexattr_getrobust, pthread_mutexattr_setrobust e sched_yield.
  • L'uso dei collegamenti simbolici per legare oggetti condivisi installati alla versione di Glibc è stato interrotto. Tali oggetti ora vengono installati come sono (ad esempio, libc.so.6 è ora un file e non un collegamento a libc-2.34.so).
  • Per impostazione predefinita, le funzioni di debug in malloc, come MALLOC_CHECK_ (glibc.malloc.check), mtrace() e mcheck(), sono disabilitate e spostate in una libreria separata libc_malloc_debug.so, in cui sono state inoltre trasferite le funzioni obsolete malloc_get_state e malloc_set_state.
  • In Linux, per il funzionamento di funzioni come shm_open e sem_open, ora è necessario avere il dispositivo /dev/shm.
  • Vulnerabilità risolte:
    • CVE-2021-27645: il crash del processo nscd (daemon di caching del nameserver) dovuto a una doppia chiamata alla funzione free durante l'elaborazione di richieste netgroup appositamente formattate.
    • CVE-2021-33574: accesso a un'area di memoria già liberata (use-after-free) nella funzione mq_notify quando si utilizza il tipo di notifica SIGEV_THREAD con l'attributo thread, per il quale è stata impostata una maschera alternativa di binding alla CPU. Il problema può portare a un crash, ma non si escludono altre modalità di attacco.
    • CVE-2021-35942: un overflow della dimensione del parametro nella funzione wordexp può causare un crash dell'applicazione.

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