Pubblicazione della libreria di sistema Glibc 2.41

Dopo sei mesi di sviluppo, è stata rilasciata la libreria di sistema GNU C Library (glibc) 2.41, che segue completamente i requisiti degli standard ISO C11 e POSIX.1-2017. Hanno partecipato 79 sviluppatori alla creazione di questa nuova versione.

Tra i miglioramenti implementati in Glibc 2.41 si possono notare:

  • Per la piattaforma Linux sono state aggiunte le nuove funzioni sched_setattr e sched_getattr, che permettono di impostare e leggere i parametri dello scheduler. In pratica, queste funzioni consentono di configurare le politiche di pianificazione delle richieste, come SCHED_DEADLINE, che utilizzano parametri aggiuntivi oltre alla priorità.
  • L'utilità iconv ha ricevuto supporto per la conversione della codifica in loco (se i nomi dei file di input e output coincidono, iconv crea automaticamente un file temporaneo e, al termine della conversione, sostituisce il file originale con quello temporaneo).
  • Nel file di intestazione math.h sono state aggiunte funzioni trigonometriche introdotte nello standard C23 (TS 18661-4:2015): acospi, asinpi, atan2pi, atanpi, cospi, sinpi e tanpi.
  • Dal progetto CORE-MATH sono state trasferite varianti ottimizzate delle funzioni, con un arrotondamento corretto: exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf e tanhf.
  • È stato aggiunto il supporto per l'estensione ARM64 GCS (Guarded Control Stack) per la protezione hardware degli indirizzi di ritorno dalle funzioni e per bloccare exploit che utilizzano tecniche di programmazione orientata al ritorno (ROP – Return-Oriented Programming, l'exploit è composto da pezzi già esistenti di istruzioni di macchina che terminano con un'istruzione di ritorno). ARM64 GCS permette l'uso di una tecnica di shadow stack per proteggere i processi nello spazio utente: dopo aver passato il controllo a una funzione, gli indirizzi di ritorno vengono salvati dal processore non solo nello stack normale, ma anche in un shadow stack separato, che non può essere modificato direttamente. Prima di uscire dalla funzione, l'indirizzo di ritorno viene estratto dallo shadow stack e confrontato con l'indirizzo di ritorno nello stack principale. Per compilare Glibc con supporto GCS è richiesto almeno binutils 2.44 e GCC 15.
  • È stato svolto un ampio lavoro per migliorare la generazione del codice e aumentare le prestazioni delle funzioni matematiche per l'architettura ARM64/AArch64. Sono state implementate ottimizzazioni utilizzando istruzioni vettoriali (SVE, Scalable Vector Extension) e estensioni SIMD (Neon).
  • Per i sistemi con processori ARM64/AArch64 è stato aggiunto il supporto per il meccanismo Memory Protection Keys, utilizzato per limitare l'accesso alle pagine di memoria senza modificare la tabella delle pagine.
  • Per i sistemi con processori PowerPC64 è stato aggiunto il supporto per istruzioni avanzate per proteggere contro l'uso di tecniche di programmazione orientata al ritorno negli exploit.
  • È stato aggiunto un nuovo tipo di architettura arch_kind_hygon per i processori cinesi x86-64 Hygon, basati su tecnologie AMD.
  • È stato notevolmente ampliato il set di test per glibc, il numero dei test è aumentato da 5408 a 6232 rispetto alla versione precedente.
  • È stata aggiunta la possibilità di testare la compilazione di glibc utilizzando compilatori C e C++ diversi da quelli utilizzati per la compilazione effettiva. Ad esempio, 'configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"' e 'configure TEST_CC="clang" TEST_CXX="clang++"'.
  • Nelle opzioni indicate nel file /etc/resolv.conf e nella variabile d'ambiente RES_OPTIONS, è stata implementata la possibilità di utilizzare il prefisso "-" per annullare precedenti opzioni impostate con quel nome. Ad esempio, se nel file /etc/resolv.conf è presente "options no-aaaa", avviando un processo con la variabile d'ambiente "RES_OPTIONS=-no-aaaa" verrà annullato il divieto di invio di richieste DNS per ottenere record AAAA.
  • Nel risolutore DNS è stata aggiunta la supporto per l'opzione "strict-error", per cui la funzione getaddrinfo(), a meno che non sia specificato esplicitamente il tipo di indirizzi (AF_UNSPEC), tenterà di ottenere i valori dai record A (IPv4) e AAAA (IPv6) da un altro server DNS se la richiesta per il record A o AAAA al primo server DNS è fallita. Senza l'opzione "strict-error", in una situazione simile, verrà restituito solo l'indirizzo ottenuto in seguito a una richiesta elaborata con successo, ignorando il valore della richiesta non riuscita. Ad esempio, se un server ha restituito un record "A" ma ha restituito un errore nella richiesta "AAAA", getaddrinfo senza l'opzione "strict-error" restituirà immediatamente solo l'indirizzo IPv4, mentre con l'opzione "strict-error" tenterà nuovamente di inviare richieste a un altro server DNS.
  • I dati sulle codifiche, l'informazione sui tipi di caratteri e le tabelle di traslitterazione sono stati aggiornati per supportare la specifica Unicode 16.0.0.
  • È stato aggiunto il macro "_ISOC2Y_SOURCE", che consente di attivare le funzionalità definite nella bozza dello standard C2Y. Queste funzionalità possono essere attivate anche tramite il macro _GNU_SOURCE e i flag del compilatore ("gcc -std=gnu2y").
  • È stato implementato lo strumento benchtest per monitorare le prestazioni di diverse funzioni (di solito matematiche).
  • È stata aggiunta l'impostazione glibc.rtld.execstack, che consente di disabilitare esplicitamente l'uso dello stack eseguibile.
  • È stato aggiunto il supporto per l'ABI estensibile rseq (sequences riavviabili), che fornisce un meccanismo per l'esecuzione atomica rapida delle operazioni (in caso di interruzione da parte di un altro thread, lo stato viene ripristinato e viene tentato nuovamente l'esecuzione). Nella nuova versione è possibile utilizzare in rseq funzionalità avanzate non presenti nell'ABI originale, come gli identificatori di esecuzione parallela (mm_cid, memory-map concurrency ID) e gli identificatori del nodo NUMA (node_id).
  • È stato interrotto il supporto per il porto per i sistemi big-endian ARC (arceb-linux-gnu).
  • È stata risolta una vulnerabilità (CVE-2025-039) che porta a un overflow del buffer durante l'esecuzione della funzione assert(). L'overflow si verifica quando viene specificato un nome di programma troppo lungo (argv[0]). Il problema è considerato non pericoloso, in quanto oltre il buffer vengono scritti 4 byte, il cui contenuto non può essere controllato dall'attaccante. È interessante notare che si è manifestata una vulnerabilità nelle funzioni di debug dovuta a un errore nell'output del nome dell'applicazione corrente.

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