|
После двух лет разработки представлен релиз стандартной Си-библиотеки Musl 1.2.6, предоставляющей реализацию libc, которая подходит для применения как на стационарных ПК и серверах, так и на мобильных системах, сочетая полноценную поддержку стандартов (как в Glibc) с небольшим размером, низким потреблением ресурсов и высокой производительностью (как в uClibc, dietlibc и Android Bionic). Имеется поддержка всех обязательных интерфейсов C99 и POSIX 2008, а также частично C11 и набор расширений для многопоточного программирования (POSIX threads), управления памятью и работы с локалями. Код 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 (virtual dynamic shared object) позволяет перенести обработчик системного вызова из ядра в пространство пользователя и избежать переключений контекста.
- Для определения возможностей CPU в runtime компиляторов, символ
__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).
|