Publikimi i Bibliotekës së Sistemit Glibc 2.31

Pas gjashtë muajsh zhvillimi botuar lëshimi i bibliotekës së sistemit Biblioteka GNU C (glibc) 2.31, i cili përputhet plotësisht me kërkesat e ISO C11 dhe POSIX.1-2008. Publikimi i ri përfshin rregullime nga 58 zhvillues.

Zbatuar në Glibc 2.31 учшений ju mund të vini re:

  • U shtua makro _ISOC2X_SOURCE për të mundësuar aftësitë e përcaktuara në draft standardin e ardhshëm ISO GJ2X. Këto veçori aktivizohen gjithashtu kur përdorni makro _GNU_SOURCE ose kur ndërtoni në gcc me flamurin “-std=gnu2x”;
  • Për funksionet e përcaktuara në skedarin e titullit "math.h" që rrumbullakojnë rezultatet e tyre në një lloj më të vogël, makrot përkatëse të tipit gjenerik propozohen në skedarin "tgmath.h", siç kërkohet nga specifikimet TS 18661-1:2014 dhe TS 18661-3: 2015;
  • U shtua funksioni pthread_clockjoin_np(), i cili pret që thread të përfundojë, duke marrë parasysh kohëzgjatjen (nëse skadimi ndodh para përfundimit, funksioni do të kthejë një gabim). Ndryshe nga pthread_timedjoin_np(), në pthread_clockjoin_np() është e mundur të përcaktohet lloji i kohëmatësit për llogaritjen e afatit - CLOCK_MONOTONIC (merr parasysh kohën e shpenzuar nga sistemi në modalitetin e gjumit) ose CLOCK_REALTIME;
  • Zgjidhësi DNS tani mbështet opsionin trust-ad në /etc/resolv.conf dhe flamurin RES_TRUSTAD në _res.options, kur vendoset, flamuri DNSSEC transmetohet në kërkesat DNS AD (të dhëna të vërtetuara). Në këtë modalitet, flamuri AD i vendosur nga serveri bëhet i disponueshëm për aplikacionet që thërrasin funksione si res_search(). Si parazgjedhje, nëse opsionet e sugjeruara nuk janë caktuar, glibc nuk e specifikon flamurin AD në kërkesat dhe e fshin automatikisht atë në përgjigje, duke treguar që kontrollet DNSSEC mungojnë;
  • Ndërtimi i lidhjeve të thirrjeve të sistemit të punës për Glibc nuk kërkon më instalimin e skedarëve të kokës së kernelit Linux. Përjashtim bën arkitektura 64-bit RISC-V;
  • Eleminuar cenueshmëria CVE-2019-19126, e cila ju lejon të anashkaloni mbrojtjen
    ASLR në programet me flamurin setuid dhe përcaktoni paraqitjen e adresave në bibliotekat e ngarkuara përmes manipulimit të ndryshores së mjedisit LD_PREFER_MAP_32BIT_EXEC.

Ndryshimet që prishin përputhshmërinë:

  • totalorder(), totalordermag(), dhe funksione të ngjashme për llojet e tjera me pikë lundruese tani pranojnë tregues si argumente për të eliminuar paralajmërimet në lidhje me konvertimin e vlerave në gjendje NaN, në përputhje me rekomandimet e TS 18661-1 të propozuar për standardin e ardhshëm C2X.
    Ekzekutuesit ekzistues që kalojnë drejtpërdrejt argumentet me pikë lundruese do të vazhdojnë të ekzekutohen pa modifikim;

  • Funksioni stime i vjetëruar prej kohësh nuk është më i disponueshëm për binarët e lidhur me glibc dhe përkufizimi i tij është hequr nga time.h. Për të vendosur orën e sistemit, përdorni funksionin ora_vendos. Në të ardhmen, ne planifikojmë të heqim funksionin e vjetëruar ftime, si dhe skedarin e kokës sys/timeb.h (gettimeofday ose clock_gettime duhet të përdoren në vend të ftime);
  • Funksioni gettimeofday nuk kalon më informacion në lidhje me zonën kohore në të gjithë sistemin (kjo veçori ishte e rëndësishme në ditët e 4.2-BSD dhe është zhvlerësuar për shumë vite). Argumentit 'tzp' tani duhet t'i kalohet një tregues null dhe funksioni localtime() duhet të përdoret për të marrë informacionin e zonës kohore bazuar në kohën aktuale. Thirrja e gettimeofday me një argument "tzp" jo zero do të kthejë fushat boshe tz_minuteswest dhe tz_dsttime në strukturën e zonës kohore. Vetë funksioni gettimeofday është i vjetëruar nën POSIX (clock_gettime rekomandohet në vend të gettimeofday), por nuk ka plane për ta hequr atë nga glibc;
  • settimeofday nuk mbështet më kalimin e njëkohshëm të parametrave për vendosjen e kohës dhe kompensimin e korrigjimit të kohës. Kur telefononi settimeofday, një nga argumentet (koha ose offset) tani duhet të vendoset në null, përndryshe thirrja e funksionit do të dështojë me një gabim EINVAL. Ashtu si gettimeofday, funksioni settimeofday është i vjetëruar në POSIX dhe rekomandohet të zëvendësohet nga funksioni clock_settime ose nga familja e funksioneve adjtime;
  • Mbështetja për arkitekturën SPARC ISA v7 është ndërprerë (mbështetja v8 ruhet për momentin, por vetëm për procesorët që mbështesin udhëzimet CAS, si procesorët LEON, jo procesorët SuperSPARC).
  • Nëse çiftimi dështon në "dembel", në të cilën lidhësi nuk kërkon simbolet e një funksioni deri në thirrjen e parë të atij funksioni, funksioni dlopen tani e detyron procesin të përfundojë (më parë duke kthyer NULL në dështim);
  • Për MIPS hard-float ABI, grupi i ekzekutueshëm përdoret tani, përveç nëse ndërtimi kufizon në mënyrë eksplicite përdorimin e kernelit Linux 4.8+ nëpërmjet parametrit "-enable-kernel=4.8.0" (me kernelet deri në 4.8, prishjet janë vëzhguar për disa konfigurime MIPS);
  • Lidhjet rreth thirrjeve të sistemit që lidhen me manipulimin e kohës janë zhvendosur për të përdorur thirrjen e sistemit time64, nëse është e pranishme (në sistemet 32-bit, glibc fillimisht provon thirrjet e reja të sistemit që manipulojnë llojin e kohës 64-bit dhe nëse nuk ka, bie kthehu te thirrjet 32-bit të të vjetrave).

Burimi: opennet.ru

Shto një koment