Uscita della libreria di sistema Glibc 2.42 e del pacchetto di utilità GNU Binutils 2.45

Dopo sei mesi di sviluppo, è stato pubblicato il rilascio della libreria di sistema GNU C Library 2.42 (glibc), che soddisfa completamente i requisiti degli standard ISO C23 e POSIX.1-2024. Hanno partecipato 70 sviluppatori alla creazione di questa nuova versione.

Tra i miglioramenti implementati in Glibc 2.42, si possono evidenziare:

  • Nella funzione pthread_create è stata aggiunta la supporto per le pagine di guardia leggere per proteggere lo stack (stack guard page), l'accesso alle quali genera un'eccezione e termina il processo in modo anomalo (SIGSEGV). L'implementazione si basa sul flag MADV_GUARD_INSTALL, introdotto nella chiamata di sistema madvise, supportato a partire dal kernel Linux 6.13. Rispetto al mapping in modalità PROT_NONE, le pagine di guardia consentono di bloccare in modo più efficiente l'esecuzione del codice al di fuori dell'area di memoria allocata, poiché la loro creazione non richiede l'allocazione di una nuova area di memoria virtuale.
  • Sono state aggiunte e riflettute nel file di intestazione math.h nuove funzioni per l'elevazione a potenza e il calcolo delle radici compoundn, pown e powr, rootn e rsqrt, definite nello standard ISO C23. Le varianti delle funzioni sono implementate per i tipi float, double, long double, _FloatN e _FloatNx, nonché per il tipo generico di tgmath.h.
  • Sulla piattaforma Linux è stata implementata la funzione pthread_gettid_np, che, come la funzione gettid(), restituisce un identificatore unico per il thread, ma differisce per un controllo degli errori ampliato (in caso di comportamento indefinito, il processo termina).
  • Sono state aggiunte funzioni per calcolare i valori assoluti, funzionanti con tipi senza segno: uabs, ulabs, ullabs e uimaxabs. Queste funzioni faranno parte del futuro standard C.
  • Sulla piattaforma Linux, nell'interfaccia programmativa termios.h, è stata implementata il supporto per valori di velocità di trasmissione arbitrari. Il tipo speed_t è stato ridefinito e ora corrisponde al tipo 'unsigned int', come nel kernel Linux.
  • Nel cache locale per i flussi (tcache), utilizzato nella funzione malloc, è stata aggiunta la supporto per la memorizzazione nella cache di blocchi di memoria di grandi dimensioni. La dimensione massima del blocco può essere sovrascritta mediante l'impostazione glibc.malloc.tcache_max, che può assumere valori fino a 4194304. La performance della cache per blocchi di piccole dimensioni è stata accelerata.
  • È stata aggiunta l'opzione "--enable-sframe" allo script di build configure, che abilita il supporto per il formato SFrame, utilizzato per la rappresentazione delle informazioni sulla traccia dello stack e supportato dalla funzione backtrace. Per utilizzare SFrame è richiesta almeno la versione binutils 2.45.
  • Funzionalità ottimizzate delle funzioni matematiche acospif, asinpif, atanpif, atan2pif, cospif, sinpif e tanpif sono state trasferite dal progetto CORE-MATH.
  • Il set di test è stato notevolmente ampliato e ora copre il funzionamento di diverse varianti delle famiglie di funzioni printf e scanf.
  • È stato aggiunto il codice per l'identificazione dei processori Intel basati sulle microarchitetture Arrow Lake, Panther Lake, Clearwater Forest e Diamond Rapids.
  • È stata aggiunta la supporto per la piattaforma z17 (nuova generazione di mainframe IBM Z/S390).
  • Nella configurazione di glibc.rtld.execstack è stata aggiunta la compatibilità per supportare programmi che richiedono uno stack eseguibile tramite librerie dinamicamente caricate.
  • Il file di intestazione termio.h e la definizione della struttura termio sono stati rimossi da sys/ioctl.h. L'interfaccia di programmazione di termio.h è stata dichiarata obsoleta già in POSIX.1 (1988) ed è stata sostituita da termios.h.
  • Per compilare Glibc ora sono richieste almeno le versioni GCC 12.1 e GNU Binutils 2.39.
  • Vulnerabilità risolte:
    • CVE-2025-0395 — overflow del buffer durante l'esecuzione della funzione assert(). L'overflow si verifica quando viene fornito un nome di programma troppo lungo (argv[0]). Il problema è considerato non pericoloso, poiché vengono scritti 4 byte oltre il buffer, il cui contenuto non può essere controllato dall'attaccante. È interessante notare il fatto che è emersa una vulnerabilità nelle funzioni di debug, derivante da un errore nell'output del nome dell'applicazione corrente.
    • CVE-2025-5702, CVE-2025-5745 — vulnerabilità nell'implementazione delle funzioni strcmp e strncmp per i processori Power10, che causano il fallimento nel salvataggio e nel ripristino dei registri vettoriali v20-v31, che dovrebbero essere mantenuti tra le chiamate delle funzioni. La vulnerabilità può essere sfruttata per sovrascrivere o determinare il contenuto dei dati di questi registri, utilizzati da altre funzioni.
    • CVE-2025-8058 — vulnerabilità nella funzione regcomp, che porta a un doppio rilascio di memoria (double-free).

Si segnala inoltre il rilascio della versione del pacchetto GNU Binutils 2.45, che include programmi come GNU linker, GNU assembler, nm, objdump, strings, strip.

Nella nuova versione di Binutils:

  • In GNU assembler:
    • Aggiunta il supporto per le ultime estensioni delle architetture RISC-V, LoongArch e AArch64. Per x86 è stato aggiunto il supporto alle istruzioni XMODX, implementate nei processori Zhaoxin PadLock. Per RISC-V è stato aggiunto il supporto alle istruzioni ssqosid v1.0, ssnpm v1.0, smnpm v1.0, smmpm v1.0, sspm v1.0, supm v1.0, sha v1.0, zce v1.0, smcdeleg v1.0, ssccfg v1.0, svvptc v1.0, zilsd v1.0, zclsd v1.0, smrnmi v1.0, xtheadvdot v1.0, xmipscbop v1.0, xmipscmov v1.0, xmipsexectl v1.0 e xmipslsp v1.0.
    • È stata garantita la compatibilità della generazione dei dati nel formato SFrame con la specifica SFrame V2. Aggiunta la supporto per la generazione di informazioni sul tracciamento dello stack (.sframe) dalle direttive CFI su sistemi a 64 bit s390 (s390x).
    • Aggiunto supporto per le direttive .errif e .warnif per la visualizzazione dei messaggi diagnostici quando si verifica determinate condizioni.
  • Nel linker, nell'opzione «—stats», è stato implementato il supporto per un argomento opzionale che consente di specificare il nome del file per salvare le informazioni sul consumo delle risorse in diverse fasi del linking. Il nome del file può anche essere specificato tramite la variabile d'ambiente LD_STATS. Per i sistemi RISC-V, il linker ha aggiunto supporto per nuovi formati PLT (Procedure Linkage Table).
  • Sono stati apportati diversi miglioramenti relativi al supporto del formato SFrame. Le funzioni per lavorare con SFrame sono state trasferite nella libreria versionata libsframe.so.2.
  • Nel disassemblatore e nell'utility readelf è stato ampliato il supporto per l'architettura RISC-V.

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