Выпуск сістэмнай бібліятэкі Glibc 2.31

Пасля шасці месяцаў распрацоўкі апублікаваны рэліз сістэмнай бібліятэкі GNU C Library (glibc) 2.31, якая цалкам прытрымліваецца патрабаванням стандартаў ISO C11 і POSIX.1-2008. У склад новага выпуску ўключаны выпраўленні ад 58 распрацоўшчыкаў.

З рэалізаваных у Glibc 2.31 паляпшэнняў можна адзначыць:

  • Дададзены макрас _ISOC2X_SOURCE для ўключэння магчымасцяў, вызначаных у чарнавым варыянце будучага стандарту ISO C2X. Дадзеныя магчымасці таксама ўключаюцца пры выкарыстанні макраса _GNU_SOURCE або пры зборцы ў gcc c сцягам "-std=gnu2x";
  • Для вызначаных у загалоўкавых файлаў "math.h" функцый, якія акругляюць свае вынікі да тыпу меншага памеру, у файле "tgmath.h" прапанаваны адпаведныя макрасы абагульненага тыпу, як таго патрабуюць спецыфікацыі TS 18661-1:2014 і TS 18661-3: 2015;
  • Дададзена функцыя pthread_clockjoin_np(), якая чакае завяршэння патоку з улікам таймаўту (калі таймаўт наступіць да завяршэння, то функцыя верне памылку). У адрозненне ад pthread_timedjoin_np(), у pthread_clockjoin_np() дапускаецца вызначэнне тыпу таймера для разліку таймаўту - CLOCK_MONOTONIC (улічвае час праведзены сістэмай у спячым рэжыме) або CLOCK_REALTIME;
  • У DNS-рэзалвер дададзена падтрымка опцыі trust-ad у /etc/resolv.conf і сцяга RES_TRUSTAD у _res.options, пры ўсталёўцы якіх у DNS-запытах ажыццяўляецца перадача DNSSEC-сцяга AD (authenticated data). У дадзеным рэжыме ўсталяваны серверам AD-сцяг становіцца даступны прыкладанням, якія выклікаюць функцыі, падобныя res_search(). Па змаўчанні, калі прапанаваныя опцыі не выстаўлены, glibc не паказвае сцяг AD у запытах і аўтаматычна чысціць яго ў адказах, што сведчыць аб адсутнасці праверкі DNSSEC;
  • Для зборкі працавальных абвязак сістэмных выклікаў для Glibc зараз не патрабуецца ўсталёўка загалоўкавых файлаў ядра Linux. Выключэнне складае 64-разрадная архітэктура RISC-V;
  • Ухілена уразлівасць CVE-2019-19126, якая дазваляе абыйсці абарону
    ASLR у праграмах са сцягам setuid і вызначыць раскладку адрасоў у загружаных бібліятэках праз маніпуляцыю з зменнай асяроддзі LD_PREFER_MAP_32BIT_EXEC.

Змены, якія парушаюць сумяшчальнасць:

  • У totalorder(), totalordermag() і падобныя функцыі для іншых тыпаў з якая плавае коскі зараз прымаюць у якасці аргументу паказальнікі для выключэння папярэджанняў аб пераўтварэнні значэнняў у стане NaN, У адпаведнасці з рэкамендацыямі TS 18661-1, прапанаванымі для будучага стандарту C2X.
    Існуючыя выкананыя файлы, у якіх аргументы з якая плавае коскі перадаюцца напроста, працягнуць працаваць без змены;

  • Даўно абвешчаная састарэлая функцыя stime зараз недаступная для злучаных з glibc бінарных файлаў, а яе азначэнне выдаленае з time.h. Для ўсталёўкі сістэмнага часу трэба выкарыстоўваць функцыю clock_settime. У далейшым плануецца выдаліць і пазначаную састарэлую функцыю ftime, а таксама загалоўкавых файлаў sys/timeb.h (замест ftime варта выкарыстоўваць gettimeofday або clock_gettime);
  • Функцыя gettimeofday з гэтага часу не перадае звесткі аб агульнасістэмным часавым поясе (дадзеная магчымасць была актуальная ў часы 4.2-BSD і шмат гадоў абвешчана састарэлай). У аргуменце 'tzp' зараз варта перадаваць нулявы паказальнік, а для атрымання звестак пра часавы пояс у прывязцы да бягучага часу выкарыстоўваць функцыю localtime(). Пры выкліку gettimeofday з ненулявым аргументам 'tzp' будуць вернуты пустыя палі tz_minuteswest і tz_dsttime у структуры timezone. Сама функцыя gettimeofday лічыцца састарэлай у POSIX (замест gettimeofday рэкамендуецца выкарыстоўваць clock_gettime), але выдаляць яе з glibc не плануецца;
  • У settimeofday спынена падтрымка адначасовай перадачы параметраў для ўсталёўкі часу і які карэктуе час зрушэння. Пры выкліку settimeofday адзін з аргументаў (час або зрушэнне) зараз абавязкова павінен быць выстаўлены ў значэнне null, інакш выклік функцыі будзе завершаны памылкай EINVAL. Як і gettimeofday функцыя settimeofday лічыцца састарэлай у POSIX і замест яе рэкамендуецца выкарыстоўваць функцыю clock_settime ці сямейства функцый adjtime;
  • Спыненая падтрымка архітэктуры SPARC ISA v7 (падтрымка v8 пакуль захавана, але толькі для працэсараў з падтрымкай інструкцый CAS, такіх як працэсары LEON, але не працэсары SuperSPARC).
  • У выпадку збою звязвання ў рэжыме «лянівы«, пры якім кампаноўнік не выконвае пошук сімвалаў функцыі да першага выкліку гэтай функцыі, функцыя dlopen зараз прымусова завяршае выкананне працэсу (раней пры збоі вяртаўся NULL);
  • Для ABI MIPS hard-float зараз выкарыстоўваецца выкананы стэк, калі пры зборцы відавочна не зададзена абмежаванне на выкарыстанне ядра Linux 4.8+ праз параметр "—enable-kernel=4.8.0" (з ядрамі да 4.8 назіраюцца збоі для некаторых канфігурацый MIPS);
  • Абвязкі над сістэмнымі выклікамі, злучанымі з маніпуляцыяй часам, перакладзеныя на ўжыванне сістэмнага выкліку time64, пры ім наяўнасці (на 32-разрадных сістэмах glibc спачатку спрабуе выкарыстаць новыя сістэмныя выклікі, якія маніпулююць 64-разрадным тыпам для часу, а калі іх няма, адкочваецца на старыя 32-разрадныя выклікі).

Крыніца: opennet.ru

Дадаць каментар