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 af automatisk trådregistrering ved hjælp af systemkaldet rseq (genstartbare sekvenser), der er leveret siden kernen. Linux 4.18. Systemkaldet rseq muliggør kontinuerlig udførelse af en gruppe instruktioner, uafbrudt og bekræftende på resultatet af den sidste instruktion i gruppen. I bund og grund giver det et middel til meget hurtig, atomar udførelse af operationer, som, hvis de afbrydes af en anden tråd, slettes, og et nyt forsøg forsøges.
- 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 Tilføjet en glibc.malloc.hugetlb-indstilling, der giver dig mulighed for at skifte malloc-implementeringen til at bruge madvise-systemkaldet med MADV_HUGEPAGE-flaget for mmap og sbrk, eller til direkte at bruge enorme hukommelsessider ved at angive MAP_HUGETLB-flaget i mmap-kald. Den førstnævnte mulighed giver mulighed for ydeevneforbedringer, når du bruger Transparent Huge Pages i madvise-tilstand, mens den sidstnævnte mulighed tillader brug af systemreserverede enorme sider.
- 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. Denne port kræver binutils 2.35, GCC 11 og kernen. Linux 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 platform Linux Tilføjet epoll_pwait2-funktionen, som adskiller sig fra epoll_wait ved at angive en timeout med nanosekundspræ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
