Glibc 2.31 System Library Release

Efter sex månaders utveckling publicerad systembiblioteksversion GNU C bibliotek (glibc) 2.31, som helt uppfyller kraven i standarderna ISO C11 och POSIX.1-2008. Den nya utgåvan innehåller korrigeringar från 58 utvecklare.

Från de implementerade i Glibc 2.31 förbättringar du kan notera:

  • Lade till makrot _ISOC2X_SOURCE för att möjliggöra funktioner som definieras i utkastet till framtida ISO-standard C2X. Dessa funktioner är också aktiverade när du använder makrot _GNU_SOURCE eller när du bygger in gcc med flaggan "-std=gnu2x";
  • För funktioner definierade i rubrikfilen "math.h" som avrundar deras resultat till en mindre typ, föreslås motsvarande generiska typmakron i filen "tgmath.h", som krävs av specifikationerna TS 18661-1:2014 och TS 18661-3: 2015;
  • Lade till pthread_clockjoin_np() funktion, som väntar på att tråden ska slutföras, med hänsyn till timeout (om timeout inträffar innan slutförandet kommer funktionen att returnera ett fel). Till skillnad från pthread_timedjoin_np(), i pthread_clockjoin_np() är det möjligt att definiera typen av timer för beräkning av timeout - CLOCK_MONOTONIC (tar hänsyn till tiden som systemet spenderar i viloläge) eller CLOCK_REALTIME;
  • DNS-resolvern stöder nu alternativet trust-ad i /etc/resolv.conf och RES_TRUSTAD-flaggan i _res.options, när den är inställd, sänds DNSSEC-flaggan i DNS-förfrågningar AD (autentiserade data). I det här läget blir AD-flaggan som ställts in av servern tillgänglig för applikationer som anropar funktioner som res_search(). Som standard, om de föreslagna alternativen inte är inställda, specificerar inte glibc AD-flaggan i förfrågningar och rensar den automatiskt i svar, vilket indikerar att DNSSEC-kontroller saknas;
  • Att bygga fungerande systemanropsbindningar för Glibc kräver inte längre installation av Linux-kärnhuvudfilerna. Undantaget är 64-bitars RISC-V-arkitekturen;
  • Utslagen sårbarhet CVE-2019-19126, vilket gör att du kan kringgå skyddet
    ASLR i program med setuid-flaggan och bestäm adresslayouten i laddade bibliotek genom manipulering av miljövariabeln LD_PREFER_MAP_32BIT_EXEC.

Ändringar som bryter kompatibiliteten:

  • totalorder(), totalordermag() och liknande funktioner för andra flyttalstyper accepterar nu pekare som argument för att eliminera varningar om att konvertera värden i tillstånd NaN, i enlighet med rekommendationerna i TS 18661-1 som föreslås för den framtida C2X-standarden.
    Befintliga körbara filer som skickar flyttalsargument direkt kommer att fortsätta att köras utan ändringar;

  • Den sedan länge föråldrade stimulefunktionen är inte längre tillgänglig för glibc-länkade binärer, och dess definition har tagits bort från time.h. För att ställa in systemtiden, använd funktionen clock_settime. I framtiden planerar vi att ta bort den föråldrade ftime-funktionen, såväl som sys/timeb.h-huvudfilen (gettimeofday eller clock_gettime ska användas istället för ftime);
  • Gettimeofday-funktionen skickar inte längre information om den systemomfattande tidszonen (denna funktion var relevant under 4.2-BSD-dagarna och har föråldrats i många år). Argumentet 'tzp' ska nu skickas till en nollpekare, och funktionen localtime() ska användas för att erhålla tidszonsinformation baserat på den aktuella tiden. Att anropa gettimeofday med ett 'tzp'-argument som inte är noll kommer att returnera de tomma fälten tz_minuteswest och tz_dsttime i tidszonstrukturen. Själva gettimeofday-funktionen är utfasad under POSIX (clock_gettime rekommenderas istället för gettimeofday), men det finns inga planer på att ta bort den från glibc;
  • settimeofday stöder inte längre samtidig överföring av parametrar för att ställa in tiden och den tidskorrigerande offseten. När settimeofday anropas måste ett av argumenten (tid eller offset) nu sättas till null, annars misslyckas funktionsanropet med ett EINVAL-fel. Liksom gettimeofday, är settimeofday-funktionen föråldrad av POSIX och rekommenderas att ersättas av clock_settime-funktionen eller adjtime-familjen av funktioner;
  • Stödet för SPARC ISA v7-arkitekturen har upphört (v8-stödet behålls för närvarande, men endast för processorer som stöder CAS-instruktioner, såsom LEON-processorer, inte SuperSPARC-processorer).
  • Om ihopparningen misslyckas i "lata", där länkaren inte söker efter symboler för en funktion förrän det första anropet till den funktionen, tvingar dlopen-funktionen nu processen att avslutas (tidigare returnerade NULL vid fel);
  • För MIPS hard-float ABI används nu den körbara stacken, såvida inte builden uttryckligen begränsar användningen av Linux-kärnan 4.8+ via parametern "-enable-kernel=4.8.0" (med kärnor upp till 4.8 är krascher observeras för vissa MIPS-konfigurationer);
  • Bindningarna runt systemanrop relaterade till tidsmanipulation har flyttats för att använda time64-systemanropet, om det finns (på 32-bitars system försöker glibc först nya systemanrop som manipulerar 64-bitars tidstyp, och om det inte finns några, faller tillbaka till de gamla 32-bitars anrop).

Källa: opennet.ru

Lägg en kommentar