Glibc 2.31 System Library Release

Efter seks måneders udvikling offentliggjort frigivelse af systembibliotek GNU C bibliotek (glibc) 2.31, som fuldt ud overholder kravene i ISO C11 og POSIX.1-2008 standarder. Den nye udgivelse indeholder rettelser fra 58 udviklere.

Fra dem implementeret i Glibc 2.30 forbedringer du kan bemærke:

  • Tilføjet _ISOC2X_SOURCE makro for at aktivere funktioner defineret i udkastet til fremtidig ISO-standard C2x. Disse funktioner er også aktiveret, når du bruger makroen _GNU_SOURCE, eller når du bygger i gcc med flaget "-std=gnu2x";
  • For funktioner defineret i overskriftsfilen "math.h", der afrunder deres resultater til en mindre type, foreslås de tilsvarende generiske typemakroer i filen "tgmath.h", som krævet af specifikationerne TS 18661-1:2014 og TS 18661-3: 2015;
  • Tilføjet pthread_clockjoin_np() funktion, som venter på, at tråden er fuldført, under hensyntagen til timeout (hvis timeout opstår før færdiggørelse, vil funktionen returnere en fejl). I modsætning til pthread_timedjoin_np(), i pthread_clockjoin_np() er det muligt at definere typen af ​​timer til beregning af timeout - CLOCK_MONOTONIC (tager hensyn til tiden brugt af systemet i dvaletilstand) eller CLOCK_REALTIME;
  • DNS-resolveren understøtter nu trust-ad-indstillingen i /etc/resolv.conf og RES_TRUSTAD-flaget i _res.options, når det er indstillet, transmitteres DNSSEC-flaget i DNS-anmodninger AD (godkendte data). I denne tilstand bliver AD-flaget indstillet af serveren tilgængeligt for applikationer, der kalder funktioner som res_search(). Som standard, hvis de foreslåede muligheder ikke er indstillet, angiver glibc ikke AD-flaget i anmodninger og sletter det automatisk i svar, hvilket indikerer, at DNSSEC-tjek mangler;
  • Opbygning af fungerende systemopkaldsbindinger til Glibc kræver ikke længere installation af Linux-kernens header-filer. Undtagelsen er 64-bit RISC-V-arkitekturen;
  • Elimineret sårbarhed CVE-2019-19126, som giver dig mulighed for at omgå beskyttelsen
    ASLR i programmer med setuid-flaget og bestemme adresselayoutet i indlæste biblioteker gennem manipulation af miljøvariablen LD_PREFER_MAP_32BIT_EXEC.

Ændringer, der bryder kompatibiliteten:

  • totalorder(), totalordermag() og lignende funktioner for andre flydende kommatyper accepterer nu pointere som argumenter for at eliminere advarsler om konvertering af værdier i tilstand Nix, i overensstemmelse med anbefalingerne i TS 18661-1 foreslået for den fremtidige C2X-standard.
    Eksisterende eksekverbare filer, der sender flydende komma-argumenter direkte, vil fortsætte med at køre uden ændringer;

  • Den længe forældede stimule-funktion er ikke længere tilgængelig for glibc-linkede binære filer, og dens definition er blevet fjernet fra tid.h. For at indstille systemtiden skal du bruge funktionen clock_settime. I fremtiden planlægger vi at fjerne den forældede ftime-funktion, såvel som sys/timeb.h-header-filen (gettimeofday eller clock_gettime skal bruges i stedet for ftime);
  • Gettimeofday-funktionen videregiver ikke længere information om den systemdækkende tidszone (denne funktion var relevant i dagene med 4.2-BSD og har været forældet i mange år). 'tzp'-argumentet skal nu sendes en null-pointer, og funktionen localtime() skal bruges til at få tidszoneinformation baseret på det aktuelle tidspunkt. Hvis du kalder gettimeofday med et ikke-nul-argument 'tzp', returneres tomme felter tz_minuteswest og tz_dsttime i tidszonestrukturen. Selve gettimeofday-funktionen er forældet under POSIX (clock_gettime anbefales i stedet for gettimeofday), men der er ingen planer om at fjerne den fra glibc;
  • settimeofday understøtter ikke længere samtidig overførsel af parametre til indstilling af tiden og den tidskorrigerende offset. Når du kalder settimeofday, skal et af argumenterne (tid eller offset) nu sættes til null, ellers mislykkes funktionskaldet med en EINVAL-fejl. Ligesom gettimeofday er settimeofday-funktionen forældet i POSIX og anbefales at blive erstattet af clock_settime-funktionen eller adjtime-familien af ​​funktioner;
  • Understøttelse af SPARC ISA v7-arkitekturen er afbrudt (v8-understøttelse bibeholdes indtil videre, men kun for processorer, der understøtter CAS-instruktioner, såsom LEON-processorer, ikke SuperSPARC-processorer).
  • Hvis parring mislykkes i "doven", hvor linkeren ikke søger efter symboler for en funktion før det første kald til den funktion, tvinger dlopen-funktionen nu processen til at afslutte (tidligere returnerede NULL ved fejl);
  • For MIPS hard-float ABI bruges den eksekverbare stak nu, medmindre buildet eksplicit begrænser brugen af ​​Linux-kernen 4.8+ via parameteren "-enable-kernel=4.8.0" (med kerner op til 4.8 er nedbrud observeret for nogle MIPS-konfigurationer);
  • Bindingerne omkring systemkald relateret til tidsmanipulation er blevet flyttet til at bruge time64 systemkaldet, hvis det findes (på 32-bit systemer prøver glibc først nye systemkald, der manipulerer 64-bit tidstypen, og hvis der ikke er nogen, falder tilbage til de gamle 32-bit opkald).

Kilde: opennet.ru

Tilføj en kommentar