Glibc 2.35 rendszerkönyvtár kiadás

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áadott támogatás a "C.UTF-8" területi beállításhoz, amely tartalmazza az összes Unicode kód leválogatási szabályait, de a helytakarékosság érdekében az ASCII tartományok használatára korlátozódik az fnmatch, regexec és regcomp függvényekben. A területi beállítás körülbelül 400 KB, amelyből 346 KB LC_CTYPE adat a Unicode számára, és külön telepítést igényel (nem 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.
  • BAN BEN És olyan függvények és makrók valósulnak meg, amelyek az eredményt szűkebb típusra kerekítik: fsqrt, fsqrtl, dsqrtl, ffma, ffmal, dfmal, fMsqrtfN, fMsqrtfNx, fMxsqrtfN, fMxsqrtfNx, fMfmafN, fMfxma, fMfmafN, fMfxma andff A funkciókat a TS 18661-1:2014, TS 18661-3:2015 specifikációk írják le, és hozzáadják a jövőbeni ISO C2X C szabvány tervezetéhez.
  • BAN BEN És implementált függvények és makrók a float, long double, _FloatN és _FloatNx típusú lebegőpontos számok minimumának és maximumának meghatározására, az IEEE 754-2019 specifikációban leírtak és a leendő ISO C2X C szabvány tervezetéhez hozzáadva: fmaximum, fmaximum_num , fmaximum_mag, fmaximum_mag_num, fminimum, fminimum_num, fminimum_mag, fminimum_mag_num.
  • BAN BEN hozzáadott konstansok az egyszeres precíziós 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_2_SQRTf és M_1_FQS.
  • Az exp10 függvényekhez a fejlécfájlban Megfelelő makrók hozzáadva, amelyek nincsenek bizonyos típusokhoz kötve.
  • BAN BEN hozzáadta az ISO C2X szabványtervezetben javasolt _PRINTF_NAN_LEN_MAX makrót.
  • A "%b" és a "%B" formátumspecifikátorok hozzáadva a printf függvénycsaládhoz az egész számok bináris megjelenítésben történő nyomtatásához.
  • A dinamikus összekapcsolási rendszer egy új DSO-rendezési algoritmust valósít meg, amely mélységi keresést (DFS) használ a teljesítményproblémák megoldására a hurkolt függőségek kezelésekor. A DSO rendezési algoritmus kiválasztásához a glibc.rtld.dynamic_sort paraméter javasolt, amelyet „1”-re állítva vissza lehet térni a régi algoritmushoz.
  • Az ABI hozzáadott egy új „__memcmpeq” függvény támogatását, amelyet a fordítók a „memcmp” használatának optimalizálására használnak, ha a függvény által visszaadott értéket csak a művelet befejezési állapotának ellenőrzésére használják.
  • Támogatás hozzáadva a szálak automatikus regisztrálásához a Linux kernel 4.18 óta biztosított rseq (újraindítható sorozatok) rendszerhívás használatával. Az rseq rendszerhívás lehetővé teszi egy utasításcsoport folyamatos végrehajtásának megszervezését, amely nem szakad meg, és az eredményt a csoport utolsó utasításával erősíti meg. Lényegében olyan műveletek nagyon gyors atomi végrehajtásának eszközét kínálja, amelyeket ha egy másik szál megszakít, a rendszer megtisztítja és újra megkísérli.
  • Symlink hozzáadva /usr/bin/ld.so.
  • A beágyazott programok összes végrehajtható fájljának alapértelmezett összeállítása és a tesztkészlet PIE (pozíciófüggetlen végrehajtható) módban biztosított. Ennek a viselkedésnek a letiltásához a „--disable-default-pie” opció áll rendelkezésre.
  • Linux esetén egy glibc.malloc.hugetlb beállítás került hozzáadásra, amely lehetővé teszi a malloc implementáció átkapcsolását a madvise rendszerhívás használatára a MADV_HUGEPAGE jelzővel az mmap és az sbrk számára, vagy a nagy memórialapok közvetlen használatához a MAP_HUGETLB jelző megadásával az mmap-ban hívásokat. Az első esetben teljesítménynövekedés érhető el, ha a Transparent Huge Pages madvise módban kerül felhasználásra, a második esetben pedig a rendszer által fenntartott hatalmas oldalak használatának lehetősége biztosított.
  • Hozzáadva a _dl_find_object függvényt, amely felhasználható a hívásverem feloldási információinak hozzáadására.
  • Támogatás hozzáadva az OpenRISC architektúrához (or1k-linux-gnu) soft-float módban. A porthoz binutils 2.35, GCC 11 és Linux kernel 5.4 szükséges.
  • Hozzáadott egy "--with-rtld-early-cflags" összeállítási jelzőt, amely további fordítási jelzők megadására használható a dinamikus linkelés kezdeti kódjának összeállításakor.
  • A Linux platformhoz hozzáadásra került az epoll_pwait2 függvény, amely eltér az epoll_wait függvénytől azáltal, hogy nanoszekundumos pontossággal időkorlátot ad meg.
  • Posix_spawn_file_actions_addtcsetpgrp_np függvény hozzáadva a versenyfeltételek kiküszöböléséhez, amikor egy vezérlőterminált új folyamathoz állít be.
  • A Glibc és GCC 12+ verzióval fordított alkalmazások esetében a „_FORTIFY_SOURCE=3” védelmi mód kerül megvalósításra, amely észleli a lehetséges puffertúlcsordulást a string.h fejlécfájlban meghatározott karakterlánc-függvények végrehajtásakor. A „_FORTIFY_SOURCE=2” módtól való eltérés a további ellenőrzésekben rejlik, ami potenciálisan a teljesítmény csökkenéséhez vezethet.
  • Megszűnt az Intel MPX (Memory Protection Extensions) támogatása, amely a memóriakorlátok mutatóinak ellenőrzésére szolgál (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őzetes összekapcsolási mechanizmus és a hozzá tartozó LD_TRACE_PRELINKING és LD_USE_LOAD_BIAS környezeti változók elavultak, és egy jövőbeli kiadásban eltávolítják.

    Sebezhetőség javítása:

    • CVE-2022-23218, CVE-2022-23219 – Puffertúlcsordulás az svcunix_create és clnt_create függvényben, amelyet a fájlnév paraméter tartalmának a verembe másolása okoz a másolt adatok méretének ellenőrzése nélkül. A veremvédelem nélkül épített, „unix” protokollt használó alkalmazások esetében a biztonsági rés támadókód futtatásához vezethet nagyon hosszú fájlnevek feldolgozása során.
    • A CVE-2021-3998 a realpath() függvény biztonsági rése, amely bizonyos feltételek mellett a veremből származó tisztítatlan maradványadatokat tartalmazó helytelen értéket ad vissza. A SUID-root fusermount program esetében a sérülékenység felhasználható érzékeny információk beszerzésére a folyamatmemóriából, például mutatókkal kapcsolatos információk beszerzésére.
    • CVE-2021-3999 – Egybájtos puffertúlcsordulás a getcwd() függvényben. A problémát egy 1995 óta jelenlévő hiba okozza. Túlcsordulás előidézéséhez egyszerűen hívja meg a chdir() függvényt a "/" könyvtárban egy külön beillesztési pont névtérben.

    Forrás: opennet.ru

Hozzászólás