Release of the system library Glibc 2.35

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 és fejlécekben olyan függvények és makrók valósultak meg, amelyek a kimenetet szűkebb típusra kerekítik: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN és fMfmafNx. A függvények a TS 18661-1:2014, TS 18661-3:2015 specifikációkban szerepelnek, és bekerültek a jövőbeli ISO C2X C-standart tervezetébe.
  • A és fejlécekben olyan függvények és makrók valósultak meg, amelyek a lebegőpontos számok minimumának és maximumának meghatározására szolgálnak float, long double, _FloatN és _FloatNx típusokkal, a IEEE 754-2019 specifikációban leírtak szerint, és bekerültek a jövőbeli ISO C2X C-standart tervezetébe: fmaximum, fmaximum_num, fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • A fejlécekben hozzáadták az egyes pontosságú lebegőpontos számok állandóit: 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.
  • 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

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster