Выпуск системной библиотеки Glibc 2.31
После шести месяцев разработки опубликован релиз системной библиотеки GNU C Library (glibc) 2.31, которая полностью следует требованиям стандартов ISO C11 и POSIX.1–2008. В состав нового выпуска включены исправления от 58 разработчиков.
Из реализованных в Glibc 2.30 улучшений можно отметить:
- Добавлен макрос _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 и много лет объявлена устаревшей). При вызове gettimeofday с ненулевым аргументом 'tzp' будут возвращены пустые поля tz_minuteswest и tz_dsttime в структуре timezone. В 'tzp' теперь следует передавать нулевой указатель, а для получения сведений о часовом поясе в привязке к текущему времени использовать функцию localtime (). Сама функция gettimeofday считается устаревшей в POSIX (вместо gettimeofday рекомендуется использовать clock_gettime)., но удалять её из glibc не планируется;
- В settimeofday прекращена поддержка одновременной передачи параметров для установки времени и смещения. При вызове settimeofday один из аргументов (время или смещение) теперь обязательно должен быть выставлен в значение null, иначе вызов функции будет завершён ошибкой EINVAL. Как и gettimeofday функция settimeofday считается устаревшей в POSIX и вместо неё рекомендуется использовать функцию clock_settime или семейство функций adjtime;
- Прекращена поддержка архитектуры SPARC ISA v7 (поддержка v8 пока сохранена, но только для процессоров с поддержкой инструкций CAS, таких как процессоры LEON, но не процессоры SuperSPARC).
- В случает сбоя связывания в режиме «lazy», при котором компоновщик не выполняет поиск символов для организации вызова функции до первого обращения к функции, функция dlopen теперь принудительно завершает выполнение процесса (ранее при сбое возвращался NULL);
- Для ABI MIPS hard-float теперь используется исполняемый стек, если при сборке явно не задано ограничение на использование ядра Linux 4.8+ через параметр »--enable-kernel=4.8.0» (с ядрами до 4.8 наблюдаются сбои для некоторых конфигураций MIPS);
- Обвязки над системными вызовами, связанными с манипуляцией временем, переведены на применение системного вызова time64, при его наличии (на 32-разрядных системах glibc вначале пытается использовать новые системные вызовы, манипулирующие 64-разрядными типами времени, а если их нет, откатывается на старые 32-разрядные вызовы).
Источник: http://www.opennet.ru/opennews/art.shtml? num=52293
© OpenNet