Vrijgave van de systeembibliotheek Glibc 2.35

Na zes maanden ontwikkeling is de release van de GNU C Library (glibc) 2.35 gepubliceerd, die volledig voldoet aan de eisen van de ISO C11- en POSIX.1-2017-standaarden. De nieuwe release bevat correcties van 66 ontwikkelaars.

Enkele verbeteringen in Glibc 2.35 zijn te noemen:

  • Ondersteuning voor de locale "C.UTF-8" is toegevoegd, die sorteerrules bevat voor alle Unicode-codes, maar om ruimte te besparen, is deze beperkt tot het gebruik van ASCII-bereiken in de functies fnmatch, regexec en regcomp. De locale neemt ongeveer 400 KB in beslag, waarvan 346 KB gegevens zijn van LC_CTYPE voor Unicode, en vereist een aparte installatie (niet ingebouwd in Glibc).
  • De coderinggegevens, informatie over typesymbolen en transliteratietabellen zijn bijgewerkt ter ondersteuning van de Unicode-specificatie 14.0.0.
  • In <math.h> en <tgmath.h> zijn functies en macro's geïmplementeerd die het resultaat afronden naar een smallere type: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN en fMfmafNx. De functies zijn beschreven in de specificaties TS 18661-1:2014, TS 18661-3:2015 en zijn toegevoegd aan de conceptversie van de toekomstige C-standaard ISO C2X.
  • In <math.h> en <tgmath.h> zijn functies en macro's geïmplementeerd voor het vinden van het minimum en maximum van zwevende-getallen met types float, long double, _FloatN en _FloatNx, beschreven in de specificatie IEEE 754-2019 en toegevoegd aan de conceptversie van de toekomstige C-standaard ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • In <math.h> zijn constanten toegevoegd voor zwevende-getallen met enkele precisie: 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 en M_SQRT1_2f.
  • Voor de functies exp10 zijn in de header <tgmath.h> bijbehorende macro's toegevoegd, die niet aan specifieke types zijn gebonden.
  • In <stdio.h> is de macro _PRINTF_NAN_LEN_MAX toegevoegd, voorgesteld in de conceptversie van de ISO C2X-standaard.
  • In de printf-gezinsfuncties zijn format specifiers "%b" en "%B" toegevoegd voor het weergeven van gehele getallen in binaire voorstelling.
  • In het dynamisch bindingssysteem is een nieuw sorteeralgoritme voor DSO geïmplementeerd, dat de diepte-eerst zoekmethode (DFS) gebruikt om prestatieproblemen bij het verwerken van cyclische afhankelijkheden aan te pakken. Voor het selecteren van het DSO-sorteeralgoritme is de parameter glibc.rtld.dynamic_sort voorgesteld, waaraan de waarde "1" kan worden toegekend om terug te keren naar het oude algoritme.
  • In ABI is added support for the new function ‘__memcmpeq’, used by compilers to optimize the usage of ‘memcmp’, in cases where the return value of this function is only used to check the status of the operation.
  • Support has been added for automatic thread registration using the rseq (restartable sequences) system call, available starting from Linux kernel 4.18. The rseq system call allows for the uninterrupted execution of a group of instructions, which is not interrupted and confirms the result of the last instruction in the group. Essentially, it provides a means for very fast atomic execution of operations that, in the event of interruption by another thread, are cleaned up and a retry of execution is attempted.
  • A symbolic link to /usr/bin/ld.so has been added.
  • The default build configuration for all executable files of built-in programs and test suites is now set to PIE (position independent executable). An option ‘—disable-default-pie’ is provided to disable this behavior.
  • For Linux, the glibc.malloc.hugetlb setting has been added, allowing the malloc implementation to switch to using the madvise system call with the MADV_HUGEPAGE flag for mmap and sbrk, or directly use large memory pages by specifying the MAP_HUGETLB flag in mmap calls. In the first case, performance can be improved if Transparent Huge Pages are used in madvise mode, while in the second, it provides the option to use system-reserved large pages (Huge Pages).
  • The _dl_find_object function has been added, which can be used to add information about call stack unwinding.
  • Support for the OpenRISC (or1k-linux-gnu) architecture in soft-float mode has been added. The port requires binutils 2.35, GCC 11, and Linux kernel 5.4.
  • A build flag ‘—with-rtld-early-cflags’ has been added, allowing additional compilation flags to be specified when building the initial code for dynamic linking.
  • For the Linux platform, the epoll_pwait2 function has been added, which differs from epoll_wait by the inclusion of a timeout with nanosecond precision.
  • The posix_spawn_file_actions_addtcsetpgrp_np function has been added, preventing race conditions when setting the controlling terminal for a new process.
  • Voor applicaties die zijn gecompileerd met Glibc en GCC 12+, is de beschermingsmodus «_FORTIFY_SOURCE=3» geïmplementeerd, die mogelijke bufferoverlopen detecteert bij het uitvoeren van stringfuncties gedefinieerd in de headerfile string.h. Het verschil met de modus «_FORTIFY_SOURCE=2» is te vinden in extra controles die mogelijk de prestaties kunnen verminderen.
  • De ondersteuning voor Intel MPX (Memory Protection Extensions), gebruikt voor het controleren van pointers op het naleven van geheugenlimieten, is stopgezet (deze technologie is niet populair geworden en is al verwijderd uit GCC en LLVM).
  • Het prelink-mechanisme en de bijbehorende omgevingsvariabelen LD_TRACE_PRELINKING en LD_USE_LOAD_BIAS zijn als verouderd verklaard en zullen in de volgende release worden verwijderd.

    Kwetsbaarheden opgelost:

    • CVE-2022-23218, CVE-2022-23219 — bufferoverflow in de functies svcunix_create en clnt_create, veroorzaakt door het kopiëren van de inhoud van een parameter met de bestandsnaam naar de stack zonder het formaat van de te kopiëren gegevens te controleren. Voor applicaties die zijn gecompileerd zonder stackbescherming en het «unix»-protocol gebruiken, kan de kwetsbaarheid leiden tot de uitvoering van kwaadaardige code bij de verwerking van zeer lange bestandsnamen.
    • CVE-2021-3998 — kwetsbaarheid in de functie realpath(), veroorzaakt door het retourneren van een onjuiste waarde onder bepaalde omstandigheden, die niet-gezuiverde resterende gegevens uit de stack bevat. Voor SUID-root programma fusermount kan deze kwetsbaarheid worden gebruikt om vertrouwelijke informatie uit het geheugen van het proces te verkrijgen, bijvoorbeeld informatie over pointers.
    • CVE-2021-3999 — een eenbyte bufferoverflow in de functie getcwd(). Het probleem wordt veroorzaakt door een fout die al sinds 1995 aanwezig is. Het is al voldoende om een chdir()-aanroep naar de directory «/» uit te voeren binnen een aparte namespace van mountpunten om de overflow te veroorzaken.

    Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster