Glibc 2.31 rendszerkönyvtár kiadás

Hat hónapos fejlesztés után közzétett rendszerkönyvtár kiadás GNU C könyvtár (glibc) 2.31, amely teljes mértékben megfelel az ISO C11 és POSIX.1-2008 szabványok követelményeinek. Az új kiadás 58 fejlesztő javítását tartalmazza.

A Glibc 2.31-ban megvalósítottak közül fejlesztések megjegyzés:

  • _ISOC2X_SOURCE makró hozzáadva a jövőbeli ISO-szabvány tervezetében meghatározott képességek engedélyezéséhez C2X. Ezek a szolgáltatások a _GNU_SOURCE makró használatakor vagy a gcc-ben a „-std=gnu2x” jelzővel történő építésekor is engedélyezve vannak;
  • A „math.h” fejlécfájlban definiált függvények esetében, amelyek eredményeiket kisebb típusra kerekítik, a megfelelő általános típusú makrókat javasoljuk a „tgmath.h” fájlban, a TS 18661-1:2014 és TS specifikációknak megfelelően. 18661-3: 2015;
  • Hozzáadott pthread_clockjoin_np() függvény, amely megvárja a szál befejezését, figyelembe véve az időtúllépést (ha az időtúllépés a befejezés előtt következik be, a függvény hibát ad vissza). nem úgy mint pthread_timedjoin_np(), a pthread_clockjoin_np()-ben megadható az időzítés típusa az időtúllépés kiszámításához - CLOCK_MONOTONIC (figyelembe veszi a rendszer által alvó üzemmódban töltött időt) vagy CLOCK_REALTIME;
  • A DNS-feloldó mostantól támogatja a trust-ad beállítást az /etc/resolv.conf fájlban és a RES_TRUSTAD jelzőt a _res.options fájlban, ha be van állítva, a DNSSEC jelző kerül továbbításra a DNS-kérésekben AD (hitelesített adatok). Ebben a módban a szerver által beállított AD jelző elérhetővé válik az olyan alkalmazások számára, amelyek olyan függvényeket hívnak meg, mint a res_search(). Alapértelmezés szerint, ha a javasolt beállítások nincsenek beállítva, a glibc nem adja meg az AD jelzőt a kérésekben, és automatikusan törli azt a válaszokban, jelezve, hogy hiányoznak a DNSSEC ellenőrzések;
  • A Glibc működő rendszerhívás-összerendeléseinek létrehozásához már nincs szükség a Linux kernelfejlécfájlok telepítésére. A kivétel a 64 bites RISC-V architektúra;
  • Eltüntetett sebezhetőség CVE-2019 19126-, amely lehetővé teszi a védelem megkerülését
    ASLR a setuid jelzővel rendelkező programokban, és meghatározza a címelrendezést a betöltött könyvtárakban az LD_PREFER_MAP_32BIT_EXEC környezeti változó manipulálásával.

Változások, amelyek megzavarják a kompatibilitást:

  • A totalorder(), totalordermag() és hasonló függvények más lebegőpontos típusokhoz immár elfogadják a mutatókat argumentumként, hogy kiküszöböljék az állapotbeli értékek konvertálására vonatkozó figyelmeztetéseket. Dehogy, a jövőbeli C18661X szabványhoz javasolt TS 1-2 ajánlásai szerint.
    A lebegőpontos argumentumokat közvetlenül átadó meglévő végrehajtható fájlok módosítás nélkül futnak tovább;

  • A régóta elavult stime függvény már nem érhető el a glibc-hez kapcsolt binárisokhoz, és definícióját eltávolították a time.h-ból. A rendszeridő beállításához használja a clock_settime függvényt. A jövőben tervezzük az elavult ftime függvény, valamint a sys/timeb.h fejlécfájl eltávolítását (ftime helyett a gettimeofday vagy a clock_gettime kell használni);
  • A gettimeofday függvény már nem ad át információkat a rendszerszintű időzónáról (ez a szolgáltatás a 4.2-BSD idejében volt releváns, és évek óta elavult). A 'tzp' argumentumot most egy null mutatót kell átadni, és a localtime() függvényt kell használni az időzóna információ megszerzéséhez az aktuális idő alapján. A gettimeofday hívása nullától eltérő 'tzp' argumentummal a tz_minuteswest és tz_dsttime üres mezőket adja vissza az időzóna szerkezetében. Maga a gettimeofday függvény elavult a POSIX alatt (a gettimeofday helyett a clock_gettime javasolt), de nem tervezik eltávolítani a glibc-ből;
  • A settimeofday már nem támogatja a paraméterek egyidejű átadását az idő beállításához és az időkorrekciós eltoláshoz. A settimeofday meghívásakor az egyik argumentumot (time vagy offset) nullra kell állítani, különben a függvényhívás EINVAL hibával meghiúsul. A gettimeofdayhez hasonlóan a settimeofday függvény elavult a POSIX rendszerben, és javasolt a clock_settime függvénnyel vagy az adjtime függvénycsaláddal helyettesíteni;
  • A SPARC ISA v7 architektúra támogatása megszűnt (a v8 támogatás egyelőre megmarad, de csak a CAS utasításokat támogató processzorok esetében, például a LEON processzorok esetében, a SuperSPARC processzorok nem).
  • Ha a párosítás sikertelen a "lusta", amelyben a linker nem keres egy függvény szimbólumait az adott függvény első hívásáig, a dlopen függvény most a folyamat leállítására kényszeríti (korábban NULL-t adott vissza hiba esetén);
  • A MIPS hard-float ABI esetében a végrehajtható verem kerül felhasználásra, kivéve, ha a build kifejezetten korlátozza a Linux 4.8+ rendszermag használatát az „-enable-kernel=4.8.0” paraméteren keresztül (4.8-ig terjedő kerneleknél az összeomlások egyes MIPS-konfigurációknál megfigyelhető);
  • Az időmanipulációval kapcsolatos rendszerhívások körüli kötések átkerültek a time64 rendszerhívás használatára, ha van ilyen (32 bites rendszereken a glibc először megpróbál olyan új rendszerhívásokat, amelyek manipulálják a 64 bites időtípust, és ha nincsenek ilyenek, akkor elesik vissza a régi 32 bites hívásokhoz).

Forrás: opennet.ru

Hozzászólás