Version de la bibliothèque système Glibc 2.31

Après six mois de développement publié version de la bibliothèque système Bibliothèque GNU C (glibc) 2.31, qui est entièrement conforme aux exigences des normes ISO C11 et POSIX.1-2008. La nouvelle version comprend des correctifs de 58 développeurs.

Parmi ceux implémentés dans la Glibc 2.31 améliorations vous pouvez noter:

  • Ajout de la macro _ISOC2X_SOURCE pour activer les capacités définies dans le projet de future norme ISO C2X. Ces fonctionnalités sont également activées lors de l'utilisation de la macro _GNU_SOURCE ou lors de la construction dans gcc avec l'indicateur « -std=gnu2x » ;
  • Pour les fonctions définies dans le fichier d'en-tête "math.h" qui arrondissent leurs résultats à un type plus petit, les macros de type générique correspondantes sont proposées dans le fichier "tgmath.h", comme l'exigent les spécifications TS 18661-1:2014 et TS 18661-3 : 2015 ;
  • Ajout de la fonction pthread_clockjoin_np(), qui attend la fin du thread, en tenant compte du timeout (si le timeout se produit avant la fin, la fonction renverra une erreur). Contrairement à pthread_timedjoin_np(), dans pthread_clockjoin_np() il est possible de définir le type de minuterie pour calculer le timeout - CLOCK_MONOTONIC (prend en compte le temps passé par le système en mode veille) ou CLOCK_REALTIME ;
  • Le résolveur DNS prend désormais en charge l'option trust-ad dans /etc/resolv.conf et l'indicateur RES_TRUSTAD dans _res.options. Lorsqu'il est défini, l'indicateur DNSSEC est transmis dans les requêtes DNS. AD (données authentifiées). Dans ce mode, l'indicateur AD défini par le serveur devient disponible pour les applications qui appellent des fonctions comme res_search(). Par défaut, si les options suggérées ne sont pas définies, la glibc ne spécifie pas l'indicateur AD dans les requêtes et l'efface automatiquement dans les réponses, indiquant que les vérifications DNSSEC sont manquantes ;
  • La création de liaisons d'appels système fonctionnelles pour Glibc ne nécessite plus l'installation des fichiers d'en-tête du noyau Linux. L'exception est l'architecture RISC-V 64 bits ;
  • Éliminé vulnérabilité CVE-2019-19126, ce qui permet de contourner la protection
    ASLR dans les programmes avec l'indicateur setuid et détermine la disposition des adresses dans les bibliothèques chargées grâce à la manipulation de la variable d'environnement LD_PREFER_MAP_32BIT_EXEC.

Modifications qui rompent la compatibilité :

  • totalorder(), totalordermag() et des fonctions similaires pour d'autres types à virgule flottante acceptent désormais les pointeurs comme arguments pour éliminer les avertissements concernant la conversion des valeurs dans l'état NaN, conformément aux recommandations du TS 18661-1 proposées pour la future norme C2X.
    Les exécutables existants qui transmettent directement des arguments à virgule flottante continueront à s'exécuter sans modification ;

  • La fonction stime, obsolète depuis longtemps, n'est plus disponible pour les binaires liés à la glibc, et sa définition a été supprimée de time.h. Pour régler l'heure du système, utilisez la fonction clock_settime. À l'avenir, nous prévoyons de supprimer la fonction obsolète ftime, ainsi que le fichier d'en-tête sys/timeb.h (gettimeofday ou clock_gettime doivent être utilisés à la place de ftime) ;
  • La fonction gettimeofday ne transmet plus d'informations sur le fuseau horaire à l'échelle du système (cette fonctionnalité était pertinente à l'époque de 4.2-BSD et est obsolète depuis de nombreuses années). L'argument 'tzp' doit maintenant recevoir un pointeur nul et la fonction localtime() doit être utilisée pour obtenir des informations sur le fuseau horaire en fonction de l'heure actuelle. L'appel de gettimeofday avec un argument 'tzp' non nul renverra les champs tz_minuteswest et tz_dsttime vides dans la structure de fuseau horaire. La fonction gettimeofday elle-même est obsolète sous POSIX (clock_gettime est recommandé à la place de gettimeofday), mais il n'est pas prévu de la supprimer de la glibc ;
  • settimeofday ne prend plus en charge le passage simultané de paramètres pour régler l'heure et le décalage de correction de l'heure. Lors de l'appel de settimeofday, l'un des arguments (heure ou décalage) doit maintenant être défini sur null, sinon l'appel de fonction échouera avec une erreur EINVAL. Comme gettimeofday, la fonction settimeofday est obsolète dans POSIX et il est recommandé de la remplacer par la fonction clock_settime ou la famille de fonctions adjtime ;
  • La prise en charge de l'architecture SPARC ISA v7 a été interrompue (la prise en charge de la v8 est conservée pour l'instant, mais uniquement pour les processeurs prenant en charge les instructions CAS, tels que les processeurs LEON, et non les processeurs SuperSPARC).
  • Si le couplage échoue dans "paresseux", dans lequel l'éditeur de liens ne recherche pas les symboles d'une fonction jusqu'au premier appel à cette fonction, la fonction dlopen force désormais le processus à se terminer (renvoyant auparavant NULL en cas d'échec) ;
  • Pour l'ABI hard-float MIPS, la pile exécutable est désormais utilisée, sauf si la build restreint explicitement l'utilisation du noyau Linux 4.8+ via le paramètre « -enable-kernel=4.8.0 » (avec les noyaux jusqu'à 4.8, les crashs sont observé pour certaines configurations MIPS) ;
  • Les liaisons autour des appels système liés à la manipulation du temps ont été déplacées pour utiliser l'appel système time64, s'il est présent (sur les systèmes 32 bits, la glibc essaie d'abord de nouveaux appels système qui manipulent le type de temps 64 bits, et s'il n'y en a pas, tombe retour aux anciens appels 32 bits).

Source: opennet.ru

Ajouter un commentaire