Hat hónapos fejlesztés után megjelent a GNU C Library (glibc) 2.35 rendszerkönyvtár, amely teljes mértékben megfelel az ISO C11 és POSIX.1-2017 szabványok követelményeinek. Az új kiadás 66 fejlesztő javítását tartalmazza.
A Glibc 2.35-ben végrehajtott fejlesztések közül néhány:
- Hozzáadva a "C.UTF-8" területi beállítás támogatása, amely tartalmazza az összes Unicode kódpont rendezési szabályait, de helytakarékosság érdekében korlátozza az ASCII tartományok használatát az fnmatch, regexec és regcomp függvényekben. A területi beállítás körülbelül 400 KB-ot foglal el, amelyből 346 KB az Unicode LC_CTYPE adata, és külön telepítést igényel (nincs beépítve a Glibc-be).
- A kódolási adatok, a karaktertípus-információk és az átírási táblázatok frissítésre kerültek, hogy támogassák a Unicode 14.0.0 specifikációt.
- BE És Olyan függvények és makrók kerültek megvalósításra, amelyek szűkebb típusra kerekítik az eredményt: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfmafNx, fMxfmafN és fMxfmafNx. Ezeket a függvényeket a TS 18661-1:2014 és TS 18661-3:2015 specifikációk írják le, és bekerültek a jövőbeli ISO C2X C szabvány tervezetébe.
- BE És Az IEEE 754-2019 specifikációban leírt és a jövőbeli ISO C2X C-szabvány tervezetéhez hozzáadott float, long double, _FloatN és _FloatNx típusú lebegőpontos számok minimumának és maximumának megkereséséhez szükséges függvények és makrók implementálásra kerültek: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
- BE Hozzáadott konstansok az egyszeres pontosságú lebegőpontos számokhoz: 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 és M_SQRT1_2f.
- A header fájl exp10 függvényeihez Hozzáadva a megfelelő makrók, amelyek nem kötődnek adott típusokhoz.
- BE Hozzáadva az ISO C2X szabványtervezetben javasolt _PRINTF_NAN_LEN_MAX makró.
- A printf függvénycsalád mostantól rendelkezik a "%b" és "%B" formátumleírókkal az egész számok bináris ábrázolásban történő kinyomtatásához.
- A dinamikus csatolási rendszer egy új DSO rendezési algoritmust valósít meg, amely mélységi keresést (DFS) használ a ciklikus függőségek kezelésekor felmerülő teljesítményproblémák kezelésére. A glibc.rtld.dynamic_sort paraméterrel választható ki a DSO rendezési algoritmus. Az „1” értékre állítása visszaállítja a régi algoritmust.
- Az ABI mostantól támogatja a '__memcmpeq' új függvényt, amelyet a fordítók a 'memcmp' használatának optimalizálására használnak, amikor a függvény visszatérési értékét csak egy művelet befejezési állapotának ellenőrzésére használják.
- Hozzáadva a kernel óta biztosított rseq (újraindítható szekvenciák) rendszerhívással történő automatikus szálregisztráció támogatása. Linux 4.18. Az rseq rendszerhívás lehetővé teszi egy utasításcsoport folyamatos, megszakítás nélküli végrehajtását, és a csoport utolsó utasításának eredményének megerősítését. Lényegében a műveletek nagyon gyors, atomi végrehajtását teszi lehetővé, amelyek, ha egy másik szál megszakítja őket, törlődnek, és újrapróbálkoznak.
- Hozzáadva a /usr/bin/ld.so szimbolikus link.
- Az összes firmware futtatható fájl és a tesztcsomag mostantól alapértelmezés szerint pozíciófüggetlen futtatható (PIE) módban épül fel. A „--disable-default-pie” opcióval letiltható ez a viselkedés.
- mert Linux Hozzáadtunk egy glibc.malloc.hugetlb beállítást, amely lehetővé teszi a malloc implementáció átkapcsolását úgy, hogy a madvise rendszerhívást használja a MADV_HUGEPAGE jelzővel az mmap és sbrk esetében, vagy közvetlenül használjon hatalmas memórialapokat a MAP_HUGETLB jelző megadásával az mmap hívásokban. Az előbbi beállítás teljesítménynövekedést tesz lehetővé átlátszó hatalmas memórialapok használatakor madvise módban, míg az utóbbi beállítás a rendszer által fenntartott hatalmas memórialapok használatát teszi lehetővé.
- Hozzáadva a _dl_find_object függvény, amellyel letekerhetőek a részletek.
- Hozzáadva a támogatás az OpenRISC architektúrához (or1k-linux-gnu) soft-float módban. Ehhez a porthoz binutils 2.35, GCC 11 és a kernel szükséges. Linux 5.4.
- Hozzáadott egy "--with-rtld-early-cflags" fordítási jelzőt, amely lehetővé teszi további fordítási jelzők megadását a dinamikus linkelés kezdeti kódjának építésekor.
- Platformhoz Linux Hozzáadva az epoll_pwait2 függvény, amely az epoll_wait függvénytől abban különbözik, hogy nanoszekundumos pontossággal határozza meg az időtúllépést.
- Hozzáadva a posix_spawn_file_actions_addtcsetpgrp_np függvény a versenyhelyzetek kiküszöbölésére, amikor a vezérlő terminált beállítjuk egy új folyamathoz.
- A Glibc-vel és GCC 12+-szal fordított alkalmazásokhoz a "_FORTIFY_SOURCE=3" védelmi mód került megvalósításra. Ez a mód a string.h fejlécfájlban definiált karakterláncfüggvények végrehajtásakor észleli a lehetséges puffertúlcsordulásokat. Ez a "_FORTIFY_SOURCE=2" módtól abban különbözik, hogy további ellenőrzéseket vezet be, amelyek potenciálisan teljesítményromláshoz vezethetnek.
- Az Intel MPX (Memory Protection Extensions) támogatása, amely a mutatók memóriahatároknak való megfelelésének ellenőrzésére szolgál, megszűnt (ez a technológia nem terjedt el széles körben, és már eltávolították a GCC-ből és az LLVM-ből).
- Az előcsatolási mechanizmus és a hozzá tartozó LD_TRACE_PRELINKING és LD_USE_LOAD_BIAS környezeti változók elavultak, és egy későbbi kiadásban eltávolításra kerülnek.
Sebezhetőség javítása:
- CVE-2022-23218, CVE-2022-23219 – puffer túlcsordulás az svcunix_create és clnt_create függvényekben, amelyet egy fájlnév paraméter tartalmának a veremre másolása okozott a másolt adatok méretének ellenőrzése nélkül. A veremvédelem nélkül létrehozott és az "unix" protokollt használó alkalmazások esetében ez a sebezhetőség rosszindulatú kód végrehajtásához vezethet nagyon hosszú fájlnevek feldolgozásakor.
- A CVE-2021-3998 a realpath() függvény egy sebezhetősége, amelyet bizonyos feltételek mellett a veremből származó, nem törölt maradék adatokat tartalmazó érvénytelen érték visszaadása okoz. A SUID-rootolt fusermount program esetében ezt a sebezhetőséget kihasználva érzékeny információk, például pointer információk szerezhetők meg a folyamatmemóriából.
- CVE-2021-3999 — Egybájtos puffer túlcsordulás a getcwd() függvényben. A problémát egy 1995 óta jelen lévő hiba okozza. A túlcsordulás kiváltásához elegendő egy chdir() hívás végrehajtása a "/" könyvtáron egy külön csatolási pont névtérben.
Forrás: opennet.ru
