PĂ€rast kuue kuu arendustööd on vĂ€lja antud GNU C Library (glibc) 2.35 sĂŒsteemiraamatukogu vĂ€ljaanne, mis jĂ€rgib tĂ€ielikult ISO C11 ja POSIX.1-2017 standardite nĂ”udeid. Uue versiooni koosseisu kuuluvad parandused 66 arendajalt.
Glibc 2.35 elluviidud muudatustest vÔib esile tÔsta:
- Lisatud on «C.UTF-8» lokaali tugi, mis hÔlmab sorteerimisreegleid kÔikide Unicode-koodide jaoks, kuid hÔivatud ruumi sÀÀstmiseks on see piiratud ASCII vahemike kasutamisega fnmatch, regexec ja regcomp funktsioonides. Lokaal vÔtab umbes 400 KB, millest 346 KB moodustavad Unicode'i LC_CTYPE andmed, ja vajab eraldi installimist (ei ole glibc sisse ehitatud).
- Koodide andmed, sĂŒmbolitĂŒĂŒpide teave ja transliteratsiooni tabelid on uuendatud, et toetada Unicode 14.0.0 spetsifikatsiooni.
- Failides <math.h> ja <tgmath.h> on rakendatud funktsioonid ja makrod, mis ĂŒmardavad tulemuse kitsamale tĂŒĂŒbile: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN ja fMxfmafNx. Funktsioonid on kirjeldatud spetsifikatsioonides TS 18661-1:2014, TS 18661-3:2015 ja need on lisatud tulevases C-standardis ISO C2X.
- Failide <math.h> ja <tgmath.h> funktsioonid ja makrod, mis leiduvad IEEE 754-2019 spetsifikatsioonis, rakendavad uute ujuvdotsentide leidmise meetodeid, sealhulgas jÀrgmist: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num. Need on lisatud tulevasse C keele ISO C2X standardisse.
- Failides <math.h> on lisatud ujuvdotsentide tÀpsuse konstandid: 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 ja M_SQRT1_2f.
- Faili <tgmath.h> on funktsioonile exp10 lisatud vastavad makrod, mis ei ole seotud kindlate tĂŒĂŒpidega.
- Failis <stdio.h> on lisatud makro _PRINTF_NAN_LEN_MAX, mille pakkus vÀlja ISO C2X standardi mustand.
- printf funktsioonide perekonda on lisatud formaadispecificaatorid â%bâ ja â%Bâ, et vĂ€ljendada tĂ€isarve binaarses esitluses.
- DĂŒnaamilise sidumise sĂŒsteemis on rakendatud uus DSO sorteerimisalgoritm, mis kasutab sĂŒgavusi otsingu meetodit (DFS) jĂ”udlusprobleemide lahendamiseks tsĂŒkliliste sĂ”ltuvuste töötlemisel. DSO sorteerimisalgoritmi valimiseks on ette nĂ€htud parameeter glibc.rtld.dynamic_sort, millele vĂ”ib anda vÀÀrtuse â1â, et naasta vanale algoritmile.
- ABI-sse on lisatud tugi uuele funktsioonile â__memcmpeqâ, mida kompilaatorid kasutavad âmemcmpâ optimeerimise jaoks, juhul kui selle funktsiooni tagastatud vÀÀrtust kasutatakse ainult operatsiooni lĂ”petamise oleku kontrollimiseks.
- Lisatud on automaatse niitide registreerimise toetus, kasutades sĂŒsteemikĂ”net rseq (taasalustatavad jadad), mis on saadaval alates Linuxi kernelist 4.18. SĂŒsteemikĂ”ne rseq vĂ”imaldab korraldada katkestusteta grupi kĂ€skude tĂ€itmise, mida ei katkestata ning mis kinnitab tulemuse viimasest kĂ€sklusest grupis. Sisuliselt pakutakse vahendit vĂ€ga kiireks aatomseks operatsioonide tĂ€itmiseks, mis katkestamise korral teiste niitide poolt puhastatakse ja katsetatakse uuesti.
- Lisatud sĂŒmboolne link /usr/bin/ld.so.
- Tagatud on vaikimisi kogumine kĂ”igi tĂ€idesaatvate failide sisseehitatud programmide ja testkomplekti jaoks PIE (position independent executable) reĆŸiimis. Selle kĂ€itumise keelamiseks on ette nĂ€htud valik ââdisable-default-pieâ.
- Linuxile on lisatud seade glibc.malloc.hugetlb, mis vĂ”imaldab vahetada malloc'i rakenduse sĂŒsteemikĂ”ne madvise kasutamisele lipuga MADV_HUGEPAGE mmap'i ja sbrk'i jaoks vĂ”i otse kasutada suuri mĂ€lulehti, mÀÀrates mmap'i kĂ”nedes lipu MAP_HUGETLB. Esimesel juhul voidaan saavutada jĂ”udluse paranemine, kui lĂ€bipaistvad suured lehed töötavad madvise reĆŸiimis, ja teisel juhul pakutakse vĂ”imalust kasutada sĂŒsteemi reserveeritud suuri lehti (Huge Pages).
- Lisatud funktsioon _dl_find_object, mida saab kasutada vÀljakutsuvate vÀltimisinformatsioonide lisamiseks.
- Lisatud tugi OpenRISC (or1k-linux-gnu) arhitektuuri jaoks pehmete punktide operatsioonide tarkvara töötlemise reĆŸiimis. Porti tööks on vajalik binutils 2.35, GCC 11 ja Linuxi tuum 5.4.
- Lisatud on kogumisflagg «âwith-rtld-early-cflags», millega saab mÀÀrata tĂ€iendavad kompileerimislippud, mida kasutatakse algkoodi koostamisel dĂŒnaamiliseks lingiks.
- Linuxi platvormile on lisatud funktsioon epoll_pwait2, mis erineb epoll_wait'ist, pakkudes ajavahemikku nanosekundi tÀpsusega.
- Lisatud on funktsioon posix_spawn_file_actions_addtcsetpgrp_np, mis kÔrvaldab vÔistlusolukorrad uue protsessi juhtterminaali seadmisel.
- Glibc ja GCC 12+ abil kompileeritavatele rakendustele on rakendatud kaitsereĆŸiim «_FORTIFY_SOURCE=3», mis tuvastab vĂ”imalikke puhverĂŒlevoolu olukordi stringifunktsioonide kĂ€itamisel, mis on mÀÀratletud string.h pĂ€ise failis. Erinevus reĆŸiimist «_FORTIFY_SOURCE=2» seisneb tĂ€iendavates kontrollides, mis vĂ”ivad potentsiaalselt vĂ€hendada jĂ”udlust.
- LÔpeta Intel MPX (Memory Protection Extensions) laienduste toetamine, mida kasutati osutite mÀlupiiride jÀrgimise kontrollimiseks (antud tehnoloogia ei saanud levikuks ja on juba GCC-st ja LLVM-ist eemaldatud).
- Prelink mehhanism ja sellega seotud keskkonnamuutujad LD_TRACE_PRELINKING ja LD_USE_LOAD_BIAS kuulutatakse vananenuks ja need eemaldatakse jÀrgmises versioonis.
Turbeteated:
- CVE-2022-23218, CVE-2022-23219 â puhverserveri ĂŒlevool funktsioonides svcunix_create ja clnt_create, mis on pĂ”hjustatud failinime parameetri sisu kopeerimisest virna ilma kopeeritavate andmete suuruse kontrollimiseta. Rakendustes, mis on koostatud ilma virnaga kaitseta ja kasutavad «unix» protokolli, vĂ”ib see haavatavus viia rĂŒndaja koodi tĂ€ideviimiseni vĂ€ga pikkade failinimede töötlemisel.
- CVE-2021-3998 â haavatavus funktsioonis realpath(), mis on pĂ”hjustatud teatud tingimustel vale, puhastamata jÀÀkandmeid virnast tagastamisest. SUID-root programmi fusermount puhul vĂ”ib haavatavust kasutada konfidentsiaalsete andmete saamiseks protsessi mĂ€lust, nĂ€iteks nĂ€idikutest.
- CVE-2021-3999 â ĂŒhesisekohaline puhverserveri ĂŒlevool funktsioonis getcwd(). Probleem on pĂ”hjustatud veast, mis on esinenud alates 1995. aastast. Ălevoolu tekitamiseks piisab, kui eraldi mountimiskeskkonnas kutsuda chdir() katalooge «/».
Allikas: opennet.ru
