Glibc 2.35 komt met verbeteringen, bugfixes en meer

Na zes maanden van ontwikkeling de release van de nieuwe versie van Glibc 2.35 werd aangekondigd waarin bevat fixes van 66 ontwikkelaars en van de geïmplementeerde verbeteringen kunnen we zien dat ondersteuning voor de "C.UTF-8"-landinstelling is toegevoegd, die sorteringen voor alle Unicode-codes omvat, maar beperkt is tot het gebruik van ASCII-bereiken in de functies fnmatch, regexec en regcomp om op te slaan ruimte.

De landinstelling is ongeveer 400 KB, waarvan 346 KB LC_CTYPE-gegevens voor Unicode, en moet afzonderlijk worden geïnstalleerd (niet ingebouwd in Glibc). Coderingsgegevens, karaktertype-informatie en transliteratietabellen zijn bijgewerkt om de Unicode 14.0.0-specificatie te ondersteunen.

Een andere opvallende verandering is dat ja implementeer functies en macro's die het resultaat afronden naar een smaller type, Naast het implementeren van functies en macro's om het minimum en maximum van drijvende-kommagetallen van de typen float, long double, _FloatN en _FloatNx te vinden, beschreven in de IEEE 754-2019-specificatie.

voor functies exp10, de bijbehorende macro's worden toegevoegd aan het headerbestand, die niet gebonden zijn aan specifieke typen, plus de _PRINTF_NAN_LEN_MAX macro is toegevoegd aan , voorgesteld in de concept ISO C2X-norm.

Het dynamische koppelingssysteem implementeert een nieuw classificatie-algoritme DSO met behulp van diepte zoeken (DFS) om prestatieproblemen aan te pakken bij het afhandelen van lusafhankelijkheden. Om het DSO-sorteeralgoritme te selecteren, wordt de parameter glibc.rtld.dynamic_sort voorgesteld, die kan worden ingesteld op "1" om terug te vallen op het vorige algoritme.

buiten dat ondersteuning toegevoegd voor een nieuwe functie '__memcmpeq' naar de ABI, die door compilers wordt gebruikt om het gebruik van `memcmp' te optimaliseren wanneer de geretourneerde waarde van deze functie alleen wordt gebruikt om de voltooiingsstatus van een bewerking te controleren.

De ondersteuning voor automatische threadregistratie met behulp van de systeemaanroep rseq (herstartbare sequenties) die sinds Linux-kernel 4.18. De rseq systeemaanroep maakt het mogelijk om de continue uitvoering van een groep instructies te organiseren die niet wordt onderbroken en het resultaat begaat met de laatste instructie in de groep. In wezen biedt het een faciliteit voor zeer snelle atomaire uitvoering van bewerkingen die, als ze worden onderbroken door een andere thread, worden opgeschoond en opnieuw worden geprobeerd.

Aan de andere kant biedt het standaardcompilatie van alle uitvoerbare bestanden van de ingebouwde programma's en een testsuite in PIE-modus (positieonafhankelijk uitvoerbaar).

Om dit gedrag uit te schakelen, de optie “–disable-default-pie” is aanwezig, plus voor Linux, een glibc.malloc.hugetlb-instelling toegevoegd om de malloc-implementatie te wijzigen om de madvise-systeemaanroep te gebruiken met de MADV_HUGEPAGE-vlag voor mmap en sbrk, of direct grote geheugenpagina's te gebruiken door de MAP_HUGETLB-vlag op te geven in mmap-aanroepen.

In het eerste geval kan een prestatieverbetering worden bereikt door transparante Huge Pages in de gekke modus te gebruiken, en in het tweede geval kunt u door het systeem gereserveerde grote pagina's (Huge Pages) gebruiken.

Er moet ook worden opgemerkt dat enkele kwetsbaarheden zijn verholpen in deze nieuwe versie:

  • CVE-2022-23218, CVE-2022-23219: Een bufferoverloop in de functies svcunix_create en clnt_create veroorzaakt door het kopiëren van de inhoud van een bestandsnaamparameter naar de stapel zonder de grootte van de gekopieerde gegevens te controleren. Voor toepassingen die zijn gebouwd zonder stackbescherming en die het "unix"-protocol gebruiken, kan de kwetsbaarheid leiden tot het uitvoeren van kwaadaardige code bij het verwerken van zeer lange bestandsnamen.
  • CVE-2021-3998: een kwetsbaarheid in de realpath()-functie veroorzaakt door het retourneren van een onjuiste waarde onder bepaalde omstandigheden met niet-gereinigde resterende gegevens van de stapel. Voor het SUID-root fusermount-programma kan de kwetsbaarheid worden gebruikt om gevoelige informatie uit het procesgeheugen te halen, bijvoorbeeld om pointer-informatie te verkrijgen.
  • CVE-2021-3999: bufferoverloop van één byte in de functie getcwd(). Het probleem wordt veroorzaakt door een bug die al sinds 1995 bestaat. Om een ​​overflow aan te roepen, in een aparte naamruimte voor het aankoppelpunt, roept u gewoon chdir() aan in de map "/".

Eindelijk Als u er meer over wilt weten, u kunt de details in het volgende link.