Sortie des bibliothèques standard C Glibc 2.43 et newlib 4.6.0

Après six mois de développement, la version 2.43 de la bibliothèque système GNU C Library (glibc) a été publiée, respectant entièrement les exigences des normes ISO C23 et POSIX.1-2024. Soixante-neuf développeurs ont contribué à la création de cette nouvelle version.

Parmi les améliorations apportées dans Glibc 2.43, on peut noter :

  • Une possibilité expérimentale de compilation avec le compilateur Clang a été ajoutée, disponible uniquement pour les plateformes aarch64-linux-gnu et x86_64-linux-gnu, en utilisant un runtime compatible avec libgcc. La version minimale de Clang requise pour compiler Glibc est 18.
  • Pour les systèmes Linux, la fonction mseal() a été ajoutée, permettant aux processus de verrouiller certaines parties de leur espace d'adresses contre les modifications.
  • Pour les systèmes Linux, la fonction openat2() a été ajoutée, qui, contrairement à la fonction openat(), prend en charge un ensemble de drapeaux supplémentaires pour restreindre les autorisations de chemin de fichier (interdisant le croisement de points de montage, les liens symboliques, les magic-links (/proc/PID/fd) et les composants « .. »).
  • Les fonctions free_sized, free_aligned_sized, memset_explicit et memalignment, qui apparaissent dans la norme C23, ont été ajoutées.
  • Selon la norme C23, l'appel à assert est défini comme un macro avec un nombre variable d'arguments, prenant en charge les expressions séparées par des virgules à l'intérieur de l'initialiseur.
  • Conformément à la norme C23, les fonctions bsearch, memchr, strchr, strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr et wmemchr, qui retournent des pointeurs sur des tableaux d'entrée, ont été redéfinies comme des macros retournant un pointeur vers un type avec le qualificateur « const », si l'argument d'entrée est un pointeur vers un type avec le qualificateur « const ».
  • Le fichier d'en-tête math.h a été enrichi avec des définitions de types long_double_t, _Float32_t, _Float64_t et _Float128_t, introduits par la norme C23.
  • Des modes facultatifs de calcul du temps TIME_MONOTONIC (temps en constante augmentation, indépendamment des changements d'horloge système), TIME_ACTIVE et TIME_THREAD_ACTIVE (temps d'exécution actif pour un processus ou un thread) ont été ajoutés pour utilisation dans la fonction timespec_get.
  • Des variantes optimisées des fonctions mathématiques acosh, asinh, atanh, erf, erfc, lgamma et tgamma ont été transférées du projet CORE-MATH.
  • Des implémentations optimisées des fonctions fma, fmaf, remainder, remaindef, frexpf, frexp, frexpl (binary128) et frexpl (intel96) ont été ajoutées.
  • Les performances des fonctions mathématiques acosf, acoshf, asinhf, atan2f, atanhf, coshf, fmodf, lgammaf/lgammaf_r, log10f, remainderf, sinhf, sqrtf, tgammaf, y0/j0, y1/j1 et yn/jn ont été améliorées grâce à la suppression du code de gestion des erreurs SVID (appel de la fonction utilisateur matherr en cas d'erreur) pour les nouvelles versions (pour maintenir la compatibilité avec les programmes déjà compilés, elles restent en mode compat).
  • Sur les systèmes x86, le support des processeurs Intel Nova Lake et Wildcat Lake a été ajouté.
  • Sur les systèmes AArch64, la fonction malloc active par défaut le support des grandes pages de mémoire (transparent huge pages) de 2 Mo (le paramètre ibc.malloc.hugetlb est désormais défini sur 1). Dans la fonction clone(), la désactivation de l'état ZA (Z-Array) a été mise en œuvre pour les CPU supportant l'extension SME (Scalable Matrix Extension).
  • Pour les systèmes AArch64 prenant en charge l'extension BTI (Branch Target Identification), un paramètre glibc.cpu.aarch64_bti a été ajouté, permettant d'activer de force le BTI pour tous les fichiers exécutables et bibliothèques. Le BTI bloque les transitions vers des zones de code arbitraires pour contrer la création de gadgets dans les exploitations utilisant des techniques de programmation orientée retour.
  • Sur les systèmes AArch64, prenant en charge l'une des extensions pour la protection des branches (Branch Target Identification ou Guarded Control Stack), l'utilisation de la variable d'environnement 'LD_DEBUG=security' est autorisée pour afficher les avertissements du linker lors du chargement des fichiers exécutables et des bibliothèques qui ne prennent pas en charge ces extensions.
  • Pour les systèmes AArch64, des variantes vectorielles des fonctions exp2m1, exp10m1, log10p1, log2p1 et rsqrt ont été ajoutées.
  • Pour l'architecture RISC-V, une implémentation optimisée de la fonction memset utilisant l'extension RVV (RISC-V Vector) a été ajoutée.
  • Le kit de tests a considérablement élargi la vérification de la multithreading et des fonctions scanf, strerror et strsignal.
  • Les données des encodages, les informations sur les types de caractères et les tables de translitération ont été mises à jour pour prendre en charge la spécification Unicode 17.0.0.
  • Dans la mise en œuvre de la fonctionnalité LD_PROFILE, l'utilisation du répertoire par défaut (/var/tmp) pour l'enregistrement des données de profilage a été supprimée. Maintenant, une définition explicite d'un répertoire pour ces données doit être fournie via la variable d'environnement LD_PROFILE_OUTPUT.
  • Vulnérabilités corrigées :
    • CVE-2026-0861 — débordement entier dans la fonction memalign, conduisant à la corruption de la mémoire dynamique.
    • CVE-2026-0915 — fuite de contenu de la pile dans les fonctions getnetbyaddr et getnetbyaddr_r.
    • CVE-2025-15281 — retour de mémoire non initialisée, qui peut contenir des données résiduelles, lors de l'utilisation de la fonction wordexp avec les paramètres WRDE_REUSE et WRDE_APPEND.

De plus, après un an de développement, le projet Cygwin a publié une version de la bibliothèque standard C newlib 4.6.0, développée par des ingénieurs de Red Hat. La bibliothèque vise à fournir une implémentation compacte de la bibliothèque standard C (libc), adaptée à une utilisation sur des systèmes embarqués avec peu de stockage permanent et de mémoire vive. Le code du projet est écrit en langage C et distribué sous la licence LGPLv2.

Dans la nouvelle version de newlib :

  • Le support de la spécification POSIX.1-2024 a été étendu.
  • Les performances des fonctions memcpy, mempcpy et memmove ont été améliorées.
  • Ajout de l'option « —enable-newlib-hw-misaligned-access ».
  • Optimisation des fonctions mem* et str* pour l'architecture RISC-V.
  • Le code de traitement des locales a été refondu, supprimant la variable globale global_locale_string au profit de variables individuelles locale_string pour chaque objet de locale de type locale_t.
  • Ajout du support de la nouvelle plateforme m68k-atari-elf.
  • Le code strtorQ.c de la bibliothèque gdtoa de FreeBSD a été porté, utilisé pour implémenter le support du type 128 bits « long double » dans la fonction strtold.
  • Les données d'encodage ont été mises à jour vers Unicode 17.0.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster