Glibc 2.35 带来了改进、错误修复等

经过六个月的开发 宣布发布新版 Glibc 2.35 在其中 包括来自 66 位开发人员的修复 在实现的改进中,我们可以发现添加了对“C.UTF-8”语言环境的支持,其中包括所有 Unicode 代码的排序规则,但仅限于在 fnmatch、regexec 和 regcomp 函数中使用 ASCII 范围来保存空间。

语言环境约为 400 KB,其中 346 KB 是 Unicode 的 LC_CTYPE 数据,必须单独安装(不是内置在 Glibc 中)。 编码数据、字符类型信息和音译表已更新以支持 Unicode 14.0.0 规范。

另一个引人注目的变化是 是实现将结果四舍五入为更窄类型的函数和宏, 除了实现函数和宏以查找 IEEE 754-2019 规范中描述的 float、long double、_FloatN 和 _FloatNx 类型的浮点数的最小值和最大值。

对于函数 exp10,在头文件中添加对应的宏,它不绑定到特定类型,加上 _PRINTF_NAN_LEN_MAX 宏被添加到,在 ISO C2X 标准草案中提出。

动态链接系统实现了一种新的分类算法 使用深度搜索 (DFS) 的 DSO 在处理循环依赖时解决性能问题。 为了选择DSO排序算法,提出了glibc.rtld.dynamic_sort参数,可以设置为“1”回退到之前的算法。

除了它 添加了对新函数“__memcmpeq”的支持 到 ABI,当此函数的返回值仅用于检查操作的完成状态时,编译器使用它来优化“memcmp”的使用。

支持自动线程注册 使用自 Linux 内核 4.18 起提供的 rseq(可重启序列)系统调用。 rseq 系统调用 允许组织一组指令的连续执行 它不会被中断并使用组中的最后一条语句提交结果。 本质上,它提供了一种非常快速的原子执行操作的工具,如果被另一个线程中断,它会被清理并重试。

另一方面,它提供 所有可执行文件的默认编译 内置程序和 PIE(与位置无关的可执行文件)模式下的测试套件。

要禁用此行为, 提供了“–disable-default-pie”选项,加上对于 Linux,添加了一个 glibc.malloc.hugetlb 设置来更改 malloc 实现以使用带有 MADV_HUGEPAGE 标志的 madvise 系统调用,用于 mmap 和 sbrk,或者通过在 mmap 调用中指定 MAP_HUGETLB 标志直接使用大内存页面。

在第一种情况下,可以通过在madvise模式下使用透明的Huge Pages来实现性能提升,而在第二种情况下,可以使用系统保留的Huge Pages(Huge Pages)。

还应该注意的是,这个新版本中修复了一些漏洞:

  • CVE-2022-23218,CVE-2022-23219: svcuix_create 和 clnt_create 函数中的缓冲区溢出,这是由于将文件名参数的内容复制到堆栈上而未检查复制数据的大小而导致的。 对于没有堆栈保护并使用“unix”协议构建的应用程序,该漏洞在处理非常长的文件名时可能导致恶意代码执行。
  • CVE-2021-3998: realpath() 函数中的一个漏洞,该漏洞是由于在某些条件下返回不正确的值而导致的,其中包含来自堆栈的未清理的残留数据。 对于SUID-root fusermount程序,该漏洞可用于从进程内存中获取敏感信息,例如获取指针信息。
  • CVE-2021-3999: getcwd() 函数中的单字节缓冲区溢出。 该问题是由自 1995 年以来一直存在的错误引起的。要调用溢出,在单独的挂载点命名空间中,只需在“/”目录上调用 chdir()。

最后 如果您有兴趣了解更多信息, 您可以在中查看详细信息 以下链接。


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。