Glibc 2.35 System Library Release

Efter sex månaders utveckling har GNU C Library (glibc) 2.35-systembiblioteket släppts, som helt uppfyller kraven i ISO C11- och POSIX.1-2017-standarderna. Den nya utgåvan innehåller korrigeringar från 66 utvecklare.

Några av förbättringarna som implementerats i Glibc 2.35 inkluderar:

  • Lade till stöd för lokalen "C.UTF-8", som inkluderar sorteringsregler för alla Unicode-koder, men för att spara utrymme är det begränsat till användningen av ASCII-intervall i funktionerna fnmatch, regexec och regcomp. Lokalen är cirka 400 KB, varav 346 KB är LC_CTYPE-data för Unicode, och kräver en separat installation (ej inbyggd i Glibc).
  • Kodningsdata, teckentypsinformation och translitterationstabeller har uppdaterats för att stödja Unicode 14.0.0-specifikationen.
  • och implementerar funktioner och makron som avrundar resultatet till en smalare typ: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfqN, fMfx, fMfx, fMfx, fMfx, fMfx fmafN och fMxfmafNx. Funktionerna beskrivs i specifikationerna TS 18661-1:2014, TS 18661-3:2015 och läggs till i utkastet till den framtida ISO C2X C-standarden.
  • och implementerar funktioner och makron för att hitta minimum och maximum för float, long double, _FloatN och _FloatNx flyttal, som beskrivs i IEEE 754-2019-specifikationen och läggs till i framtidens utkast ISO C2X-standard: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • Lade till konstanter för flyttal med enstaka precision till : 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.2, M_SQRT. M_1_SQRT.
  • För exp10-funktioner har motsvarande makron som inte är knutna till specifika typer lagts till i rubrikfilen .
  • Lade till makrot _PRINTF_NAN_LEN_MAX som föreslagits i utkastet till ISO C2X-standard till .
  • Lade till "%b" och "%B" formatspecifikationer till printf-familjen av funktioner för att skriva ut heltal i binär representation.
  • Det dynamiska länkningssystemet implementerar en ny DSO-sorteringsalgoritm som använder depth-first search (DFS) för att lösa prestandaproblem vid hantering av loopade beroenden. För att välja DSO-sorteringsalgoritmen föreslås glibc.rtld.dynamic_sort-parametern, som kan ställas in på "1" för att gå tillbaka till den gamla algoritmen.
  • ABI har lagt till stöd för en ny funktion '__memcmpeq', som används av kompilatorer för att optimera användningen av 'memcmp' om värdet som returneras av denna funktion endast används för att kontrollera en operations slutförandestatus.
  • Tillagt stöd för automatisk registrering av trådar med rseq (omstartbara sekvenser) systemanrop som tillhandahålls sedan Linux-kärnan 4.18. Systemanropet rseq låter dig organisera den kontinuerliga exekveringen av en grupp instruktioner som inte avbryts och bekräftar resultatet av den sista instruktionen i gruppen. I grund och botten tillhandahåller det ett sätt för mycket snabb atomär exekvering av operationer som, om de avbryts av en annan tråd, rensas upp och försöks igen.
  • Lade till symbollänk /usr/bin/ld.so.
  • Standardsammansättningen av alla körbara filer av inbäddade program och testuppsättningen i PIE-läge (positionsoberoende körbar) tillhandahålls. För att inaktivera detta beteende, finns alternativet "--disable-default-pie".
  • För Linux har en glibc.malloc.hugetlb-inställning lagts till för att tillåta att malloc-implementeringen växlas till att använda madvise-systemanropet med MADV_HUGEPAGE-flaggan för mmap och sbrk, eller för att direkt använda stora minnessidor genom att specificera MAP_HUGETLB-flaggan i mmap samtal. I det första fallet kan prestandavinster uppnås om Transparent Huge Pages används i madvise-läge, och i det andra fallet finns möjligheten att använda systemreserverade Huge Pages.
  • Lade till _dl_find_object-funktion som kan användas för att lägga till information om samtalsstack.
  • Lade till stöd för OpenRISC-arkitekturen (eller 1k-linux-gnu) i soft-float-läge. Porten kräver binutils 2.35, GCC 11 och Linux-kärna 5.4.
  • Lade till en byggflagga "--with-rtld-early-cflags", som kan användas för att specificera ytterligare kompileringsflaggor som används när man bygger den initiala koden för dynamisk länkning.
  • För Linux-plattformen har funktionen epoll_pwait2 lagts till, som skiljer sig från epoll_wait genom att ange en timeout med nanosekunders precision.
  • Lade till posix_spawn_file_actions_addtcsetpgrp_np funktion för att eliminera tävlingsförhållanden när man ställer in en kontrollterminal för en ny process.
  • För applikationer kompilerade med Glibc och GCC 12+ implementeras skyddsläget "_FORTIFY_SOURCE=3", som upptäcker eventuella buffertspill vid exekvering av strängfunktioner definierade i string.h-huvudfilen. Skillnaden från läget "_FORTIFY_SOURCE=2" beror på ytterligare kontroller, vilket potentiellt kan leda till minskad prestanda.
  • Stöd för Intel MPX (Memory Protection Extensions), som används för att kontrollera pekare för minnesgränser, har upphört (denna teknik har inte blivit utbredd och har redan tagits bort från GCC och LLVM).
  • Förlänksmekanismen och dess associerade miljövariabler LD_TRACE_PRELINKING och LD_USE_LOAD_BIAS har fasats ut och kommer att tas bort i en framtida version.

    Sårbarheter fixade:

    • CVE-2022-23218, CVE-2022-23219 – Buffertspill i funktionerna svcunix_create och clnt_create, orsakat av att innehållet i filnamnsparametern kopieras till stacken utan att kontrollera storleken på den kopierade datan. För applikationer byggda utan stackskydd och som använder "unix"-protokollet, kan sårbarheten leda till exekvering av angriparkod vid bearbetning av mycket långa filnamn.
    • CVE-2021-3998 är en sårbarhet i realpath()-funktionen på grund av att ett felaktigt värde returneras, under vissa förhållanden, som innehåller orenad restdata från stacken. För SUID-root fusermount-programmet kan sårbarheten användas för att hämta känslig information från processminnet, till exempel för att få information om pekare.
    • CVE-2021-3999 - En-byte buffertspill i getcwd()-funktionen. Problemet orsakas av en bugg som har funnits sedan 1995. För att orsaka ett spill, anrop helt enkelt chdir() i katalogen "/" i ett separat monteringspunktsnamnområde.

    Källa: opennet.ru

Lägg en kommentar