经过两年的开发,标准 C 库 Musl 1.2.6 正式发布。该库实现了 libc 库,适用于桌面电脑、服务器和移动系统,兼具对标准的全面支持(如 Glibc)和体积小、资源消耗低、性能高等优点(如 uClibc、dietlibc 等)。 Android Musl 是一款基于 Bionic 的编程语言。它支持所有必需的 C99 和 POSIX 2008 接口,以及部分 C11 支持和一系列用于多线程编程(POSIX 线程)、内存管理和区域设置的扩展。Musl 代码以 MIT 许可证发布。
主要变化:
- POSIX-2024 标准中引入的 posix_getdents 函数已实现。该函数读取与打开的文件描述符关联的目录的内容,并将子目录和文件的信息放入 posix_dent 结构中,并可限制其最大大小。
- 添加了特定内容 Linux renameat2 函数提供了一种原子地替换两个文件名的方法(第一个文件重命名为第二个文件,第二个文件重命名为第一个文件)。该函数与 renameat 的区别在于增加了一个额外的标志字段:如果没有此标志,renameat2 的行为与 renameat 完全相同;而当指定 RENAME_NOREPLACE 标志时,重命名操作不会替换现有文件。
- 对于 Loongarch64 系统,已添加对 TLSDESC(线程本地存储描述符)机制的支持,以便高效访问线程本地存储中的变量。
- 利用 vDSO,clock_gettime 函数已在 riscv32、riscv64、powerpc、powerpc64 和 s390x 架构上进行了优化。vDSO(虚拟动态共享对象)允许将系统调用处理程序从内核空间移至用户空间,从而避免上下文切换。
- 为了在运行时编译器中检测 CPU 功能,__getauxval 符号已被翻译成公共 ABI。
- 一个漏洞(CVE-2025-26519)已被修复,该漏洞会导致在使用 iconv() 函数将特制文本从 EUC-KR 编码转换为 UTF-8 编码时发生缓冲区溢出。该漏洞于一年多前被发现,并在版本发布前已修复。
- 解决了 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
