Après six mois de développement, la version de la bibliothèque système GNU C Library 2.42 (glibc) a été publiée, répondant entièrement aux exigences des normes ISO C23 et POSIX.1-2024. La création de cette nouvelle version a impliqué 70 développeurs.
Parmi les améliorations apportées dans Glibc 2.42, on peut noter :
- La fonction pthread_create a ajouté la prise en charge des pages de garde légères pour protéger la pile (stack guard page), dont l'accès entraîne une exception et l'arrêt du processus (SIGSEGV). La mise en œuvre repose sur le drapeau MADV_GUARD_INSTALL, introduit dans l'appel système madvise, pris en charge depuis le noyau Linux 6.13. Par rapport au mappage en mode PROT_NONE, les pages de garde permettent de bloquer plus efficacement l'exécution de code en dehors de la zone mémoire allouée, car leur création ne nécessite pas l'allocation d'un nouvel espace de mémoire virtuelle.
- De nouvelles fonctions pour l'exponentiation et le calcul des racines, compoundn, pown et powr, rootn et rsqrt, définies dans la norme ISO C23, ont été ajoutées et reflétées dans le fichier d'en-tête math.h. Des variantes de ces fonctions sont disponibles pour les types float, double, long double, _FloatN et _FloatNx, ainsi que pour le type générique défini dans tgmath.h.
- Sur la plateforme Linux, la fonction pthread_gettid_np a été implémentée, qui, comme la fonction gettid(), renvoie un identifiant unique de thread, mais se distingue par une vérification d'erreurs renforcée (en cas de comportement indéfini, le processus se termine).
- Des fonctions pour calculer les valeurs absolues, fonctionnant avec des types non signés : uabs, ulabs, ullabs et uimaxabs, ont été ajoutées. Ces fonctions figureront dans la future norme C.
- Sur la plateforme Linux, l'interface de programmation termios.h a mis en œuvre la prise en charge de valeurs arbitraires pour la vitesse de transmission. Le type speed_t a été redéfini et correspond désormais au type « unsigned int », comme dans le noyau Linux.
- Dans le cache local pour les threads (tcache), utilisé dans la fonction malloc, a été ajoutée la prise en charge de la mise en cache de grands blocs de mémoire. La taille maximale d'un bloc peut être redéfinie via le paramètre glibc.malloc.tcache_max, pouvant prendre des valeurs jusqu'à 4194304. Le fonctionnement du cache pour les petits blocs a été accéléré.
- Une option « —enable-sframe » a été ajoutée au script de configuration, permettant la prise en charge du format SFrame, utilisé pour représenter les informations de traçage de la pile et pris en charge par la fonction backtrace. Pour utiliser SFrame, il faut au minimum la version binutils 2.45.
- Des versions optimisées des fonctions mathématiques acospif, asinpif, atanpif, atan2pif, cospif, sinpif et tanpif ont été transférées du projet CORE-MATH.
- L'ensemble de tests a été considérablement élargi, couvrant désormais différents cas d'utilisation des familles de fonctions printf et scanf.
- Ajout de code pour détecter les processeurs Intel basés sur l'architecture micro Arrow Lake, Panther Lake, Clearwater Forest et Diamond Rapids.
- Ajout de la prise en charge de la plateforme z17 (nouvelle génération de Mainframes IBM Z/S390).
- Le paramètre glibc.rtld.execstack a été modifié pour ajouter un mode de compatibilité pour les programmes nécessitant une pile exécutable via des bibliothèques chargées dynamiquement.
- Le fichier d'en-tête termio.h et la définition de la structure termio ont été supprimés de sys/ioctl.h. L'interface de programmation termio.h a été déclarée obsolète depuis POSIX.1 (1988) et remplacée par termios.h.
- Pour compiler Glibc, les versions minimales requises sont désormais GCC 12.1 et GNU Binutils 2.39.
- Vulnérabilités corrigées :
- CVE-2025-0395 — débordement de tampon lors de l'exécution de la fonction assert(). Le débordement se produit lorsque le nom du programme (argv[0]) est trop long. Le problème est considéré comme non dangereux, car 4 octets sont écrits au-delà du tampon, et leur contenu ne peut pas être contrôlé par un attaquant. L'existence d'une vulnérabilité dans les fonctions de débogage, résultant d'une erreur lors de l'affichage du nom de l'application en cours, est notable.
- CVE-2025-5702, CVE-2025-5745 — vulnérabilités dans l'implémentation des fonctions strcmp et strncmp pour les processeurs Power10, entraînant un échec lors de la sauvegarde et de la restauration des registres vectoriels v20-v31, qui doivent être conservés entre les appels de fonctions. La vulnérabilité peut être utilisée pour écraser ou déterminer le contenu des données des registres utilisés par d'autres fonctions.
- CVE-2025-8058 — vulnérabilité dans la fonction regcomp, entraînant une double libération de mémoire.
A noter également la publication du jeu d'outils systèmes GNU Binutils 2.45, qui comprend des programmes tels que l'éditeur de liens GNU, l'assembleur GNU, nm, objdump, strings, strip.
Dans la nouvelle version de Binutils :
- Dans l'assembleur GNU :
- Ajout de la prise en charge des dernières extensions pour les architectures RISC-V, LoongArch et AArch64. Pour x86, des instructions XMODX ajoutées, mises en œuvre dans les processeurs Zhaoxin PadLock. Pour RISC-V, ajout de la prise en charge des instructions 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 et xmipslsp v1.0.
- La compatibilité de la génération de données au format SFrame avec la spécification SFrame V2 est assurée. Ajout du support pour la génération d'informations sur la trace de la pile (.sframe) à partir des directives CFI sur les systèmes 64 bits s390 (s390x).
- Ajout du support des directives .errif et .warnif pour l'affichage de messages de diagnostic lorsque certaines conditions sont remplies.
- Dans le lieur, l'option «—stats» a été dotée d'un argument optionnel permettant de spécifier un nom de fichier pour enregistrer les informations sur la consommation des ressources à différentes étapes de l'assemblage. Le nom du fichier peut également être spécifié via la variable d'environnement LD_STATS. Pour les systèmes RISC-V, le lieur a ajouté le support de nouveaux formats PLT (Procedure Linkage Table).
- Diverses améliorations liées au support du format SFrame ont été apportées. Les fonctions de travail avec SFrame ont été déplacées vers la bibliothèque versionnée libsframe.so.2.
- Le désassembleur et l'utilitaire readelf ont élargi leur support pour l'architecture RISC-V.
Source : opennet.ru
