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

Після шести місяців розробки опубліковано реліз системної бібліотеки Бібліотека GNU C (glibc) 2.32, яка повністю дотримується вимог стандартів ISO C11 та POSIX.1-2017. До складу нового випуску включено виправлення від 67 розробників.

З реалізованих у Glibc 2.32 покращень можна відмітити:

  • Додано підтримку процесорів Synopsys ARC HS (ARCv2 ISA). Для роботи порту потрібно як мінімум binutils 2.32, gcc 8.3 та ядро ​​Linux 5.1. Підтримується три варіанти ABI arc-linux-gnu, arc-linux-gnuhf та arceb-linux-gnu (big-endian);
  • Реалізовано завантаження модулів аудиту, вказаних у секціях DT_AUDIT та
    DT_DEPAUDIT виконуваного файлу.

  • Для архітектури powerpc64le реалізовано підтримку типу IEEE128 long double, що включається при складанні з опцією «-mabi=ieeelongdouble».
  • Деякі API анотовані з використанням GCC-атрибуту 'access', що дозволяє при компіляції GCC 10 генерувати більш якісні попередження при визначенні можливих переповнень буферів та інших варіантів виходу за допустимі межі.
  • Для Linux-систем реалізовані функції pthread_attr_setsigmask_np та
    pthread_attr_getsigmask_np, що дає змогу вказати маску сигналу для потоків, створених за допомогою pthread_create.

  • Дані кодувань, інформація про типи символів та таблиці транслітерації оновлені для підтримки специфікації Unicode 13.0.0;
  • Додано новий заголовний файл , Який визначає змінну __libc_single_threaded, яку можна використовувати в додатках для однопотокових оптимізації.
  • Додані функції sigabbrev_np і sigdescr_np, що повертають скорочену назву та опис сигналу (наприклад, HUP і Hangup для SIGHUP).
  • Додані функції strerrorname_np та strerrordesc_np, які повертають ім'я та опис помилки (наприклад, «EINVAL» та «Invalid argument» для EINVAL).
  • Для платформи ARM64 доданий прапор «—enable-standard-branch-protection» (або -mbranch-protection=standard в GCC), механізм ARMv8.5-BTI (Branch Target Indicator), що діє, для захисту виконання наборів інструкцій, на які не повинні виконуватися переходи під час розгалуження. Блокування переходів на довільні ділянки коду реалізовано для протидії створенню гаджетів в експлоїтах, що використовують прийоми зворотно-орієнтованого програмування (ROP — Return-Oriented Programming, атакуючий не намагається розмістити свій код у пам'яті, а оперує вже наявними шматками машинних інструкцій, що завершуються з яких вишиковуються ланцюжок викликів для отримання потрібної функціональності).
  • Проведено велике чищення застарілих можливостей, у тому числі видалено опції «—enable-obsolete-rpc» та «—enable-obsolete-nsl», заголовковий файл . Оголошені застарілими функції sstk, siginterrupt, sigpause, sighold, sigrelse, sigignore та sigset, масиви sys_siglist, _sys_siglist та sys_sigabbrev, символи sys_errlist, _sys_errlist, sys_nerr та _sys_nerr.
  • ldconfig за промовчанням переведено на використання нового формату ld.so.cache, який підтримується в glibc вже майже 20 років.
  • Усунені вразливості:
    • CVE-2016-10228 - зациклювання в утиліті iconv, що виявляється при запуску з опцією "-c", у разі обробки некоректних багатобайтових даних.
    • CVE-2020-10029 - пошкодження стека при виклику тригонометричних функцій із псевдонульовим аргументом.
    • CVE-2020-1752 - звернення до області пам'яті після її звільнення (use-after-free) у функції glob при розкритті посилання на домашній каталог ("~user") у шляхах.
    • CVE-2020-6096 - некоректна обробка на платформі ARMv7 негативних значень параметра в memcpy() і memmove(), що визначає розмір області, що копіюється. дозволяє організувати виконання коду при обробці у функціях memcpy() та memmove() певним чином оформлених даних. Показово, що проблема залишалася невиправленою майже два місяці з моменту публічного розкриття інформації та п'ять місяців з моменту повідомлення розробників Glibc.

Джерело: opennet.ru

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