Knihovna GNU C je open source, bezplatný a výkonný knihovní software pro libovolnou distribuci GNU / Linux. Je také známý jako Glibc a vyžaduje ho jakýkoli počítačový operační systém typu UNIX. Knihovna GNU C je zodpovědná za definování systémových volání, stejně jako s různými dalšími základními funkcemi, jako je malloc, open, exit, printf atd.
Používá se ve výchozím nastavení ve všech operačních systémech s jádrem Linuxu
Knihovna GNU C je ve výchozím nastavení nainstalována a používána ve všech operačních systémech s jádrem Linuxu, které jsou navrženy tak, aby fungovaly jako hlavní knihovna C v systémech GNU a libovolném jiném operačním systému s jádrem Linuxu.
Navrženo tak, aby bylo přenosné
Glibc je vysoce výkonná knihovna C napsaná zcela v programovacím jazyce C. Je navržen tak, aby byl přenosný, internacionalizovaný a navržený tak, aby podporoval všechny příslušné standardy, včetně POSIX.1-2008 a ISO C11.
Podporuje funkce dobře známých variant UNIXu
Zatímco knihovna GNU C má plně internacionalizované rozhraní, pokouší se podporovat funkce známých UNIX variant, jako jsou BSD a System V, díky svým vestavěným režimům kompatibility.
Začínáme s knihovnou GNU C
Zatímco knihovna GNU C je ve výchozím nastavení nainstalována téměř ve všech operačních systémech GNU / Linux, můžete ji také znovu nainstalovat pomocí zdrojového balíčku distribuovaného na jeho webových stránkách nebo Softoware zdarma. Chcete-li začít, stáhněte a uložte archiv v domovském adresáři.
Rozbalte archiv pomocí nástroje pro správu archivu, otevřete okno terminálu, přejděte na místo, kde byly extrahovány soubory archivu, spusťte příkaz & lsquo; ./ configure & rsquo; příkaz pro konfiguraci programu (viz příkaz & lsquo; / configure - help pro různé možnosti optimalizace).
Potom spusťte příkaz & make; příkaz ke kompilaci knihovny, který může být instalován do systému spuštěním buď "Install install". nebo "sudo make install & rsquo; příkazy, závislé na tom, zda máte root nebo privilegovaný uživatel.
Co je nového v této verzi:
- https://sourceware.org/ml/libc-announce/2018/msg00000.html
Co je nového ve verzi 2.27:
- https://sourceware.org/ml/libc-announce/2018/msg00000.html
Co je nového ve verzi:
- Minimální verze jádra Linuxu, se kterou lze tuto verzi knihovny GNU C používat, je 3.2, s výjimkou i [4567] 86 a x86_64, kde Linuxové jádro verze 2.6.32 nebo pozdější postačí (na architekturách, které již vyžadovaly jádro verze novější než 3.2, zůstávají tyto požadavky nezměněny). Na všech architekturách jsou vyžadovány hlavičky jádra Linuxu 3.2 nebo novější.
- Lokalita pap_AN byla smazána. Toto bylo již dlouhou dobu zastaralé. To bylo nahrazeno pap_AW & amp; pap_CW, oba které byly již dlouho zahrnuty do předchozích verzí.
- Funkce readdir_r a readdir64_r byly zastaralé. Doporučujeme místo toho použít readdir a readdir64.
- Typ "union wait" byl odstraněn. To bylo zastaralé na počátku 90. let a nikdy nebylo součástí POSIXu. Aplikační kód by měl používat typ int namísto "union wait".
- Přidá se nová akce NSS, která usnadní správu velkých distribuovaných systémů. Akce MERGE umožňuje sloučení vzdáleného úložiště uživatelů, jako je LDAP, do místních uživatelských obchodů, jako jsou / etc / groups, s cílem poskytnout snadno použitelné, aktualizované a spravované sady sloučených pověření. Nová akce může být použita konfigurací v souboru /etc/nsswitch.conf: skupina: soubory [SUCCESS = merge] nis Realizuje Stephen Gallagher (Red Hat).
- Odstraněná proměnná __malloc_initialize_hook byla z rozhraní API odstraněna.
- Dlouhá nevyužitá volba localedef --old style byla odstraněna. To neudělalo nic za více než 16 let. Scripty používající tuto možnost mohou bezpečně spustit.
- Následující, další, další, další, další a další jsou přidány do libm. Jsou definovány v TS 18661 a IEEE754-2008. Následující funkce vrátí další zobrazitelnou hodnotu ve směru pozitivního nekonečna a další funkce vrátí další zobrazitelnou hodnotu ve směru negativního nekonečna. V současné době jsou povoleny jako rozšíření GNU.
- Změny týkající se zabezpečení:
- Byla odstraněna zbytečná kopie zásobníku v souboru _nss_dns_getnetbyname_r. Mohlo by to vést k přetečení zásobníku při volání getnetbyname s příliš dlouhým názvem. (CVE-2016-3075)
- Předtím dostal getaddrinfo do zásobníku velké množství adresových dat, a to iv případě, že byla použita oprava pro CVE-2013-4458, což může mít za následek přetečení zásobníku. getaddrinfo nyní používá rozdělení haldy místo toho. Oznámil Michael Petlan. (CVE-2016-3706)
- Globální funkce trpěla přetečením vyrovnávací paměti založenou na zásobníku, když byla volána s příznakem GLOB_ALTDIRFUNC a objevila se dlouhý název souboru. Oznámil Alexander Cherepanov. (CVE-2016-1234)
- Klient Sun RPC UDP mohl vyčerpat veškerý dostupný prostor zásobníku, když byl zaplaven zpracovanými zprávami ICMP a UDP. Oznámený plugin Aldy Hernandez 'alloca pro GCC. (CVE-2016-4429)
- Kód pro správu serveru IPv6 v libresolvu může mít za následek únik paměti pro každý vytvořený podproces, provádí selhání vyhledání názvů a ukončí. Časem by to mohlo vést k odmítnutí služby v důsledku vyčerpání paměti. Nahlásil Matthias Schiffer. (CVE-2016-5417)
- S touto verzí jsou vyřešeny následující chyby:
- [1170] localedata: ne_NP: aktualizovat soubor definice jazyka Nepálčina [3629] manuál: popis stpcpy v souboru string.texi odkazuje na MS-DOG namísto MS-DOS. [10354] libc: posix_spawn použije vfork () ve více případech než v současnosti [11213] localedata: localedata: [6527] malloc: [powerpc] přidání autorských práv do místních souborů [12143] localedata: chr_US: nové Cherokee locale [12450] localedata: sgs_LT: new locale [12676] localedata: ln_CD: new locale [13237] localedata: LC_ADDRESS.country_name: data [13304] matematika: fma, fmaf, fmal produkují špatné výsledky [14259] build: --localedir arg to configure je ignorován [14499] nptl: Posix_spawn vyvolá manipulátory atfork / [14750] libc: Stav závodu v posix_spawn vfork použití vs manipulátory signálů [14934] localedata: es_CL: špatný první den v chilean locale [15262] localedata: LC_MESSAGES.yesexpr / noexpr: nekonzistentní použití romanization [15263] localedata: LC_MESSAGES.yesexpr / noexpr: nekonzistentní použití 1/0 a +/- [15264] localedata: LC_MESSAGES.[15479] nstal: raise () není asynchronní signál [15479] matematika: strop, podlaha, kulatina a trunc zvýšit nepřesnou výjimku [15578] localedata: kk_KZ: [16137] localedata: [16137] localedata: lv_LV: změna symbolu měny v LC_MONETARY na euro [16742] malloc: stav pleti: pthread_atfork () vyvolané před prvním malloc () má za následek neočekávané zamykání / zablokování [16975] localedata: LC_MESSAGES.yesexpr / noexpr: revize kapitalizace ve všech lokáloch [16983] localedata: postal_fmt neumožňuje% l a% n modifikátory [17565] : pt_PT: špatný (pracovní-) týdenní začátek [17899] matematika: [powerpc] floorl vrací zápornou nulu s FE_DOWNWARD [17950] build: Build with the -msse [18205] localedata: be_BY *: wrong first_weekday and first_workday [18433] : posix_spawn nevrací správně při selhání spuštění [18453] localedata: charmaps / IBM875: nesprávné kódy [18712] řetězec: bity / string2.h nekompatibilní s -O2 -Werror = packed -Wsystem-headers [18896] localedata: he_IL: vylepšení pro měnu [18911] localedata: ro_RO: používá larl opcode na nesprávně označeném symbolu [19056] libc: Deprecate readdir_r [19133] localedata: pt_ *: days & amp; měsíce by měly být malé písmeny v portugalštině [19198] localedata: nl_NL: malé vylepšení pro nizozemské lokality [19257] síť: Net-memory paměti úniku v __res_vinit s IPv6 jmenovateli (CVE-2016-5417) [19269] build: tst-audit4 tc-audit10 selhání s gcc-6 na non avx machine [19400] locale: jazyk chybí v "iso-639.def", triviální oprava v popisu [19431] malloc: deadlock mezi fflush, getdelim a vidlice [ Nesprávná kontrola platnosti deskriptoru souborů v posix_spawn_file_actions_add {19509] dynamically-link: dlsym, dlvsym nehlásí chyby pomocí dlerror při použití RTLD_NEXT [19512] locale: Stale `#ifndef HAVE_BUILTIN_EXPECT 'v` intl / {gettextP , loadinfo}.h '[19534] libc: execle, execlp může používat malloc [19568] localedata: * _CH: Švýcarské lokality mají nekonzistentní začátek týdne [19573] z GB18030 tabulky [19581] localedata: sr_ * date_fmt řetězec obsahuje další řetězec [19583]: SSSE3_Fast_Copy_Backward musí být povolen pro AMD jádro [19592] math: [ldbl-128ibm] ] math: [ldbl-128ibm] truncl nesprávně v non-výchozími režimech zaokrouhlování [19594] math: [ldbl-128ibm] dvojitý rozsah [19602] matematika: [ldbl-128ibm] fmodl manipulace se stejnými argumenty s nízkou částí nula nesprávná [19603] math: [ldbl-128ibm] remainderl, remquol nesprávná manipulace se znaménkem v testy rovnosti [19610] dynamic-link: ldconfig - X odstraní zastaralé symbolické odkazy [19613] libc: s390x (196 bit) makro rozšíření WCOREDUMP a další [19633] locale: strfmon_l uplatňuje globální lokalizaci pro formátování čísel [19642]: Únik paměti v getnameinfo [19648] libc: test-skeleton.c: Nenastavit RLIMIT_DATA [19653] libc: Potenciál pro dereference ukazatele NULL (CWE-476) v glibc-2.22 [19654] math: [x86_64] () v 'tst-fmon.c' & amp; 'tst-numeric.c' [19674] matematika: [ldbl-128ibm] powl nesprávné zachytávání přetečení [19677] math: [ldbl-128ibm] remainderl test rovnosti nesprávný pro nulovou nízkou část [19678] math: [ldbl-128ibm] nextafterl , nexttowardl nesprávný znak nulového výsledku [19679] dynamický odkaz: gcc-4.9.3 Správa výjimek C ++ přerušena kvůli nezměněnému zásobníku [19726] locale: Převedení UCS4LE na INTERNAL s ikonou () neaktualizuje ukazatele a délky v případě chyby . [19727] locale: Převedení z / do UTF-xx s ikonou () neočekává vždy chyby na hodnotách náhrad UTF-16.[19755] nscd: nscd selhání tvrzení v gc [19758] dynamický odkaz: Typo v EXTRA_LD_ENVVARS pro x86-64 [19759] libc: mempcpy by neměl být podtržený [19762] dynamický odkaz: HAS_CPU_FEATURE / HAS_ARCH_FEATURE snadno zneužívat [ 19765] libc: s390 potřebuje optimalizovaný mempcpy [19779] glob: glob: přetečení vyrovnávací paměti s GLOB_ALTDIRFUNC kvůli nesprávnému předpokladu limitu NAME_MAX (CVE-2016-1234) [19783] sestavení: testy nepodporují - -in-test [19787] síť: Chybějící a nesprávné kontroly zkrácení v getnameinfo [19790] matematika: [ldbl-128ibm] nearbyintl nesprávné v režimech bez nastavení [19791] adresy serveru [19792] libc: MIPS: backtrace poskytuje nekonečnou backtrace s makecontext [19822] math: libm.takže instalujte clobbers starou verzi [19825] síť: resolv: send_vc může vrátit neinicializovaná data ve druhé odpovědi na getaddrinfo [19830] síť: nss_dns: by měl zkontrolovat délku RDATA proti délce vyrovnávací paměti [19831] síť: nss_dns: getaddrinfo vrací neinicializovaná data při konfrontaci A / AAAA záznamy o neplatné velikosti [19837] nss: nss_db: Žádné opakování pro některé dlouhé řádky s větším bufferem [19848] matematika: powl (10, n) pro n = -4, -5, -6, -7 je více než 1 ULP [19853] stdio: Tisk IBM dlouhý dvojitý v desítkách s vysokou přesností je někdy nesprávný [19860] build: x86_64: kompilace chyb pro tst-audit10 a tst-auditmod10b [19861] nptl: libpthread IFUNC resolver for fork může způsobit selhání [19862] síť: resolv, nss_dns: Odstranit zbývající protokolování neočekávaných typů záznamů [19865] síť: Selhání tvrzení nebo únik paměti v síti _nss_dns_getcanonname_r [19868]: nss_dns: 19879] síť: nss_dns: Přetečení zásobníku v getnetbyname implementa (19926) dynamický odkaz: S390: fprs / vrs nejsou ukládány / obnovovány při vyřešení symbolů [19925] libc (1990-1999) : termios.h jmenný prostor XCASE [19928] řetězec: memmove-vec-unaligned-erms.S je pomalý s velkou velikostí dat [19929] libc: limits.h jmenný prostor NL_NMAX [19931] stdio: Nevracená paměť vfprintf [19957] libc: klon (CLONE_VM) přístup neplatná nadřazená paměť [19963] localedata: en_IL: ] stdio: stdio.h cuserid namespace [19994] síť: getaddrinfo neobnoví RES_USE_INET6 flag v gethosts [19996] locale: langinfo.h nl_langinfo_l jmenný prostor [20005] stdio: fflush na souboru otevřeném s fmemopen resetuje pozici na 0 [ síť: getaddrinfo: přetečení zásobníku v překladu hostentu (CVE-2016-3706) [20012] stdio: libio: fmemopen připojit selhání režimu [20014] stdio: stdio.h jmenný prostor pro pre-threads POSIX [20017] síť: resolv: namísto gmtime v p_secstodate [20023] libc: fcntl.h časový prostor namespace [20024] math: [x86_64] vektorizovaný sincos trashes síť [20031] zásobníku: nss_hesiod: Přetečení haldy v get_txt_records [20041] time: sys / time.h timespec jmenný prostor [20043] libc: unistd.h chybějící cuserid pro UNIX98 a před [20044] libc: unistd .h chybí pthread_atfork pro UNIX98 [20051] libc: ttyslot v nesprávném záhlaví za špatných podmínek [20054] libc: gethostname nebyl deklarován pro XPG4 [20055] libc: termios.h chybí tcgetsid pro XPG4 [20072] dynamický odkaz: x86 init_cpu_features se nazývá dvakrát ve statickém spustitelném souboru [20073] libc: sys / stat.h jmenný prostor fchmod [20074] libc: stdlib.h jmenný prostor rand_r [20076] .h chybí S_IFSOCK, S_ISSOCK pro XPG4 [20094] libc: stdlib.h by neměl deklarovat grantpt, ptsname, unlockpt pro XPG3 [20111] libc: struct sockaddr_storage nemůže být agregátně zkopírován [20112] síť: sunrpc: [20119] libc: Chybná maska pro typ úrovní procesorů z CPUID [20139] dynamický odkaz: Horní část v jazyce RPC clntudp_call (CVE-2016-4429) zm je nulován, pokud je Glibc vybudován s AS nepodporujícím AVX512 [20151] math: [ldbl-128 / ldbl-128ibm] j0l, j1l, y0l, y1l návrat sNaN pro argument sNaN [20153] math: [ldbl-128ibm] sqrtl (sNaN) vrátí sNaN [20156] matematika: [ldbl-128ibm] ceill, rintl apod. vrátí sNaN pro argument sNaN [20157] math: [powerpc] fabsl (sNaN) owerpc] strop, rint atd.návrat sNaN pro sNaN vstup [20178] libc: posix_spawn {p} neměl zavolat na výstup [20191] stdio: libio: vtables hardening [20195] string: Detekce FMA4 vyžaduje spuštění CPUID s registrem eax = 0x80000001 [20198] libc: quick_exit incorrectly destroys Objekty C ++ 11. [20202] matematika: [i386 / x86_64] nextafterl nesprávné inkrementující záporné podnormální [20212] matematika: acos (sNaN) vrátí sNaN [20213] math: asin (sNaN) vrátí sNaN [20214] síť: Linux header sync with linux / in6. h a ipv6.h znovu.[20218] math: [i386] asinhl (sNaN) vrací sNaN [20219] matematika: [i386] atanhl (sNaN) returns sNaN [20222] vrací sNaN [20225] matematika: ldexp, scalbn, scalbln návrat sNaN pro sNaN vstup [20226] matematika: [i386 / x86_64] expl, exp10l, expm1l návrat sNaN pro sNaN vstup [20227] math: [i386 / x86_64] ) vrátí sNaN [20228] matematika: [i386 / x86_64] log10l (sNaN) vrací sNaN [20229] math: [i386 / x86_64] log1pl (sNaN) vrací sNaN [20232] expm1l (sNaN) returns sNaN [20233] matematika: [ldbl-128ibm] expm1l (sNaN) vrací sNaN [20234] matematika: [ldbl-128ibm] log1pl (sNaN) vrací sNaN [ 20237] ns: nss_db: get * segfaults bez předcházející množiny * ent [20240] math: modf (sNaN) vrací sNaN [20248] libc: ) vrací sNaN [20252] matematika: atan2 (sNaN, qNaN) nezvyšuje "neplatný" [20255] ma th: [i386] fdim, fdimf návrat s nadměrným rozsahem a přesnost / dvojité zaokrouhlení [20256] matematika: [i386 / x86_64] fdiml vrátí sNaN pro vstup sNaN [20260] string: ../sysdeps/x86/bits/string.
h: 1092: 3: chyba: dolní index matice je pod hranicemi pole [20262] nis: _nss_nis_initgroups_dyn vždy vrátí NSS_STATUS_NOTFOUND [20263] nptl: robustní mutex deadlocks, / linux) [20277] libc: $ dp není inicializován správně v sysdeps / hppa / start.S [20284] malloc: malloc: [20314] nptl: make [4]: *** [/usr/include/stdlib.h] Chyba 1 [20316] localedata: id_ID: Februari namísto Pebruari [20327] string: POWER8 strcccc vrátí nesprávný výsledek [20347] math: Závada: Test: j0_downward (0xap + 0) [20348] libc: FAIL: misc / tst-preadvwritev64 [ {643] [20350] libc: Neexistuje žádný test pro math p {read, write} 64 [20357]: Nesprávný výsledek cos pro 1.5174239687223976 [20384] build: Netestujte libmvec-sincos-avx * achines
Co je nového ve verzi 2.23:
- CVE-2015-7547: glibc getaddrinfo () přetečení vyrovnávací paměti založené na zásobníku - Opraveno na vývojové větvi pro vydání glibc 2.23.
Co je nového ve verzi 2.21:
- Následující chyby jsou vyřešeny v této verzi: 6652, 10672, 12674, 12847, 12926, 13862, 14132, 14138, 14171, 14498, 15215, 15378, 15884, 16009, 16418, 16191, 16469, 16618, 16619, 16657, 16740, 16857, 17192, 17266, 17273, 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17594, 17601, 17608, 17616, 17625, 17630, 17633, 17634, 17635, 17647, 17653, 17657, 17658, 17664, 17665, 17668, 17682, 17702, 17717, 17719, 17722, 17723, 17724, 17725, 17732, 17733, 17744, 17745, 17746, 17747, 17748, 17775, 17777. 17780. 17781. 17782. 17791. 17793. 17796. 17797. 17801. 17803. 17806. 17834. 17844, 17848, 17868, 17869, 17870, 17885, 17892.
- CVE-2015-1472 Za určitých podmínek může wscanf přidělit příliš malou paměť pro argumenty, které mají být skenovány, a přetečení přidělené vyrovnávací paměti. Implementace nyní správně vypočítá požadovanou velikost vyrovnávací paměti při použití malloc.
- Nový algoritmus semaforu byl implementován v obecném kódu C pro všechny stroje. Předcházející realizace vlastní sestavy semaforu byly obtížné odůvodnit nebo zajistit, že jsou bezpečné. Nová verze semaforu podporuje stroje s 64bitovými nebo 32bitovými atomovými operacemi. Nový semaforový algoritmus používá sem_init, sem_open, sem_post, sem_wait, sem_timedwait, sem_trywait a sem_getvalue.
- Přístavu společnosti Altera Nios II přispěl Mentor Graphics.
- Optimalizované implementace strcpy, stpcpy, strncpy, stpncpy, strcmp a strncmp pro powerpc64 / powerpc64le. Realizováno společností Adhemerval Zanella (IBM).
- Přidána podpora pro uzamčení TSX uzamčení pthread mutexes na modulech powerpc32, powerpc64 a powerpc64le. To může zlepšit škálování uzamčení stávajících programů na systémech schopných HTM. Kód elise zámku je povolen pouze s --enable-lock-elision = yes. Také implementace elx lock TSX pro powerpc vygeneruje přerušení transakce na všech systémech, aby se předešlo nežádoucím účinkům mimo transakce.
- Optimalizované implementace strcpy, stpcpy, strchrnul a strrchr pro AArch64. Přispívá společnost ARM Ltd
- Funkce i386 memcpy jsou optimalizovány při nesprávně načteném / uloženém SSE2.
- CVE-2104-7817 Funkce wordexp by mohla ignorovat příznak WRDE_NOCMD za určitých vstupních podmínek, což by vedlo k provedení shellu pro nahrazení příkazu, pokud jej aplikace nevyžádala. Implementace nyní kontroluje WRDE_NOCMD bezprostředně před spuštěním shellu a vrátí chybu WRDE_CMDSUB podle očekávání.
- Funkce typu printf ve stylu CVE-2012-3406 mohou při zpracování formátovacích řetězců s velkým počtem specifikátorů formátu spustit přetečení zásobníku.
- CVE-2014-9402 Implementace nss_dns getnetbyname může být spuštěna do nekonečné smyčky, pokud odpověď DNS obsahuje záznam PTR neočekávaného formátu.
- Minimální verze GCC, kterou lze použít k vytvoření této verze knihovny GNU C, je GCC 4.6. Starší verze GCC a kompilátory jiné než GNU mohou být stále použity ke kompilaci programů pomocí knihovny GNU C.
- Knihovna GNU C je nyní ve výchozím nastavení vytvořena s parametrem -Werror. Toto může být deaktivováno konfigurací pomocí --disable-werror.
- Nové lokalizace: tu_IN, bh_IN, raj_IN, ce_RU.
- Zastaralá funkce sigvec byla odstraněna. Toto bylo původní rozhraní 4.2BSD, které inspirovalo rozhraní POSIX.1, které programy používaly místo 25 let. Ovšem ABI kompatibilita starých binárních souborů pomocí sigvec zůstává neporušená.
- Sloučili gettext 0.19.3 do podadresáře intl. To opravuje budovu s novějšími verzemi bizonů.
- Podpora rozšíření MIPS o32 FPXX, FP64A a FP64 ABI. Původní MIPS o32 hard-float ABI vyžaduje FPU, kde dvojité přesnosti registruje překrývání dvou po sobě jdoucích jednopresných registrů. MIPS32R2 zavedl nový režim FPU (FR = 1), kde dvojité přesné registry rozšíří příslušné jednoprecizní registry, které jsou nekompatibilní s hardwarovým ABI typu hard disk. MIPS SIMD ASE a architektura MIPSR6 vyžadují použití FR = 1, což nutně vyžaduje přechod. Nové rozšíření o32 ABI umožňují uživatelům migrovat v čase od původního o32 ABI až po aktualizovaný o32 FP64 ABI. Pro tento účel dynamický linker nyní sleduje ABI jakéhokoli načteného objektu a ověřuje, že nové objekty jsou kompatibilní. Také budou požadovány přechody režimů a nepodporované objekty budou odmítnuty. Kontroly ABI obsahují jak měkké, tak tvrdé ABI pro floating pro o32, n32 a n64.
Komentáře nebyl nalezen