Dopo sei mesi di sviluppo, è stata pubblicata la release della libreria di sistema GNU C Library 2.43 (glibc), che rispetta pienamente i requisiti degli standard ISO C23 e POSIX.1-2024. Hanno partecipato alla creazione di questa nuova versione 69 sviluppatori.
Tra i miglioramenti realizzati in Glibc 2.43 si possono evidenziare:
- È stata aggiunta una funzionalità sperimentale di compilazione con il compilatore Clang, attualmente disponibile solo per le piattaforme aarch64-linux-gnu e x86_64-linux-gnu, utilizzando un runtime compatibile con libgcc. Per la compilazione di Glibc è richiesta almeno la versione 18 di Clang.
- Per i sistemi Linux è stata aggiunta la funzione mseal(), che consente ai processi di impostare un blocco sulle modifiche a determinate parti del proprio spazio di indirizzi.
- Per i sistemi Linux è stata aggiunta la funzione openat2(), che, a differenza della funzione openat(), supporta un insieme di flag aggiuntivi per limitare la risoluzione del percorso del file (vietando la traversata dei punti di montaggio, dei link simbolici, dei link magici (\/proc\/PID\/fd) e dei componenti «..\/»).
- Sono state aggiunte le funzioni free_sized, free_aligned_sized, memset_explicit e memalignment, che sono state introdotte nello standard C23.
- In conformità con lo standard C23, la chiamata a assert è definita come una macro con un numero variabile di argomenti, che supporta espressioni con virgola all'interno dell'inizializzatore.
- In conformità con lo standard C23, le funzioni bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr e wmemchr, che restituiscono puntatori agli array di input, sono state ridefinite come macro che restituiscono puntatori a un tipo con il qualificatore «const», se l'argomento di input è un puntatore a un tipo con il qualificatore «const».
- Nel file di intestazione math.h sono state aggiunte le definizioni dei tipi long_double_t, _Float32_t, _Float64_t e _Float128_t, introdotti nello standard C23.
- Sono stati aggiunti mode opzionali di calcolo del tempo TIME_MONOTONIC (tempo in continua crescita, non soggetto a modifiche dell'orologio di sistema), TIME_ACTIVE e TIME_THREAD_ACTIVE (tempo di esecuzione attiva di un processo o thread) per essere utilizzati nella funzione timespec_get.
- Dal progetto CORE-MATH sono state trasferite versioni ottimizzate delle funzioni matematiche acosh, asinh, atanh, erf, erfc, lgamma e tgamma.
- Sono state aggiunte implementazioni ottimizzate delle funzioni fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) e frexpl (intel96).
- È stata aumentata l'efficienza delle funzioni matematiche acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 e yn/jn, grazie all'eliminazione del codice di gestione degli errori SVID (chiamata della funzione utente matherr in caso di errore) per le nuove versioni (per mantenere la compatibilità con i programmi già compilati, sono rimasti in modalità compat).
- Nei sistemi x86 è stata aggiunta la supporto per i processori Intel Nova Lake e Wildcat Lake.
- Nei sistemi AArch64, la funzione malloc ha ora il supporto per le pagine di memoria grandi (transparent huge pages) di dimensione 2MB attivato per default (il parametro ibc.malloc.hugetlb è ora impostato a 1). Nella funzione clone() è stata implementata la disabilitazione dello stato ZA (Z-Array) per CPU che supportano l'estensione SME (Scalable Matrix Extension).
- Per i sistemi AArch64 che supportano l'estensione BTI (Branch Target Identification), è stata aggiunta la configurazione glibc.cpu.aarch64_bti, che consente di attivare forzatamente il BTI per tutti i file eseguibili e le librerie. Il BTI blocca i salti verso aree di codice arbitrarie per contrastare la creazione di gadget negli exploit che utilizzano tecniche di programmazione orientata al ritorno.
- Nei sistemi AArch64 che supportano una delle estensioni per la protezione del branching (Branch Target Identification o Guarded Control Stack), è consentito l'uso della variabile d'ambiente «LD_DEBUG=security» per visualizzare avvisi dal linker durante il caricamento di file eseguibili e librerie che non supportano queste estensioni.
- Per i sistemi AArch64 sono state aggiunte versioni vettoriali delle funzioni exp2m1, exp10m1, log10p1, log2p1 e rsqrt.
- Per l'architettura RISC-V è stata aggiunta un'implementazione ottimizzata della funzione memset, che utilizza l'estensione RVV (RISC-V Vector).
- Nel set di test è stata ampliata significativamente la verifica della multithread e delle funzioni scanf, strerror e strsignal.
- I dati di codifica, le informazioni sui tipi di caratteri e le tabelle di traslitterazione sono stati aggiornati per supportare la specifica Unicode 17.0.0.
- Nell'implementazione della funzionalità LD_PROFILE è stato interrotto l'uso della directory predefinita (/var/tmp) per la registrazione dei dati di profiling. Ora è necessaria una definizione esplicita della directory per questi dati tramite la variabile d'ambiente LD_PROFILE_OUTPUT.
- Sono state risolte le vulnerabilità:
- CVE-2026-0861 — overflow intero nella funzione memalign, che porta a corruzione dell'heap.
- CVE-2026-0915 — perdita del contenuto dello stack nelle funzioni getnetbyaddr e getnetbyaddr_r.
- CVE-2025-15281 — ritorno di memoria non inizializzata che può contenere dati residui, quando si utilizza la funzione wordexp con i parametri WRDE_REUSE e WRDE_APPEND.
Inoltre, dopo un anno di sviluppo, il progetto Cygwin ha rilasciato una versione della libreria standard C newlib 4.6.0, sviluppata da ingegneri di Red Hat. La libreria è mirata a fornire un'implementazione compatta della libreria standard C (libc), adatta per l'uso in sistemi embedded con una piccola quantità di memoria permanente e RAM. Il codice del progetto è scritto in C e distribuito sotto licenza LGPLv2.
Nella nuova versione di newlib:
- Ampliate le supporto per la specifica POSIX.1-2024.
- Migliorate le prestazioni delle funzioni memcpy, mempcpy e memmove.
- Aggiunta l'opzione «—enable-newlib-hw-misaligned-access».
- Ottimizzata l'architettura RISC-V delle funzioni di tipo mem* e str*.
- Rivisto il codice di gestione delle localizzazioni, eliminando la variabile globale global_locale_string a favore di variabili locali string per ogni oggetto di localizzazione di tipo locale_t.
- Aggiunta la supporto per la nuova piattaforma m68k-atari-elf.
- Dal codice della libreria FreeBSD gdtoa è stato trasferito strtorQ.c, utilizzato per supportare il tipo a 128 bit «long double» nella funzione strtold.
- I dati delle codifiche sono stati aggiornati a Unicode 17.0.
Fonte: opennet.ru
