Glibc 2.35 System Library Release

Etter seks måneders utvikling har GNU C Library (glibc) 2.35-systembiblioteket blitt utgitt, som fullt ut oppfyller kravene i ISO C11- og POSIX.1-2017-standardene. Den nye utgivelsen inkluderer rettelser fra 66 utviklere.

Noen av forbedringene implementert i Glibc 2.35 inkluderer:

  • Lagt til støtte for lokaliteten "C.UTF-8", som inkluderer sorteringsregler for alle Unicode-koder, men for å spare plass er det begrenset til bruk av ASCII-områder i funksjonene fnmatch, regexec og regcomp. Lokaliteten er omtrent 400 KB, hvorav 346 KB er LC_CTYPE-data for Unicode, og krever en separat installasjon (ikke innebygd i Glibc).
  • Kodingsdata, tegntypeinformasjon og translitterasjonstabeller er oppdatert for å støtte Unicode 14.0.0-spesifikasjonen.
  • I Og funksjoner og makroer er implementert som avrunder resultatet til en smalere type: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMx, fMx, fMffN og fMxfn Nx. Funksjonene er beskrevet i spesifikasjonene TS 18661-1:2014, TS 18661-3:2015 og lagt til utkastet til den fremtidige ISO C2X C-standarden.
  • I Og implementerte funksjoner og makroer for å finne minimum og maksimum av flyttall med typene float, long double, _FloatN og _FloatNx, beskrevet i IEEE 754-2019-spesifikasjonen og lagt til utkastet til den fremtidige ISO C2X C-standarden: fmaximum, fmaximum_num , fmaksimum_mag, fmaksimum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • I lagt til konstanter for enkeltpresisjonsflyttall: 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_2SQRT1 og M_2SQRT.
  • For funksjoner exp10 i overskriftsfil Lagt til tilsvarende makroer som ikke er knyttet til bestemte typer.
  • I la til _PRINTF_NAN_LEN_MAX-makroen foreslått i utkastet til ISO C2X-standarden.
  • Lagt til "%b" og "%B" formatspesifikasjoner til printf-familien av funksjoner for å skrive ut heltall i binær representasjon.
  • Det dynamiske koblingssystemet implementerer en ny sorteringsalgoritme, DSO, som bruker dybde-først-søk (DFS) for å løse ytelsesproblemer med looping-avhengigheter. For å velge DSO-sorteringsalgoritmen foreslås glibc.rtld.dynamic_sort-parameteren, som kan settes til "1" for å rulle tilbake til den gamle algoritmen.
  • ABI har lagt til støtte for en ny funksjon '__memcmpeq', brukt av kompilatorer for å optimalisere bruken av 'memcmp' hvis verdien returnert av denne funksjonen kun brukes til å sjekke fullføringsstatusen til en operasjon.
  • Lagt til støtte for automatisk registrering av tråder ved å bruke rseq (restartable sekvenser) systemanrop gitt siden Linux-kjernen 4.18. Systemkallet rseq lar deg organisere den kontinuerlige utførelsen av en gruppe instruksjoner som ikke blir avbrutt og bekrefter resultatet av den siste instruksjonen i gruppen. I hovedsak gir det et middel for veldig rask atomutførelse av operasjoner som, hvis de blir avbrutt av en annen tråd, blir ryddet opp og forsøkt på nytt.
  • Lagt til symbolkobling /usr/bin/ld.so.
  • Standardsammenstillingen av alle kjørbare filer av innebygde programmer og testsettet i PIE-modus (posisjonsuavhengig kjørbar) er gitt. For å deaktivere denne virkemåten, er alternativet "--disable-default-pie" tilgjengelig.
  • For Linux er en glibc.malloc.hugetlb-innstilling lagt til for å tillate at malloc-implementeringen kan byttes til å bruke madvise-systemkallet med MADV_HUGEPAGE-flagget for mmap og sbrk, eller for å bruke store minnesider direkte ved å spesifisere MAP_HUGETLB-flagget i mmap samtaler. I det første tilfellet kan ytelsesgevinster oppnås hvis Transparent Huge Pages brukes i madvise-modus, og i det andre tilfellet er det mulig å bruke systemreserverte Huge Pages.
  • Lagt til _dl_find_object-funksjon som kan brukes til å legge til informasjon om avvikling av anropsstabel.
  • Lagt til støtte for OpenRISC-arkitekturen (eller 1k-linux-gnu) i soft-float-modus. Porten krever binutils 2.35, GCC 11 og Linux-kjerne 5.4.
  • Lagt til et byggeflagg "--with-rtld-early-cflags", som kan brukes til å spesifisere ytterligere kompileringsflagg som brukes når du bygger den innledende koden for dynamisk kobling.
  • For Linux-plattformen er funksjonen epoll_pwait2 lagt til, som skiller seg fra epoll_wait ved å spesifisere en tidsavbrudd med nanosekunders presisjon.
  • Lagt til posix_spawn_file_actions_addtcsetpgrp_np funksjon for å eliminere raseforhold når du setter en kontrollterminal for en ny prosess.
  • For applikasjoner kompilert med Glibc og GCC 12+, er "_FORTIFY_SOURCE=3"-beskyttelsesmodusen implementert, som oppdager mulig bufferoverløp når strengfunksjoner definert i string.h-headerfilen utføres. Forskjellen fra "_FORTIFY_SOURCE=2"-modusen kommer ned til ytterligere kontroller, som potensielt kan føre til redusert ytelse.
  • Støtte for Intel MPX (Memory Protection Extensions), som brukes til å sjekke pekere for minnegrenser, har blitt avviklet (denne teknologien har ikke blitt utbredt og er allerede fjernet fra GCC og LLVM).
  • Prelink-mekanismen og dens tilknyttede miljøvariabler LD_TRACE_PRELINKING og LD_USE_LOAD_BIAS er avviklet og vil bli fjernet i en fremtidig utgivelse.

    Sårbarheter fikset:

    • CVE-2022-23218, CVE-2022-23219 – Bufferoverflyt i funksjonene svcunix_create og clnt_create, forårsaket av å kopiere innholdet i filnavnparameteren til stabelen uten å sjekke størrelsen på de kopierte dataene. For applikasjoner bygd uten stabelbeskyttelse og som bruker "unix"-protokollen, kan sårbarheten føre til kjøring av angriperkode ved behandling av svært lange filnavn.
    • CVE-2021-3998 er en sårbarhet i realpath()-funksjonen på grunn av retur, under visse forhold, av en feil verdi som inneholder urensede restdata fra stabelen. For SUID-root fusermount-programmet kan sårbarheten brukes til å hente sensitiv informasjon fra prosessminnet, for eksempel for å få informasjon om pekere.
    • CVE-2021-3999 - Enkeltbyte bufferoverflyt i getcwd()-funksjonen. Problemet er forårsaket av en feil som har vært tilstede siden 1995. For å forårsake overløp, ring ganske enkelt chdir() på "/"-katalogen i et eget monteringspunktnavneområde.

    Kilde: opennet.ru

Legg til en kommentar