Випуск системної бібліотеки Glibc 2.31

Після шести місяців розробки опубліковано реліз системної бібліотеки Бібліотека GNU C (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() і подібні функції для інших типів з плаваючою комою тепер приймають як аргумент покажчики для виключення попереджень про перетворення значень у стані ні, відповідно до рекомендацій 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

Додати коментар або відгук