Hat hónappal a fejlesztési munka után megjelent a GNU C Library (glibc) 2.35 rendszerkönyvtár kiadása, amely teljes mértékben megfelel az ISO C11 és a POSIX.1-2017 szabványok követelményeinek. Az új kiadásban 66 fejlesztő hibajavításai találhatók.
A Glibc 2.35-ben megvalósított fejlesztések közül érdemes megemlíteni:
- Hozzáadták a "C.UTF-8" lokalizáció támogatását, amely tartalmazza az összes Unicode-kódra vonatkozó rendezési szabályt, de a helytakarékosság érdekében az ASCII-tartományokra korlátozva a fnmatch, regexec és regcomp funkciókban. A lokalizáció körülbelül 400 KB helyet foglal el, amelyből 346 KB az LC_CTYPE adatai Unicode-hoz, és külön telepítést igényel (nem része a Glibc-nak).
- A kódolásokkal kapcsolatos adatok, a karaktertípusok információi és a transliterációs táblázatok frissítve lettek, hogy támogassák a Unicode 14.0.0 specifikációt.
- A
- A
- A
- Az exp10 függvényekhez kapcsolódó makrókat adtak hozzá a fejlécekhez, amelyek nincsenek konkrét típusokhoz kötve.
- A fejlécekhez hozzáadták az _PRINTF_NAN_LEN_MAX makrót, amelyet az ISO C2X szabvány tervezetében javasoltak.
- A printf családba tartozó függvényekhez hozzáadták a " %b " és " %B " formátum-specifikátorokat, amelyek egész számokat bináris reprezentációban adnak vissza.
- A dinamikus kötési rendszerben egy új DSO rendezési algoritmus valósult meg, amely mélységi keresési (DFS) módszert alkalmaz a ciklikus függőségek feldolgozása során fellépő teljesítményproblémák kezelésére. A DSO rendezési algoritmus kiválasztására bevezetésre került a glibc.rtld.dynamic_sort paraméter, amelyet "1" értékre állítva lehet visszaállni a régi algoritmusra.
- Az ABI-hez hozzáadva az új '__memcmpeq' funkció támogatása, amelyet a fordítók használnak a 'memcmp' optimalizálására, ha a funkció által visszaadott értéket csak a művelet végrehajtási állapotának ellenőrzésére használják.
- Hozzáadva a szálak automatikus regisztrálásának támogatása az rseq (restartable sequences) rendszerhíváson keresztül, amely a Linux 4.18 kerneltől kezdve érhető el. Az rseq rendszerhívás lehetővé teszi, hogy egy utasításcsoport megszakítás nélküli végrehajtása megtörténjen, és az utolsó utasítás eredménye megerősítésre kerüljön. Ez lényegében egy eszközt biztosít a rendkívül gyors atomikus műveletek végrehajtására, amelyek megszakítás esetén visszavonódnak, és újrakísérlet történik.
- Hozzáadva a szimbolikus link: /usr/bin/ld.so.
- Biztosítva van az összes végrehajtható fájl és a beépített programok, valamint a teszthalmaz alapértelmezett PIE (position independent executable) módban történő fordítása. E viselkedés letiltására a '--disable-default-pie' opció áll rendelkezésre.
- Linuxhoz hozzáadva a glibc.malloc.hugetlb beállítás, amely lehetővé teszi a malloc implementációjának átkapcsolását az madvise rendszerhívás használatára, MADV_HUGEPAGE zászlóval az mmap és sbrk hívásokhoz, vagy közvetlenül a nagy memóriapage-k használatára az MAP_HUGETLB zászló megadásával az mmap hívásokban. Az első esetben teljesítménynövekedés érhető el, ha a Transparent Huge Pages madvise módban használják, míg a második esetben a rendszer által fenntartott nagy oldalak (Huge Pages) használata válik lehetővé.
- Hozzáadva a _dl_find_object funkció, amelyet a hívási verem kibővítésének (unwind) információjának hozzáadására lehet használni.
- Hozzáadva az OpenRISC (or1k-linux-gnu) architektúra támogatása a lebegőpontos műveletek szoftveres kezelésének (soft-float) módjában. A port működéséhez binutils 2.35, GCC 11, és Linux 5.4 kernel szükséges.
- Hozzáadva a '--with-rtld-early-cflags' fordítási zászló, amellyel további fordítási zászlók adhatók meg a dinamikus kötés kezdeti kódjának fordításakor.
- Linux platformhoz hozzáadva az epoll_pwait2 funkció, amely a epoll_wait-hoz képest nano másodperces pontossággal határozza meg a timeout-ot.
- Hozzáadva a posix_spawn_file_actions_addtcsetpgrp_np funkció, amely kizárja a versenyhelyzeteket az új folyamat vezérlő termináljának beállításakor.
- A Glibc és GCC 12+ segítségével lefordított alkalmazások esetén bevezetésre került a „_FORTIFY_SOURCE=3” védelmi mód, amely képes azonosítani a potenciális puffer-túlcsordulásokat a string.h fejlécben meghatározott sztring funkciók végrehajtása során. Az „_FORTIFY_SOURCE=2” móddal szembeni különbség a további ellenőrzésekben rejlik, amelyek potenciálisan teljesítménycsökkenést okozhatnak.
- Megszűnt az Intel MPX (Memória Védelmi Kiterjesztések) kiterjesztések támogatása, amelyeket a memóriahatárok betartásának ellenőrzésére használnak (ez a technológia nem terjedt el, és már eltávolították a GCC-ből és LLVM-ből).
- A prelink mechanizmus és a hozzá kapcsolódó LD_TRACE_PRELINKING és LD_USE_LOAD_BIAS környezeti változók elavultnak nyilvánítva lettek, és a következő kiadásban eltávolításra kerülnek.
Sebezhetőségek kiküszöbölve:
- CVE-2022-23218, CVE-2022-23219 — puffer-túlcsordulás a svcunix_create és clnt_create függvényekben, amely a fájl neve paraméter tartalmának a stackbe való átmásolása során fordul elő, anélkül hogy a másolt adatok méretét ellenőriznénk. A stackvédelemmel nem rendelkező, és a „unix” protokollt használó alkalmazás esetén a sebezhetőség lehetővé teheti egy támadó kódfuttatását nagyon hosszú fájlnevek feldolgozása közben.
- CVE-2021-3998 — sebezhetőség a realpath() függvényben, amely bizonyos körülmények között hibás értéket ad vissza, tisztítatlan maradékadatokat tartalmazva a stackből. A fusermount SUID-root program esetén a sebezhetőség lehetővé teheti bizalmas információk megszerzését a folyamat memóriájából, például a pointerekre vonatkozó információkat.
- CVE-2021-3999 — egypontos puffer-túlcsordulás a getcwd() függvényben. A probléma egy 1995 óta fennálló hibából ered. A túlcsordulás kiváltásához elegendő a chdir() függvény hívása a „/” könyvtárra egy külön névterületen belül.
Forrás: opennet.ru
