Издание на системска библиотека на Glibc 2.31

По шест месеци развој објавено издавање на системска библиотека GNU C библиотека (glibc) 2.31, што целосно ги исполнува барањата на ISO C11 и POSIX.1-2008. Новото издание вклучува поправки од 58 програмери.

Имплементиран во Глибц 2.30 подобрувања може да забележите:

  • Додадено е _ISOC2X_SOURCE макро за да се овозможат способности дефинирани во нацрт-идниот ISO стандард C2X. Овие карактеристики се исто така овозможени кога се користи макрото _GNU_SOURCE или кога се гради во gcc со знаменцето „-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, кога е поставено, знамето DNSSEC се пренесува во барањата за DNS AD (автентицирани податоци). Во овој режим, знамето 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.
    Постоечките извршни датотеки кои директно ги пренесуваат аргументите со подвижна запирка ќе продолжат да работат без измена;

  • Одамна застарената функција за стаж повеќе не е достапна за бинарни датотеки поврзани со 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 или семејството на функции за прилагодување;
  • Поддршката за архитектурата SPARC ISA v7 е прекината (поддршката v8 засега е задржана, но само за процесори кои поддржуваат CAS инструкции, како што се LEON процесорите, а не SuperSPARC процесорите).
  • В случает сбоя связывания в режиме «мрзелив", во која поврзувачот не бара симболи на функција до првиот повик до таа функција, функцијата dlopen сега го принудува процесот да заврши (претходно враќа NULL при неуспех);
  • За MIPS hard-float ABI, извршниот стек сега се користи, освен ако изградбата експлицитно не ја ограничи употребата на кернелот Linux 4.8+ преку параметарот „-enable-kernel=4.8.0“ (со кернели до 4.8, паѓањата се забележано за некои MIPS конфигурации);
  • Врските околу системските повици поврзани со манипулација со времето се преместени за да се користи системскиот повик time64, доколку е присутен (на 32-битни системи, glibc прво пробува нови системски повици кои манипулираат со 64-битен тип на време, а ако ги нема, паѓа назад на старите 32-битни повици).

Извор: opennet.ru

Додадете коментар