Après six mois de développement, la version 2.41 de la bibliothèque système GNU C Library (glibc) a été publiée, respectant pleinement les exigences des normes ISO C11 et POSIX.1-2017. 79 développeurs ont participé à la création de cette nouvelle version.
Parmi les améliorations réalisées dans Glibc 2.41, on peut noter :
- Pour la plateforme Linux, de nouvelles fonctions sched_setattr et sched_getattr ont été ajoutées, permettant de définir / lire les paramètres du planificateur de tâches. Dans la pratique, ces fonctions permettent de configurer des politiques de planification des requêtes, telles que SCHED_DEADLINE, qui utilisent des paramètres supplémentaires en plus de la priorité.
- L'utilitaire iconv a ajouté le support de la conversion de codage sur place (si les noms des fichiers d'entrée et de sortie correspondent, iconv crée désormais automatiquement un fichier temporaire et remplace le fichier d'origine par celui-ci une fois la conversion terminée).
- Le fichier d'en-tête math.h a été enrichi de fonctions trigonométriques apparues dans la norme C23 (TS 18661-4:2015) : acospi, asinpi, atan2pi, atanpi, cospi, sinpi et tanpi.
- Des variantes optimisées et utilisant un arrondi correct des fonctions exp10m1f, exp2m1f, expm1f, log10f, log2p1f, log1pf, log10p1f, cbrtf, erff, erfcf, lgammaf, tgammaf, tanf, acosf, acoshf, asinf, asinhf, atanf, atan2f, atanhf, coshf, sinhf et tanhf ont été transférées du projet CORE-MATH.
- Prise en charge de l'extension ARM64 GCS (Guarded Control Stack) pour la protection matérielle des adresses de retour des fonctions et le blocage des exploits utilisant des techniques de programmation orientée retour (ROP - Return-Oriented Programming, où l'exploit est formé à partir de morceaux d'instructions machine existants, se terminant par une instruction de retour). ARM64 GCS permet d'utiliser une technique de pile fantôme pour protéger les processus dans l'espace utilisateur - après le transfert au sein d'une fonction, les adresses de retour sont conservées par le processeur non seulement dans la pile normale, mais aussi dans une pile fantôme qui ne peut pas être modifiée directement. Avant de quitter la fonction, l'adresse de retour est extraite de la pile fantôme et vérifiée par rapport à l'adresse de retour de la pile principale. Pour compiler Glibc avec le support de GCS, au minimum les versions binutils 2.44 et GCC 15 sont nécessaires.
- Un travail considérable a été réalisé pour améliorer la génération de code et optimiser les performances des fonctions mathématiques pour l'architecture ARM64/AArch64. Des optimisations ont été mises en œuvre en utilisant des instructions vectorielles (SVE, Scalable Vector Extension) et des extensions SIMD (Neon).
- Pour les systèmes avec des processeurs ARM64/AArch64, un support pour le mécanisme Memory Protection Keys a été ajouté, permettant de restreindre l'accès aux pages mémoire sans modifier la table des pages mémoire.
- Pour les systèmes avec des processeurs PowerPC64, un support pour des instructions étendues a été ajouté pour prévenir l'utilisation de la programmation orientée retour dans les exploits.
- Un nouveau type d'architecture arch_kind_hygon a été ajouté pour les processeurs chinois x86-64 Hygon, basés sur des technologies AMD.
- L'ensemble de tests pour glibc a été considérablement élargi, avec le nombre de tests passant de 5408 à 6232 par rapport à la version précédente.
- Ajout de la possibilité de tester la construction de glibc avec des compilateurs C et C++ différents de ceux utilisés pour la construction réelle. Par exemple, ‘configure TEST_CC="gcc-6.4.1" TEST_CXX="g++-6.4.1"‘ et ‘configure TEST_CC="clang" TEST_CXX="clang++"‘.
- Dans les options spécifiées dans le fichier /etc/resolv.conf et dans la variable d'environnement RES_OPTIONS, il est désormais possible d'utiliser le préfixe «-» pour désactiver une option précédemment définie avec ce nom. Par exemple, si le fichier /etc/resolv.conf contient «options no-aaaa», le lancement d'un processus avec la variable d'environnement «RES_OPTIONS=-no-aaaa» annulera l'interdiction d'envoyer des requêtes DNS pour obtenir un enregistrement AAAA.
- Le résolveur DNS a ajouté le support de l'option «strict-error», où la fonction getaddrinfo(), si le type d'adresses (AF_UNSPEC) n'est pas spécifié explicitement, tentera d'obtenir des valeurs des enregistrements A (IPv4) et AAAA (IPv6) à partir d'un autre serveur DNS, si une requête pour un enregistrement A ou AAAA au premier serveur DNS a échoué. Sans l'option «strict-error», dans une telle situation, l'adresse retournée sera celle obtenue par une requête réussie, tandis que la valeur de la requête échouée sera ignorée. Par exemple, si serveur un enregistrement «A» a été retourné, mais a échoué lors de la requête «AAAA», getaddrinfo sans l'option «strict-error» renverra immédiatement uniquement l'adresse IPv4, tandis qu'avec l'option «strict-error», il tentera de répéter les requêtes à un autre serveur DNS.
- Les données d'encodage, les informations sur les types de caractères et les tables de translittération ont été mises à jour pour prendre en charge la spécification Unicode 16.0.0.
- Ajout d'un macro « _ISOC2Y_SOURCE », permettant d'activer les fonctionnalités définies dans l'ébauche de la norme C2Y. De telles fonctionnalités peuvent également être activées à l'aide du macro _GNU_SOURCE et via des options du compilateur (« gcc -std=gnu2y »).
- Mise en œuvre de l'outil benchtest pour suivre les performances de diverses fonctions (principalement mathématiques).
- Ajout d'un paramètre glibc.rtld.execstack, permettant d'interdire explicitement l'utilisation de la pile exécutable.
- Ajout du support de l'ABI extensible rseq (restartable sequences), fournissant un mécanisme pour l'exécution atomique rapide des opérations (en cas d'interruption de l'opération par un autre fil, l'état est réinitialisé et une nouvelle tentative d'exécution est faite). La nouvelle version permet l'utilisation dans rseq de fonctionnalités avancées, absentes de l'ABI d'origine, telles que les identifiants d'exécution parallèle (mm_cid, memory-map concurrency ID) et les identifiants de nœud NUMA (node_id).
- Fin du support pour le port des systèmes big-endian ARC (arceb-linux-gnu).
- Correction d'une vulnérabilité (CVE-2025-039) entraînant un débordement de tampon lors de l'exécution de la fonction assert(). Le débordement se produit lors de la spécification d'un nom de programme trop long (argv[0]). Le problème est considéré comme non dangereux, car seuls 4 octets sont écrits en dehors du tampon, dont le contenu ne peut pas être contrôlé par un attaquant. Cependant, le fait qu'une vulnérabilité relativement typique apparaisse dans les fonctions de débogage en raison d'une erreur lors de l'affichage du nom de l'application actuelle est intéressant.
Source : opennet.ru
