Glibc 2.35 System Library Release

Efter seks måneders udvikling er GNU C Library (glibc) 2.35 systembiblioteket blevet frigivet, som fuldt ud overholder kravene i ISO C11 og POSIX.1-2017 standarderne. Den nye udgivelse indeholder rettelser fra 66 udviklere.

Nogle af forbedringerne implementeret i Glibc 2.35 inkluderer:

  • Tilføjet understøttelse af "C.UTF-8"-lokaliteten, som inkluderer kollationsregler for alle Unicode-koder, men for at spare plads er begrænset til brugen af ​​ASCII-områder i funktionerne fnmatch, regexec og regcomp. Lokaliteten er omkring 400 KB, hvoraf 346 KB er LC_CTYPE-data til Unicode, og kræver en separat installation (ikke indbygget i Glibc).
  • Kodningsdata, tegntypeoplysninger og translitterationstabeller er blevet opdateret for at understøtte Unicode 14.0.0-specifikationen.
  • og implementerer funktioner og makroer, der afrunder resultatet til en smallere type: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfqN, fMfx, fMfx, fMfx, fMfx, fMfx fmafN og fMxfmafNx. Funktionerne er beskrevet i specifikationerne TS 18661-1:2014, TS 18661-3:2015 og tilføjet udkastet til den fremtidige ISO C2X C-standard.
  • og implementerer funktioner og makroer til at finde minimum og maksimum af flydende, lange dobbelte, _FloatN og _FloatNx flydende kommatal, beskrevet i IEEE 754-2019-specifikationen og tilføjet til fremtidens udkast ISO C2X-standard: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • Tilføjede konstanter for enkeltpræcisions flydende kommatal til : 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_SQRT.M_2_SQRT.M_1_SQRT.
  • For exp10-funktioner er tilsvarende makroer, der ikke er bundet til bestemte typer, blevet tilføjet til header-filen .
  • Tilføjede makroen _PRINTF_NAN_LEN_MAX foreslået i udkastet til ISO C2X-standard til .
  • Tilføjet "%b" og "%B" formatspecifikationer til printf-familien af ​​funktioner for at udskrive heltal i binær repræsentation.
  • Det dynamiske linksystem implementerer en ny DSO-sorteringsalgoritme, der bruger dybde-først-søgning (DFS) til at løse ydeevneproblemer ved håndtering af loopede afhængigheder. For at vælge DSO-sorteringsalgoritmen foreslås glibc.rtld.dynamic_sort-parameteren, som kan indstilles til "1" for at rulle tilbage til den gamle algoritme.
  • ABI har tilføjet understøttelse af en ny funktion '__memcmpeq', der bruges af compilere til at optimere brugen af ​​'memcmp', hvis værdien returneret af denne funktion kun bruges til at kontrollere fuldførelsesstatus for en operation.
  • Tilføjet understøttelse til automatisk registrering af tråde ved hjælp af rseq (genstartbare sekvenser) systemkald, der blev leveret siden Linux-kerne 4.18. Systemkaldet rseq giver dig mulighed for at organisere den kontinuerlige udførelse af en gruppe af instruktioner, der ikke afbrydes og bekræfter resultatet af den sidste instruktion i gruppen. I det væsentlige giver det et middel til meget hurtig atomudførelse af operationer, der, hvis de afbrydes af en anden tråd, renses op og forsøges igen.
  • Tilføjet symbollink /usr/bin/ld.so.
  • Standardsamlingen af ​​alle eksekverbare filer af indlejrede programmer og testsættet i PIE-tilstand (position uafhængig eksekverbar) leveres. For at deaktivere denne adfærd er "--disable-default-pie" muligheden til rådighed.
  • For Linux er der tilføjet en glibc.malloc.hugetlb-indstilling for at tillade, at malloc-implementeringen kan skiftes til at bruge madvise-systemkaldet med MADV_HUGEPAGE-flaget til mmap og sbrk, eller til direkte at bruge store hukommelsessider ved at angive MAP_HUGETLB-flaget i mmap opkald. I det første tilfælde kan der opnås præstationsgevinster, hvis Transparent Huge Pages bruges i madvise-tilstand, og i det andet tilfælde er muligheden for at bruge systemreserverede Huge Pages.
  • Tilføjet _dl_find_object-funktion, der kan bruges til at tilføje opkaldsstack-afviklingsoplysninger.
  • Tilføjet understøttelse af OpenRISC-arkitekturen (eller 1k-linux-gnu) i soft-float-tilstand. Porten kræver binutils 2.35, GCC 11 og Linux-kerne 5.4.
  • Tilføjet et build-flag "--with-rtld-early-cflags", som kan bruges til at specificere yderligere kompileringsflag, der bruges ved opbygning af den indledende kode til dynamisk linking.
  • Til Linux-platformen er funktionen epoll_pwait2 blevet tilføjet, som adskiller sig fra epoll_wait ved at angive en timeout med nanosekunds præcision.
  • Tilføjet posix_spawn_file_actions_addtcsetpgrp_np funktion for at eliminere race betingelser, når du indstiller en kontrolterminal til en ny proces.
  • For applikationer, der er kompileret med Glibc og GCC 12+, er "_FORTIFY_SOURCE=3"-beskyttelsestilstanden implementeret, som registrerer mulige bufferoverløb, når der udføres strengfunktioner defineret i string.h-headerfilen. Forskellen fra "_FORTIFY_SOURCE=2"-tilstanden kommer ned til yderligere kontroller, som potentielt kan føre til nedsat ydeevne.
  • Understøttelse af Intel MPX (Memory Protection Extensions), der bruges til at kontrollere pointere for hukommelsesgrænser, er blevet afbrudt (denne teknologi er ikke blevet udbredt og er allerede blevet fjernet fra GCC og LLVM).
  • Prelink-mekanismen og dens tilknyttede miljøvariabler LD_TRACE_PRELINKING og LD_USE_LOAD_BIAS er blevet forældet og vil blive fjernet i en fremtidig udgivelse.

    Sårbarheder rettet:

    • CVE-2022-23218, CVE-2022-23219 – Bufferoverløb i funktionerne svcunix_create og clnt_create, forårsaget af kopiering af indholdet af filnavnsparameteren til stakken uden at kontrollere størrelsen af ​​de kopierede data. For applikationer, der er bygget uden stakbeskyttelse og bruger "unix"-protokollen, kan sårbarheden føre til udførelse af angriberkode ved behandling af meget lange filnavne.
    • CVE-2021-3998 er en sårbarhed i realpath()-funktionen på grund af returnering, under visse betingelser, af en forkert værdi, der indeholder urensede restdata fra stakken. For SUID-root fusermount-programmet kan sårbarheden bruges til at indhente følsom information fra proceshukommelsen, for eksempel for at få information om pointere.
    • CVE-2021-3999 - Single-byte bufferoverløb i getcwd()-funktionen. Problemet er forårsaget af en fejl, der har været til stede siden 1995. For at forårsage et overløb skal du blot kalde chdir() på "/"-mappen i et separat monteringspunkt-navneområde.

    Kilde: opennet.ru

Tilføj en kommentar