Glibc 2.31 System Library Release

Etter seks måneder med utvikling publisert utgivelse av systembibliotek GNU C bibliotek (glibc) 2.31, som fullt ut oppfyller kravene i ISO C11- og POSIX.1-2008-standardene. Den nye utgivelsen inkluderer rettelser fra 58 utviklere.

Fra de implementert i Glibc 2.31 forbedringer du kan merke:

  • Lagt til _ISOC2X_SOURCE-makro for å aktivere funksjoner definert i utkastet til fremtidig ISO-standard C2X. Disse funksjonene er også aktivert når du bruker _GNU_SOURCE-makroen eller når du bygger inn gcc med "-std=gnu2x"-flagget;
  • For funksjoner definert i overskriftsfilen "math.h" som avrunder resultatene til en mindre type, er de tilsvarende generiske typemakroene foreslått i filen "tgmath.h", som kreves av spesifikasjonene TS 18661-1:2014 og TS 18661-3: 2015;
  • Lagt til pthread_clockjoin_np() funksjon, som venter på at tråden skal fullføres, tar hensyn til tidsavbruddet (hvis tidsavbruddet inntreffer før fullføring, vil funksjonen returnere en feil). I motsetning til pthread_timedjoin_np(), i pthread_clockjoin_np() er det mulig å definere typen tidtaker for å beregne timeout - CLOCK_MONOTONIC (tar i betraktning tiden brukt av systemet i hvilemodus) eller CLOCK_REALTIME;
  • DNS-resolveren støtter nå trust-ad-alternativet i /etc/resolv.conf og RES_TRUSTAD-flagget i _res.options, når angitt, overføres DNSSEC-flagget i DNS-forespørsler AD (autentiserte data). I denne modusen blir AD-flagget satt av serveren tilgjengelig for applikasjoner som kaller opp funksjoner som res_search(). Som standard, hvis de foreslåtte alternativene ikke er angitt, spesifiserer ikke glibc AD-flagget i forespørsler og sletter det automatisk i svar, noe som indikerer at DNSSEC-kontroller mangler;
  • Å bygge fungerende systemanropsbindinger for Glibc krever ikke lenger installasjon av Linux-kjerneoverskriftsfilene. Unntaket er 64-biters RISC-V-arkitekturen;
  • Eliminert sårbarhet CVE-2019-19126, som lar deg omgå beskyttelsen
    ASLR i programmer med setuid-flagget og bestemme adresseoppsettet i lastede biblioteker gjennom manipulering av miljøvariabelen LD_PREFER_MAP_32BIT_EXEC.

Endringer som bryter kompatibiliteten:

  • totalorder(), totalordermag() og lignende funksjoner for andre flytende kommatyper godtar nå pekere som argumenter for å eliminere advarsler om konvertering av verdier i tilstand NaN, i samsvar med anbefalingene i TS 18661-1 foreslått for den fremtidige C2X-standarden.
    Eksisterende kjørbare filer som sender flyttall-argumenter direkte vil fortsette å kjøre uten endringer;

  • Den lenge utdaterte stimule-funksjonen er ikke lenger tilgjengelig for glibc-koblede binærfiler, og definisjonen er fjernet fra time.h. For å stille inn systemtiden, bruk clock_settime-funksjonen. I fremtiden planlegger vi å fjerne den utdaterte ftime-funksjonen, samt sys/timeb.h-headerfilen (gettimeofday eller clock_gettime skal brukes i stedet for ftime);
  • Gettimeofday-funksjonen sender ikke lenger informasjon om systemomfattende tidssone (denne funksjonen var relevant i 4.2-BSD-dagene og har vært foreldet i mange år). 'tzp'-argumentet skal nå sendes en null-peker, og funksjonen localtime() skal brukes for å få tidssoneinformasjon basert på gjeldende tid. Å ringe gettimeofday med et argument som ikke er null 'tzp' vil returnere tomme felt tz_minuteswest og tz_dsttime i tidssonestrukturen. Selve gettimeofday-funksjonen er avviklet under POSIX (clock_gettime anbefales i stedet for gettimeofday), men det er ingen planer om å fjerne den fra glibc;
  • settimeofday støtter ikke lenger samtidig overføring av parametere for innstilling av tid og tidskorrigerende offset. Når du kaller settimeofday, må ett av argumentene (tid eller offset) nå settes til null, ellers vil funksjonskallet mislykkes med en EINVAL-feil. Som gettimeofday, er settimeofday-funksjonen utdatert av POSIX og anbefales erstattet av clock_settime-funksjonen eller adjtime-familien av funksjoner;
  • Støtte for SPARC ISA v7-arkitekturen har blitt avviklet (v8-støtte beholdes foreløpig, men bare for prosessorer som støtter CAS-instruksjoner, for eksempel LEON-prosessorer, ikke SuperSPARC-prosessorer).
  • Hvis sammenkobling mislykkes i "lat", der linkeren ikke søker etter symboler for en funksjon før det første kallet til den funksjonen, tvinger dlopen-funksjonen nå prosessen til å avslutte (tidligere returnerte NULL ved feil);
  • For MIPS hard-float ABI brukes nå den kjørbare stabelen, med mindre bygningen eksplisitt begrenser bruken av Linux 4.8+-kjernen via parameteren "-enable-kernel=4.8.0" (med kjerner opp til 4.8 er krasj observert for noen MIPS-konfigurasjoner);
  • Bindingene rundt systemanrop relatert til tidsmanipulasjon har blitt flyttet til å bruke time64-systemkallet, hvis det finnes (på 32-bits systemer prøver glibc først nye systemanrop som manipulerer 64-bits tidstypen, og hvis det ikke er noen, faller tilbake til de gamle 32-bits samtalene).

Kilde: opennet.ru

Legg til en kommentar