Version de la bibliothèque système Glibc 2.35

Après six mois de développement, la bibliothèque système GNU C Library (glibc) 2.35 a été publiée, qui est entièrement conforme aux exigences des normes ISO C11 et POSIX.1-2017. La nouvelle version comprend des correctifs de 66 développeurs.

Certaines des améliorations implémentées dans la Glibc 2.35 incluent :

  • Ajout de la prise en charge de la locale "C.UTF-8", qui inclut des règles de classement pour tous les codes Unicode, mais pour économiser de l'espace, elle est limitée à l'utilisation de plages ASCII dans les fonctions fnmatch, regexec et regcomp. Les paramètres régionaux font environ 400 Ko, dont 346 Ko sont des données LC_CTYPE pour Unicode, et nécessitent une installation séparée (non intégrée à la Glibc).
  • 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 14.0.0.
  • DANS Et des fonctions et des macros sont implémentées pour arrondir le résultat à un type plus étroit : fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN et fMxfmafNx. Les fonctions sont décrites dans les spécifications TS 18661-1:2014, TS 18661-3:2015 et ajoutées au projet de future norme ISO C2X C.
  • DANS Et implémenté des fonctions et des macros pour trouver le minimum et le maximum de nombres à virgule flottante avec les types float, long double, _FloatN et _FloatNx, décrits dans la spécification IEEE 754-2019 et ajoutés au projet de la future norme ISO C2X C : fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • DANS ajout de constantes pour les nombres à virgule flottante simple précision : M_Ef, M_LOG2Ef, M_LOG10Ef, M_LN2f, M_LN10f, M_PIf, M_PI_2f, M_PI_4f, M_1_PIf, M_2_PIf, M_2_SQRTPIf, M_SQRT2f et M_SQRT1_2f.
  • Pour les fonctions exp10 dans le fichier d'en-tête Ajout de macros correspondantes qui ne sont pas liées à des types spécifiques.
  • DANS ajout de la macro _PRINTF_NAN_LEN_MAX proposée dans le projet de norme ISO C2X.
  • Ajout des spécificateurs de format "%b" et "%B" à la famille de fonctions printf pour imprimer des entiers en représentation binaire.
  • Le système de liaison dynamique implémente un nouvel algorithme de tri DSO qui utilise la recherche en profondeur d'abord (DFS) pour résoudre les problèmes de performances lors de la gestion des dépendances en boucle. Pour sélectionner l'algorithme de tri DSO, le paramètre glibc.rtld.dynamic_sort est proposé, qui peut être défini sur « 1 » pour revenir à l'ancien algorithme.
  • L'ABI a ajouté la prise en charge d'une nouvelle fonction '__memcmpeq', utilisée par les compilateurs pour optimiser l'utilisation de 'memcmp' si la valeur renvoyée par cette fonction est utilisée uniquement pour vérifier l'état d'achèvement d'une opération.
  • Ajout de la prise en charge de l'enregistrement automatique des threads à l'aide de l'appel système rseq (séquences redémarrables) fourni depuis le noyau Linux 4.18. L'appel système rseq permet d'organiser l'exécution continue d'un groupe d'instructions sans interruption et confirme le résultat par la dernière instruction du groupe. Essentiellement, il fournit un moyen d'exécution atomique très rapide d'opérations qui, si elles sont interrompues par un autre thread, sont nettoyées et tentées à nouveau.
  • Ajout du lien symbolique /usr/bin/ld.so.
  • L'assemblage par défaut de tous les fichiers exécutables des programmes embarqués et de l'ensemble de test en mode PIE (position indépendant de l'exécutable) est fourni. Pour désactiver ce comportement, l'option « --disable-default-pie » est fournie.
  • Pour Linux, un paramètre glibc.malloc.hugetlb a été ajouté pour permettre à l'implémentation de malloc d'utiliser l'appel système madvise avec l'indicateur MADV_HUGEPAGE pour mmap et sbrk, ou d'utiliser directement des pages de mémoire volumineuses en spécifiant l'indicateur MAP_HUGETLB dans mmap. appels. Dans le premier cas, vous pouvez obtenir des performances accrues si des Transparent Huge Pages sont utilisées en mode madvise, et dans le second cas, vous pouvez utiliser de grandes pages réservées par le système (Huge Pages).
  • Ajout de la fonction _dl_find_object qui peut être utilisée pour ajouter des informations sur le déroulement de la pile d'appels.
  • Ajout de la prise en charge de l'architecture OpenRISC (or1k-linux-gnu) en mode soft-float. Le port nécessite binutils 2.35, GCC 11 et le noyau Linux 5.4.
  • Ajout d'un indicateur de construction "--with-rtld-early-cflags", qui peut être utilisé pour spécifier des indicateurs de compilation supplémentaires utilisés lors de la construction du code initial pour la liaison dynamique.
  • Pour la plate-forme Linux, la fonction epoll_pwait2 a été ajoutée, qui diffère de epoll_wait en spécifiant un délai d'attente avec une précision de la nanoseconde.
  • Ajout de la fonction posix_spawn_file_actions_addtcsetpgrp_np pour éliminer les conditions de concurrence lors de la configuration d'un terminal de contrôle pour un nouveau processus.
  • Pour les applications compilées avec Glibc et GCC 12+, le mode de protection « _FORTIFY_SOURCE=3 » est implémenté, qui détecte d'éventuels débordements de tampon lors de l'exécution des fonctions de chaîne définies dans le fichier d'en-tête string.h. La différence avec le mode « _FORTIFY_SOURCE=2 » se résume à des vérifications supplémentaires, qui peuvent potentiellement entraîner une diminution des performances.
  • La prise en charge d'Intel MPX (Memory Protection Extensions), utilisée pour vérifier les pointeurs pour les limites de mémoire, a été interrompue (cette technologie ne s'est pas répandue et a déjà été supprimée de GCC et LLVM).
  • Le mécanisme de pré-lien et ses variables d'environnement associées LD_TRACE_PRELINKING et LD_USE_LOAD_BIAS sont obsolètes et seront supprimés dans une prochaine version.

    Vulnérabilités corrigées :

    • CVE-2022-23218, CVE-2022-23219 – Débordement de tampon dans les fonctions svcunix_create et clnt_create, provoqué par la copie du contenu du paramètre filename sur la pile sans vérifier la taille des données copiées. Pour les applications construites sans protection de pile et utilisant le protocole « unix », la vulnérabilité peut conduire à l'exécution de code malveillant lors du traitement de noms de fichiers très longs.
    • CVE-2021-3998 est une vulnérabilité dans la fonction realpath() due au retour, sous certaines conditions, d'une valeur incorrecte contenant des données résiduelles non nettoyées de la pile. Pour le programme fusermount SUID-root, la vulnérabilité peut être utilisée pour obtenir des informations sensibles de la mémoire du processus, par exemple pour obtenir des informations sur les pointeurs.
    • CVE-2021-3999 - Dépassement de tampon d'un octet dans la fonction getcwd(). Le problème est dû à un bug présent depuis 1995. Pour provoquer un débordement, appelez simplement chdir() sur le répertoire "/" dans un espace de noms de point de montage distinct.

    Source: opennet.ru

Ajouter un commentaire