Pas six muaj zhvillimi, është publikuar versione e bibliotekës sistemike GNU C Library (glibc) 2.35, e cila plotëson plotësisht kërkesat e standardeve ISO C11 dhe POSIX.1-2017. Në këtë version të ri, janë përfshirë rregullime nga 66 zhvillues.
Disa nga përmirësimet në Glibc 2.35 përfshijnë:
- Shtuar mbështetje për lokalitetin «C.UTF-8», i cili përfshin rregullat e renditjes për të gjitha kodet Unicode, por, për të kursyer hapësirë, është kufizuar në përdorimin e diapazonit ASCII në funksionet fnmatch, regexec dhe regcomp. Lokaliteti zë rreth 400 KB, prej të cilave 346 KB janë të dhëna LC_CTYPE për Unicode dhe kërkon instalim të veçantë (nuk është i përfshirë në Glibc).
- Të dhënat e kodimeve, informacioni mbi tipet e simboleve dhe tabelat e transliterimit janë azhurnuar për të mbështetur specifikimin Unicode 14.0.0.
- Në <math.h> dhe <tgmath.h> janë realizuar funksione dhe makros që përfundojnë rezultatin në një tip më të ngushtë: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN dhe fMfmafNx. Funksionet janë përshkruar në specifikimet TS 18661-1:2014, TS 18661-3:2015 dhe janë shtuar në draftin e standardit të ardhshëm C ISO C2X.
- Në <math.h> dhe <tgmath.h> janë implementuar funksione dhe makro për gjetjen e minimumit dhe maksimumit të numrave me pikë fluturuese me tipe float, long double, _FloatN dhe _FloatNx, të përshkruara në specifikimin IEEE 754-2019 dhe të shtuara në projektin e standardit të ardhshëm të C-it ISO C2X: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
- Në <math.h> janë shtuar konstanta për numrat me pikë fluturuese me saktësi të vetme: 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_SQRT2f dhe M_SQRT1_2f.
- Për funksionin exp10, në skedarin hyrës <tgmath.h> janë shtuar makros që nuk lidhen me tipe specifike.
- Në <stdio.h> është shtuar makrosi _PRINTF_NAN_LEN_MAX, i propozuar në projektin e standardit ISO C2X.
- Në funksionet e familjes printf janë shtuar specifikatorët e formatit «%b» dhe «%B» për të shfaqur numrat e plotë në përfaqësimin binar.
- Në sistemin e lidhjes dinamike është implementuar një algoritëm i ri renditjeje DSO, që përdor metodën e kërkimit në thellësi (DFS) për të zgjidhur problemet e performancës gjatë përpunimit të varësive ciklike. Për të zgjedhur algoritmin e renditjes DSO, është propozuar parametri glibc.rtld.dynamic_sort, të cilit mund t'i caktohet vlera "1" për të kthyer në algoritmin e vjetër.
- NĂ« ABI Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r funksionin e ri â__memcmpeqâ, i cili pĂ«rdoret nga kompilatorĂ«t pĂ«r optimizimin e pĂ«rdorimit tĂ« âmemcmpâ, nĂ« rastin kur vlera e kthyer nga ky funksion pĂ«rdoret vetĂ«m pĂ«r tĂ« kontrolluar statusin e pĂ«rfundimit tĂ« operacionit.
- ĂshtĂ« shtuar mbĂ«shtetje pĂ«r regjistrimin automatik tĂ« threads, duke pĂ«rdorur thirrjen sistemike rseq (sekuencat e ripĂ«rtypshme), e cila ofrohet qĂ« nga bĂ«rthama Linux 4.18. Thirrja sistemike rseq lejon organizimin e ekzekutimit tĂ« pandĂ«rprerĂ« tĂ« njĂ« grupi instrukcionesh, pa ndĂ«rprerje dhe duke konfirmuar rezultatin e instrukciones sĂ« fundit nĂ« grup. NĂ« thelb ofrohet njĂ« mjet pĂ«r ekzekutimin shumĂ« tĂ« shpejtĂ« atomik tĂ« operacioneve, tĂ« cilat nĂ« rast ndĂ«rprerjeje nga njĂ« thread tjetĂ«r, pastrohen dhe pĂ«rpunohet njĂ« pĂ«rpjekje tjetĂ«r pĂ«r ekzekutim.
- ĂshtĂ« shtuar njĂ« lidhje simbolike /usr/bin/ld.so.
- ĂshtĂ« siguruar ndĂ«rtimi default i tĂ« gjitha skedave ekzekutivĂ« tĂ« programeve tĂ« brendshme dhe testit nĂ« mĂ«nyrĂ«n PIE (ekzekutiv i pavarur nga pozita). PĂ«r tĂ« çaktivizuar kĂ«tĂ« sjellje Ă«shtĂ« parashikuar opsioni "âdisable-default-pie".
- Për Linux është shtuar cilësimi glibc.malloc.hugetlb, që lejon kalimin e realizimit të malloc për të përdorur thirrjen sistemore madvise me flamurin MADV_HUGEPAGE për mmap dhe sbrk ose për të përdorur drejtpërdrejt faqet e mëdha të memories përmes përcaktimit të flamurit MAP_HUGETLB në thirrjet mmap. Në rastin e parë, mund të arrihet rritje e performancës nëse Transparent Huge Pages përdoren në mënyrën madvise, ndërsa në rastin e dytë ofrohet mundësia për përdorimin e faqeve të mëdha të rezervuara nga sistemi (Huge Pages).
- ĂshtĂ« shtuar funksioni _dl_find_object, i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« shtuar informacion mbi zhvillimin e katĂ«rkĂ«ndshit tĂ« thirrjeve (unwind).
- ĂshtĂ« shtetur mbĂ«shtetje pĂ«r arkitekturĂ«n OpenRISC (or1k-linux-gnu) nĂ« modin e pĂ«rpunimit programatik tĂ« operacioneve me pikatore tĂ« lĂ«ngshme (soft-float). PĂ«r funksionimin e portit kĂ«rkohen binutils 2.35, GCC 11, dhe bĂ«rthama Linux 5.4.
- është shtuar flamuri i ndërtimit "--with-rtld-early-cflags", i cili lejon specifikimin e flamurëve shtesë të kompilimit që përdoren gjatë ndërtimit të kodit fillestar për lidhjen dinamike.
- Për platformën Linux është shtuar funksioni epoll_pwait2, i cili dallon nga epoll_wait duke përcaktuar një kohë të pritur me saktësi nanoseconds.
- ĂshtĂ« shtuar funksioni posix_spawn_file_actions_addtcsetpgrp_np, i cili eliminon kushtet e garĂ«s kur konfigurohet terminali kontrollues pĂ«r procesin e ri.
- Për aplikacionet e kompiluar me Glibc dhe GCC 12+, është implementuar regjimi i mbrojtjes "_FORTIFY_SOURCE=3", i cili identifikon potencialet e tejkalimeve të tamponëve gjatë ekzekutimit të funksioneve të stringut të përcaktuara në skedarin header string.h. Dallimi nga regjimi "_FORTIFY_SOURCE=2" qëndron në verifikime të tjera shtesë, të cilat potencialisht mund të çojnë në zvogëlim të performancës.
- ĂshtĂ« ndĂ«rprerĂ« mbĂ«shtetje pĂ«r zgjerimet Intel MPX (Memory Protection Extensions), tĂ« pĂ«rdorura pĂ«r verifikimin e treguesve nĂ« respektimin e kufijve tĂ« zonave tĂ« memories (kjo teknologji nuk u pĂ«rhap dhe tashmĂ« Ă«shtĂ« hequr nga GCC dhe LLVM).
- Mekanizmi prelink dhe variablat e mjedisit të lidhura LD_TRACE_PRELINKING dhe LD_USE_LOAD_BIAS shpallen të vjetra dhe do të hiqen në versionin e ardhshëm.
Identifikuar dobësi:
- CVE-2022-23218, CVE-2022-23219 â tepricĂ« buffer nĂ« funksionet svcunix_create dhe clnt_create, e shkaktuar nga kopjimi i pĂ«rmbajtjes sĂ« parametrave me emrin e skedarit nĂ« stack pa kontrollin e madhĂ«sisĂ« sĂ« tĂ« dhĂ«nave tĂ« kopjuara. PĂ«r aplikacionet e ndĂ«rtuara pa mbrojtje tĂ« stack-ut dhe qĂ« pĂ«rdorin protokollin 'unix', kjo cenueshmĂ«ri mund tĂ« çojĂ« nĂ« ekzekutimin e kodit nga njĂ« sulmues gjatĂ« pĂ«rpunimit tĂ« emrave tĂ« skedarĂ«ve shumĂ« tĂ« gjatĂ«.
- CVE-2021-3998 â cenueshmĂ«ri nĂ« funksionin realpath(), e shkaktuar nga kthimi i njĂ« vlerĂ« tĂ« pasaktĂ« nĂ«n kushtet e caktuara, qĂ« pĂ«rmban tĂ« dhĂ«na tĂ« papastruara nga stack-u. PĂ«r programin SUID-root fusermount, kjo cenueshmĂ«ri mund tĂ« pĂ«rdoret pĂ«r tĂ« marrĂ« informacion konfidencial nga memoria e procesit, si pĂ«r shembull informacion mbi treguesit.
- CVE-2021-3999 â tepricĂ« buffer njĂ«-byte nĂ« funksionin getcwd(). Problemi shkaktohet nga njĂ« gabim qĂ« Ă«shtĂ« i pranishĂ«m qĂ« nga viti 1995. PĂ«r tĂ« shkaktuar tepricĂ«n Ă«shtĂ« e mjaftueshme tĂ« kryhet thirrja chdir() pĂ«r katalogun '/' nĂ« njĂ« hapĂ«sirĂ« emĂ«rimi tĂ« veçantĂ«.
Burimi: opennet.ru
