Glibc 2.35 пристига с подобрения, корекции на грешки и други

След шест месеца развитие беше обявено пускането на новата версия на Glibc 2.35 в която включва поправки от 66 разработчици и от внедрените подобрения можем да открием, че е добавена поддръжка за локала "C.UTF-8", който включва съпоставяне за всички кодове на Unicode, но е ограничен до използването на ASCII диапазони във функциите fnmatch, regexec и regcomp за запазване пространство.

Локалът е приблизително 400 KB, от които 346 KB са LC_CTYPE данни за Unicode и трябва да се инсталира отделно (не е вграден в Glibc). Данните за кодиране, информацията за типа на знаците и таблиците за транслитерация са актуализирани, за да поддържат спецификацията на Unicode 14.0.0.

Друга промяна, която се откроява, е тази и внедрява функции и макроси, които закръглят резултата до по-тесен тип, В допълнение към внедряването на функции и макроси за намиране на минимални и максимални числа с плаваща запетая от типове float, long double, _FloatN и _FloatNx, описани в спецификацията на IEEE 754-2019.

за функции exp10, съответните макроси се добавят към заглавния файл, които не са обвързани с конкретни типове, плюс макросът _PRINTF_NAN_LEN_MAX беше добавен към , предложен в проекта на стандарт ISO C2X.

Системата за динамично свързване реализира нов алгоритъм за класификация DSO с помощта на търсене в дълбочина (DFS) за справяне с проблеми с производителността при обработка на зависимостите на цикъла. За да изберете алгоритъма за сортиране на DSO, се предлага параметърът glibc.rtld.dynamic_sort, който може да бъде настроен на "1", за да се върнете към предишния алгоритъм.

Освен него добавена поддръжка за нова функция '__memcmpeq' към ABI, който се използва от компилаторите за оптимизиране на използването на `memcmp', когато връщаната стойност на тази функция се използва само за проверка на състоянието на завършване на операция.

The поддръжка за автоматична регистрация на нишки използвайки системното извикване rseq (рестартируеми последователности), предоставено от ядрото на Linux 4.18. Системното повикване rseq позволява да се организира непрекъснато изпълнение на група инструкции който не се прекъсва и записва резултата с последното изявление в групата. По същество той предоставя възможност за много бързо атомарно изпълнение на операции, които, ако бъдат прекъснати от друга нишка, се почистват и се опитват отново.

От друга страна осигурява компилация по подразбиране на всички изпълними файлове на вградените програми и тестов пакет в режим PIE (независимо от позиция изпълним файл).

За да деактивирате това поведение, е предоставена опцията „–disable-default-pie“., плюс за Linux, добави настройка glibc.malloc.hugetlb, за да промени реализацията на malloc, за да използва системното извикване madvise с флага MADV_HUGEPAGE за mmap и sbrk, или директно да използва големи страници с памет, като посочи флага MAP_HUGETLB в mmap повиквания.

В първия случай може да се постигне повишаване на производителността чрез използване на прозрачни огромни страници в режим madvise, а във втория случай можете да използвате системно запазени огромни страници (Huge Pages).

Трябва също да се отбележи, че някои уязвимости бяха коригирани в тази нова версия:

  • CVE-2022-23218, CVE-2022-23219: Препълване на буфера във функциите svcunix_create и clnt_create, причинено от копиране на съдържанието на параметър на име на файл в стека без проверка на размера на копираните данни. За приложения, създадени без защита на стека и използващи протокола "unix", уязвимостта може да доведе до изпълнение на злонамерен код при обработка на много дълги имена на файлове.
  • CVE-2021-3998: уязвимост във функцията realpath(), причинена от връщане на неправилна стойност при определени условия, съдържащи непочистени остатъчни данни от стека. За програмата SUID-root fusermount, уязвимостта може да се използва за получаване на чувствителна информация от паметта на процеса, например за получаване на информация за указател.
  • CVE-2021-3999: препълване на еднобайтов буфер във функцията getcwd(). Проблемът е причинен от грешка, която съществува от 1995 г. За да извикате препълване, в отделно пространство от имена на точка за монтиране, просто извикайте chdir() в директорията "/".

Накрая Ако се интересувате да научите повече за това, можете да проверите подробностите в следваща връзка.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.