След като беше разработвана в продължение на две години, беше представена стандартната C-библиотека Musl 1.2.6, която предлага реализирана libc, подходяща за използване както на настолни компютри и сървъри, така и на мобилни системи. Тя съчетава пълна поддръжка на стандартите (както в Glibc) с малък размер, ниска консумация на ресурси и висока производителност (както в uClibc, dietlibc и Android Bionic). Поддържат се всички задължителни интерфейси C99 и POSIX 2008, както и частично C11 и набор от разширения за многонишково програмиране (POSIX нишки), управление на паметта и работа с локали. Кодът на Musl се предоставя под свободната лицензия MIT.
Основни промени:
- Реализирана е функцията posix_getdents, появила се в стандарта POSIX-2024. Функцията чете съдържанието на директория, свързана с отворен файлов дескриптор, и поставя информация за поддиректории и файлове в структури posix_dent с възможност за ограничаване на максималния размер.
- Добавена е специфичната за Linux функция renameat2, която предоставя средства за атомарна замяна на имената на два файла (първият файл се преименува на втория, а вторият на първия). От renameat новата функция се различава с наличието на допълнително флагово поле — при липса на флаг поведението на renameat2 е напълно аналогично на renameat, а при указване на флага RENAME_NOREPLACE операцията по преименуване не води до замяна на вече съществуващ файл.
- За системите Loongarch64 е добавена поддръжка на механизма TLSDESC (Thread-Local Storage Descriptor) за ефективен достъп до променливи в локалното хранилище на потока.
- С помощта на vDSO е оптимизирана работата на функцията clock_gettime на архитектури riscv32, riscv64, powerpc, powerpc64 и s390x. vDSO (виртуален динамичен споделен обект) позволява прехвърлянето на обработвача на системен повик от ядрото в пространството на потребителя, избягвайки контекстни превключвания.
- За определяне на възможностите на CPU в време на работа на компилаторите, символът __getauxval е преведен в публичния ABI.
- Премахната е уязвимост (CVE-2025-26519), която води до препълване на буфера при преобразуване на специално форматиран текст от кодировка EUC-KR в UTF-8 с помощта на функцията iconv(). Уязвимостта е идентифицирана преди повече от година и до релиза е била отстранена чрез прилагане на пач.
- Решени са проблемите със съвместимостта в функциите initgroups, getusershell, exit, atexit, strerror, isatty, hasmntopt и vdso, както и в заглавните файлове sched.h и shadow.h.
- Подобрено съответствието с изискванията в функциите pwrite (решен проблемата с O_APPEND), mbnrtowcs (вземат се предвид изискванията на POSIX-2024), strptim (вземат се предвид изискванията на POSIX-2024e), inet_ntop (осигурено съответствие с RFC 5952).
Източник: opennet.ru
