Hat hónapnyi fejlesztés után megjelent a GNU C Library (glibc) 2.34 rendszerkönyvtár új kiadása, amely teljes mértékben megfelel az ISO C11 és POSIX.1-2017 szabványok követelményeinek. Az új kiadás tartalmaz javításokat 66 fejlesztőtől.
A Glibc 2.34-ben megvalósított fejlesztések közül kiemelhető:
- A libc alapjába integrálták a libpthread, libdl, libutil és libanl könyvtárakat, így ezek alkalmazásokban való használata ezentúl nem igényli a -lpthread, -ldl, -lutil és -lanl flag-ek használatát. Elkészítették a libresolv libc-be való integrálásának előkészítését. Az integráció lehetővé teszi a glibc frissítési folyamatának egységesebb végrehajtását és egyszerűsíti a futási idő megvalósítását. A régi glibc verziókkal összegyűjtött alkalmazásokkal való visszamenőleges kompatibilitás biztosítása érdekében heurisztikus könyvtárak állnak rendelkezésre. A glibc struktúrák és funkciók számának bővítése miatt elképzelhető, hogy problémák merülnek fel azokban az alkalmazásokban, amelyek névütközést mutatnak az eddig még nem használt libpthread, libdl, libutil, libresolv és libanl könyvtárakkal.
- Lehetőség nyílt a 64 bites time_t típus használatára olyan konfigurációkban, ahol hagyományosan a 32 bites time_t típust használták. Ilyen konfigurációkban, például x86 rendszereken, az alapértelmezett időpont egyelőre még mindig a 32 bites time_t, azonban ezt a viselkedést mostantól a „_TIME_BITS” makró segítségével meg lehet változtatni. Ez a lehetőség csak olyan rendszerekre vonatkozik, amelyek Linux kernelje legalább 5.1-es verziójú.
- Hozzáadták a _Fork függvényt, ami a fork függvény helyettesítője, és megfelel az „async-signal-safe” követelményeknek, azaz biztonságosan hívható jelek kezelőiből. A _Fork végrehajtása során minimális környezetet alakítanak ki, amely elegendő ahhoz, hogy hívni lehessen a jelek kezelőiben használt függvényeket, mint a raise és execve, anélkül, hogy olyan lehetőségeket használnának, amelyek megváltoztathatják a zárolásokat vagy a belső állapotot. A _Fork hívását egy jövőbeli POSIX szabvány verzióban fogják definiálni, de egyelőre a GNU bővítményei közé tartozik.
- Linux platformra megvalósították az execveat függvényt, amely lehetővé teszi egy végrehajtható fájl indítását egy nyitott fájldeszkriptorból. Az új funkciót az fexecve hívás megvalósításában is használják, amely nem igényli a /proc álváltozatának bekapcsolását a futtatás során.
- Hozzáadva a timespec_getres függvény, amely az ISO C2X szabvány tervezetében van meghatározva, és kiegészíti a timespec_get függvényt a POSIX clock_getres függvényhez hasonló lehetőségekkel.
- Hozzáadva a close_range() függvény, amely lehetővé teszi a folyamat számára, hogy egyszerre bezárjon egy teljes tartományt a megnyitott fájlleírókból. Ez a függvény elérhető a legalább 5.9-es Linux kernel verziójú rendszereken.
- Hozzáadva a closefrom és a posix_spawn_file_actions_addclosefrom_np függvények, amelyek lehetővé teszik, hogy egyszerre bezárják az összes fájlleírót, amelynek száma nagyobb vagy egyenlő a megadott értékkel.
- A „_DYNAMIC_STACK_SIZE_SOURCE” és „_GNU_SOURCE” módokban a PTHREAD_STACK_MIN, MINSIGSTKSZ és SIGSTKSZ értékek már nem állandók, így támogatják a dinamikus méretű regiszterhalmazokat, például az ARM SVE kiterjesztés által biztosítottakat.
- A linkerhez hozzáadva a „—list-diagnostics” opció, amely információt biztosít az IFUNC (indirekt függvény) meghatározásával és a glibc-hwcaps almappa kiválasztásával kapcsolatos műveletekről.
- Megvalósítva a __STDC_WANT_IEC_60559_EXT__ makrót, amely a ISO C2X szabvány „F” kiegészítésében meghatározott függvények meglétének ellenőrzésére szolgál.
- Powerpc64* rendszerekhez megjelenik a „—disable-scv” opció, amely lehetővé teszi a glibc összeszerelését az scv utasítás támogatása nélkül.
- A gconv-modules fájlban csak a gconv alap moduljainak minimális készlete maradt, a többi átkerült egy kiegészítő fájlba, a gconv-modules-extra.conf-ba, amely a gconv-modules.d könyvtárban található.
- Linux platformra bevezetésre került a glibc.pthread.stack_cache_size paraméter, amely a pthread stack cache méretének beállítására használható.
- Elavultként bejelentve az inet_neta függvény az <arpa/inet.h> fejlécfájlban, valamint különféle ritkán használt függvények az <resolv.h>-ból (dn_count_labels, fp_nquery, fp_query, fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, p_time, p_type, putlong, putshort, res_hostalias, res_isourserver, res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, sym_ston) és az <arpa/nameser.h>-ból (ns_datetosecs, ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, ns_sprintrr, ns_sprintrrf, ns_subdomain). Ezek helyett javasolt a DNS kezelésére különálló könyvtárak használata.
- Elavultként bejelentették a pthread_mutex_consistent_np, thread_mutexattr_getrobust_np, pthread_mutexattr_setrobust_np és pthread_yield függvényeket, helyettük a pthread_mutex_consistent, thread_mutexattr_getrobust, thread_mutexattr_setrobust és sched_yield használata ajánlott.
- A szimbolikus linkek használata megszűnt a megosztott objektumok Glibc verzióhoz való kötésére. Az ilyen objektumokat most már tényleges fájlként telepítik (például a libc.so.6 most fájl, nem pedig hivatkozás a libc-2.34.so-ra).
- Alapértelmezés szerint a malloc hibakeresési lehetőségei, mint a MALLOC_CHECK_ (glibc.malloc.check), mtrace() és mcheck() le vannak tiltva, és egy külön könyvtárba, a libc_malloc_debug.so-ba kerültek, ahova az elavult malloc_get_state és malloc_set_state függvények is átkerültek.
- Linux alatt a shm_open és sem_open függvények használatához most már szükséges a /dev/shm eszköz megléte.
- Sebezhetőségek kiküszöbölve:
- CVE-2021-27645: a nscd (nameserver caching daemon) folyamat összeomlása a free függvény dupla hívása miatt, amikor speciális formátumú netgroup-kéréseket kezel.
- CVE-2021-33574: már felszabadított memória területhez való hozzáférés (use-after-free) a mq_notify függvényben, amikor a SIGEV_THREAD értesítési típust használják egy olyan szállítóra, amelyhez alternatív CPU lekötési maszk van beállítva. A probléma összeomlást okozhat, de más támadási lehetőségek is fennállnak.
- CVE-2021-35942: a wordexp függvény paraméterének méretének túlcsordulása alkalmazásösszeomláshoz vezethet.
Forrás: opennet.ru
