搜索

5.4. 程序错误修复

download PDF

这部分论述了在 Red Hat Enterprise Linux 8.2 中修复的对用户有严重影响的错误。

5.4.1. 安装程序和镜像创建

使用 版本inst.version 内核引导参数不再停止安装程序

在以前的版本中,使用 versioninst.version 引导参数从内核命令行引导安装程序可打印该版本,如 anaconda 30.25.6,并停止安装程序。

在这个版本中,当安装程序从内核命令行引导时,版本inst.version 参数会被忽略,因此安装程序不会被停止。

(BZ#1637472)

支持安装程序中的 s390x 安全引导

在以前的版本中,RHEL 8.1 支持准备引导磁盘,以便在 IBM Z 环境中使用,这些磁盘强制使用安全引导。安装期间使用的服务器和虚拟机监控程序的功能决定了生成的磁盘上格式是否包含安全引导支持。安装期间无法影响磁盘格式。因此,如果您在一个支持安全引导的环境中安装了 RHEL 8.1,则该系统无法在移到一个缺乏安全引导支持的环境中引导,例如在有些故障转移中完成的操作。

有了这个更新,您现在可以配置 zipl 工具的安全引导选项。要做到这一点,您可以使用:

  • Kickstart zipl 命令及其选项之一,例如: --secure-boot、--no-secure-boot--force-secure-boot
  • 在 GUI 中的 安装概述 窗口中,您可以选择 System > Installation Destination > Full disk summary 和 boot loader 链接并设置引导设备。因此,现在可以在缺乏安全引导支持的环境中引导安装。

(BZ#1659400)

安全引导功能现在可用

在以前的版本中,secure = 引导选项的默认值没有被设置为 auto,因此无法使用安全引导功能。在这个版本中,除非之前配置了,否则默认值被设置为 auto,安全引导功能现在可用。

(BZ#1750326)

/etc/sysconfig/kernel 文件不再引用 new-kernel-pkg 脚本

在以前的版本中,/etc/sysconfig/kernel 文件引用 new-kernel-pkg 脚本。但是,RHEL 8 系统中没有包括 new-kernel-pkg 脚本。在这个版本中,对 new-kernel-pkg 脚本的引用已从 /etc/sysconfig/kernel 文件中被删除。

(BZ#1747382)

安装不会超过 boot-device NVRAM 变量中允许设备的最大数量

在以前的版本中,RHEL 8 安装程序在 boot-device NVRAM 变量中设置大于允许设备的最大数量。因此,在设备数量超过最大设备的系统中安装会失败。在这个版本中,RHEL 8 安装程序会检查最大设备设置,且只添加允许的设备数量。

(BZ#1748756)

安装适用于在非网络位置的 Kickstart 文件中使用 URL 命令的镜像位置

在以前的版本中,当镜像远程位置触发的网络激活在非网络位置的 Kickstart 文件中通过 URL 命令指定时,安装过程会在早期失败。在这个版本中解决了这个问题,以及使用位于非网络位置的 Kickstart 文件中的 URL 命令提供镜像位置的安装(如 CD-ROM 或本地块设备)可以正常工作。

(BZ#1649359)

RHEL 8 安装程序只检查 ECKD DASD 的未格式化设备

在以前的版本中,当检查未格式化的设备时,安装程序会检查所有 DASD 设备。但是,安装程序应该只检查了 ECKD DASD 设备。因此,当使用带有 SWAPGEN 的 FBA DASD 设备时,安装会失败。在这个版本中,安装程序不会检查 FBA DASD 设备,安装可以成功完成。

(BZ#1715303)

5.4.2. 软件管理

yum repolist 不再以第一个不可用存储库结束

在以前的版本中,存储库配置选项 skip_if_unavailable 默认设置为如下:

skip_if_unavailable=false

此设置强制 yum repolist 命令以 第一个不可用存储库结束,并显示错误并退出状态 1。因此,yum repolist 不会继续列出可用的软件仓库。

有了这个更新,yum repolist 已被修复,不再需要任何下载。因此,yum repolist 不会提供任何需要元数据的输出,命令现在继续按预期列出可用的存储库。

请注意,可用软件包的数量仅由 yum repolist --verboseyum repoinfo 返回,后者仍需要可用元数据。因此,这些命令将结束第一个不可用存储库。

(BZ#1697472)

5.4.3. Shell 和命令行工具

ReaR 更新

RHEL 8.2 对 Relax-and-Recover(ReaR)程序引入了多个更新。

构建目录处理已被更改。在以前的版本中,如果 ReaR 失败,构建目录会临时保留。在这个版本中,构建目录默认在非交互式运行中删除,以防止消耗磁盘空间。

KEEP_BUILD_DIR 配置变量的语义经过增强,以包含新的 错误 值。您可以将 KEEP_BUILD_DIR 变量设置为以下值:

  • 出错 时保留构建目录以用于调试的错误(之前的行为)
  • y (true)以始终保留构建目录
  • N (false)永不保留构建目录

默认值为空字符串,其含义为以交互方式(在终端中)执行 ReaR的错误 ;如果以非交互方式执行 ReaR,则默认 值为 false。请注意,KEEP_BUILD_DIR 在调试模式(-d)和 debugscript 模式(-D)中自动设置为 true ;此行为尚未更改。

主要程序错误修复包括:

  • 修复了对 NetBackup 8.0 的支持。
  • Rear 不再 会中止 bash 错误与 xrealloc 类似的问题:无法分配给 每个组有大量用户、组和用户的系统。
  • bconsole 命令现在显示其提示,这可让您在使用 Bacula 集成时执行恢复操作。
  • docker 服务正在运行,但没有定义 docker root 目录,或者无法确定 docker 服务的状态时,ReaR 现在可以正确地备份文件。
  • 当使用精简池或在 Migration Mode 中恢复系统时,恢复不再会失败。
  • 在使用 LVM 的恢复过程中,initramfs 的重建非常慢。
  • 现在,在使用 UEFI 引导装载程序时,Re ar 在 AMD 和 Intel 64 位构架中创建一个可引导 ISO 镜像。在这个设置中引导救援镜像不再在 Grub 中中止,并显示错误消息 Unknown command 'configfile'(…​)Entering rescue mode…​。此设置中对 GRUB_RESCUE 的支持(之前因为缺少 XFS 文件系统支持而失败)也已被修复。

(BZ#1729501)

mlocate-updatedb.timer 现在在 mlocate 软件包安装过程中启用

在以前的版本中,文件数据库重新索引不会被自动执行,因为 mlocate-updatedb.timer 计时器在 mlocate 软件包安装后被禁用。在这个版本中,mlocate-updatedb.timer 定时器现在是 90-default.preset 文件的一部分,在 mlocate 软件包安装后默认启用。因此,文件数据库会自动更新。

(BZ#1817591)

5.4.4. 基础架构服务

dnsmasq 现在可以正确地处理非递归 DNS 查询

在以前的版本中,dnsmasq 将所有非递归查询转发到上游服务器,这会导致不同的响应。在这个版本中,对本地已知名称(如 DHCP 主机租用名称或从 /etc/hosts 文件读取的主机)的非递归查询由 dnsmasq 处理,且不会转发到上游服务器。因此,返回与对已知名称的递归查询相同的响应。

(BZ#1700916)

在系统时间更改后,dhclient 不再无法续订 IP 地址

在以前的版本中,如果系统时间更改,系统可能会因为内核删除而丢失分配的 IP 地址。在这个版本中,dhclient 使用单调计时器检测向后时间跳转,并在系统时间停止跳转时发出 DHCPREQUEST 消息用于租用扩展。因此,系统不会在上述场景中丢失 IP 地址。

(BZ#1729211)

ipcalc 现在返回正确的 /31 网络的广播地址

在这个版本中,ip calc 工具被正确遵循 RFC 3021 标准。因此,当接口中使用 /31 前缀时,ip calc 会返回正确的广播地址。

(BZ#1638834)

/etc/services 现在包含正确的 NRPE 端口定义

在这个版本中,在 /etc/services 文件中添加了正确的 Nagios Remote Plug-in Executor(NRPE)服务端口定义。

(BZ#1730396)

postfix DNS 解析器代码现在使用 res_search 而不是 res_query

postfix 中的上一更新之后,DNS 解析器代码使用 res_query 功能而不是 res_search 功能。因此,DNS 解析器不会使用以下 postfix 配置在当前和父域中搜索主机名:

# postconf -e "smtp_host_lookup = dns"
# postconf -e "smtp_dns_resolver_options = res_defnames, res_dnsrch"

例如:

# postconf -e "relayhost = [smtp]"

并且 example.com 格式的域名,DNS 解析器没有使用 smtp.example.com SMTP 服务器进行转发。

在这个版本中,DNS 解析器代码已被修改为使用 res_search 而不是 res_query,它现在可以正确地搜索当前和父域中的主机名。

(BZ#1723950)

PCRE、CDB 和 SQLite 现在可以与 Postfix 一起使用

在 RHEL 8 中,postfix 软件包 被分成多个子软件包,每个子软件包为特定数据库提供一个插件。在以前的版本中,包含 postfix-pcre、postfix -cdbpostfix-sqlite 插件的 RPM 软件包不会被分发。因此,使用这些插件的数据库无法与 Postfix 一起使用。在这个版本中,将包含 PCRE、CDB 和 SQLite 插件的 RPM 软件包添加到 AppStream 仓库中。因此,可以在安装相应的 RPM 软件包后使用这些插件。

(BZ#1745321)

5.4.5. 安全性

fapolicyd 不再阻止 RHEL 更新

当更新替换了正在运行的应用程序的二进制文件时,内核会通过附加 " (deleted)" 后缀来修改内存中的应用程序二进制路径。在以前的版本中,fapolicyd 文件访问策略守护进程将此类应用程序视为不受信任的应用程序,并阻止它们打开和执行任何其他文件。因此,在应用更新后系统有时无法引导。

RHBA-2020:5243 公告提供发行版本中,fapolicyd 忽略二进制路径中的后缀,以便二进制文件与信任数据库匹配。因此,fapolicyd 会正确强制执行规则,更新过程也可以完成。

(BZ#1897091)

openssl-pkcs11 不再通过尝试登录到多个设备锁定设备

在以前的版本中,openssl-pkcs11 引擎会尝试使用提供的 PKCS #11 URI 登录搜索的第一个结果,即使第一个结果不是预期的设备和 PIN 匹配另一个设备。这些失败的身份验证尝试锁定该设备。

OpenSSL-pkcs11 现在,只有在提供的 PKCS #11 URI 匹配单个设备时才会尝试登录到设备。现在,如果 PKCS #11 搜索发现多个设备,引擎现在特意失败。因此,您必须提供一个 PKCS #11 URI,在使用 openssl-pkcs11 时仅匹配单个设备来登录该设备。

(BZ#1705505)

使用 rpmverifyfileOpenSCAP 离线扫描现在可以正常工作

在以前的版本中,OpenSCAP 扫描程序 没有以离线模式正确更改当前工作目录,并且未使用 OpenSCAP rpmverifyfile 探测中正确的参数调用 fchdir 功能。已修复 OpenSCAP 扫描程序,以离线模式正确更改当前工作目录,并且修复 fchdir 功能以在 rpmverifyfile 中使用正确的参数。因此,OpenSCAP 可以使用包含 OVAL rpmverifyfile 的 SCAP 内容扫描任意文件系统。

(BZ#1636431)

现在,如果在 PKCS #11 设备中没有匹配的公钥的情况下使用 ECDSA 私钥,httpd 现在可以正确启动

与 RSA 密钥不同,ECDSA 私钥不一定包含公钥信息。在这种情况下,您无法从 ECDSA 私钥获取公钥。因此,PKCS #11 设备将公钥信息存储在单独的对象中,无论是公钥对象还是证书对象。OpenSSL 预期引擎提供的 EVP_PKEY 结构用于存放公钥信息的私钥。填写要提供给 OpenSSL 的 EVP_PKEY 结构时,openssl-pkcs11 软件包中的引擎会尝试仅从匹配的公钥对象获取公钥信息,并忽略当前证书对象。

当 OpenSSL 从引擎请求 ECDSA 私钥时,提供的 EVP_PKEY 结构不包含公钥信息,如果 PKCS #11 设备中没有公钥,即使有匹配的证书可用,也是如此。因此,由于 Apache httpd web 服务器调用 X509_check_private_key() 函数,这在启动过程中需要公钥,因此 httpd 在此场景下无法启动。如果公钥对象不可用,可以通过从证书加载 EC 公钥来解决此问题。现在,当 ECDSA 密钥存储在 PKCS #11 设备中时,httpd 可以被正确启动。

(BZ#1664807)

现在 ,审计规则的 SCAP-security-guide PCI-DSS 补救可以正常工作

在以前的版本中,scap-security-guide 软件包包含补救的组合和可导致以下情况之一的检查:

  • 错误修复审计规则
  • 扫描评估包含通过的规则被标记为失败的假正值

因此,在 RHEL 安装过程中,扫描安装的系统会报告一些审计规则为失败或错误。

在这个版本中,补救已被修复,使用 PCI-DSS 安全策略安装的系统的扫描不再为审计规则报告假的正状态。

(BZ#1754919)

OpenSCAP 现在提供虚拟机和容器的离线扫描

在以前的版本中,重构 OpenSCAP 代码库会导致某些 RPM 探测无法以离线模式扫描虚拟机和容器文件系统。因此,下列工具无法包含在 openscap-utils 软件包中: oscap-vmoscap-chroot。另外,opens cap-containers 软件包已从 RHEL 8 中完全删除。在这个版本中,探测的问题已被解决。

因此,RHEL 8 现在在 openscap-utils 软件包中包含 oscap-podmanoscap-vmoscap-chroot 工具。

(BZ#1618489)

OpenSCAP rpmverifypackage 现在可以正常工作

在以前的版本中,rpm verifypackage 探测调用 chdirchroot 系统调用两次。因此,在使用自定义 Open Vulnerability 和评估语言(OVAL)内容的 OpenSCAP 扫描过程中使用该探测时会出现错误。已修复 rpmverifypackage 探测,以正确使用 chdirchroot 系统调用。因此,rpm verifypackage 现在可以正常工作。

(BZ#1646197)

5.4.6. 网络

现在锁定在 qdisc_run 功能中不会导致内核崩溃

在以前的版本中,当删除流量时 pfifo_fast 队列强制重置时,在数据包释放后会导致数据包传输的竞争条件。因此,有时内核被意外终止。有了这个更新,qdisc_run 函数中的锁已被改进。因此,内核不会在上述情况下崩溃。

(BZ#1744397)

org.fedoraproject 中的 DBus API.FirewallD1.config.service 可以按预期工作

在以前的版本中,DBus API getIncludessetIncludesqueryIncludes 功能在 org.fedoraproject.FirewallD1 中返回错误消息: org.fedoraproject.FirewallD1.Exception:因为索引错误,列出索引范围。在这个版本中,DBus API getIncludessetIncludesqueryIncludes 功能可以正常工作。

(BZ#1737045)

在卸载 ipvs 模块时,RHEL 不再记录内核警告

在以前的版本中,IP 虚拟服务器(ipvs)模块使用不正确的参考计数,这会导致卸载模块时出现竞争条件。因此,RHEL 记录了内核警告。在这个版本中解决了竞争条件。因此,当您卸载 ipvs 模块时,内核不再记录警告。

(BZ#1687094)

nft 实用程序在第一个非选项参数后不再将参数解释为命令行选项

在以前的版本中,nft 工具在 nft 命令中接受任何位置的选项。例如,管理员可以在非选项参数之间或之后使用选项。因此,由于前导短划线,nf t 将负优先级值解析为选项,命令会失败。nft 实用程序的命令行解析器已更新,不解释读取第一个非选项参数后以短划线开头的参数。因此,管理员不再需要将负优先级值传递给 nft

请注意,由于此更改,您必须在第一个非选项参数之前将所有命令选项传递到 nft。在更新之前,请验证 nftables 脚本是否满足这一新条件,以确保安装此更新后脚本可以按预期工作。

(BZ#1778883)

/etc/hosts.allow/etc/hosts.deny 文件不再包含对删除的 tcp_wrappers的过时引用

在以前的版本中,/etc/hosts.allow/etc/hosts.deny 文件包含有关 tcp_wrappers 软件包的过期信息。这些文件在 RHEL 8 中被删除,因为删除的 tcp_wrappers 不再需要这些文件。

(BZ#1663556)

firewalld 中添加了一个配置参数来禁用区域偏移

在以前的版本中,firewalld 服务包含一个未记录的行为,称为"zone drifting"。RHEL 8.0 删除了这个行为,因为它可能会造成负面影响。因此,在使用这个行为配置 catch-all 或 fallback zone 的主机上,firewalld 会拒绝之前允许的连接。在这个版本中,重新添加了区 drifting 功能,但作为一个可配置的功能。现在,用户可以决定使用区 drifting 功能,也可以禁用它并使用防火墙进行安全设置。

默认情况下,在 RHEL 8.2 中,/etc/firewalld/firewalld.conf 文件中的新 AllowZoneDrifting 参数被设置为 yes。请注意,如果启用了该参数,firewalld 日志:

WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.

(BZ#1772208)

5.4.7. 内核

现在完全支持子部分内存热插拔

在以前的版本中,一些平台与物理内存区域一致,如 Dual In-Line Modules(DIMM)和 interleave 设置为 64MiB 内存边界。但是,由于 Linux 热插拔子系统使用 128MiB 的内存大小,热插拔新设备会导致多个内存区域在单个热插拔内存窗口中重叠。因此,这会导致使用以下或类似的调用 trace 列出可用持久内存命名空间失败:

WARNING: CPU: 38 PID: 928 at arch/x86/mm/init_64.c:850
add_pages+0x5c/0x60
    [..]
    RIP: 0010:add_pages+0x5c/0x60
    [..]
    Call Trace:
     devm_memremap_pages+0x460/0x6e0
     pmem_attach_disk+0x29e/0x680 [nd_pmem]
     ? nd_dax_probe+0xfc/0x120 [libnvdimm]
     nvdimm_bus_probe+0x66/0x160 [libnvdimm]

在这个版本中解决了这个问题,并支持 Linux 热插拔子系统来启用多个内存区域共享一个热插拔内存窗口。

(BZ#1724969)

数据崩溃现在触发 BUG 而不是 WARN 消息

在这个版本中,lib /list_debug.c 列表会触发 BUG,它会生成带有 vmcore 的报告。在以前的版本中,当遇到数据崩溃时,会生成一个简单的 WARN,这很可能不被留意。设置 CONFIG_BUG_ON_DATA_CORRUPTION 后,内核现在会创建一个崩溃并触发 BUG 来应对数据损坏。这可防止进一步损坏并降低安全风险。kdump 现在会生成 vmcore,它可改进数据损坏错误报告。

(BZ#1714330)

提供了对 Intel Carlsville 卡的支持,但不在 RHEL 8.2 中验证

提供了 Intel Carlsville 卡支持,但不在 Red Hat Enterprise Linux 8.2 上进行测试。

(BZ#1720227)

RPS 和 XPS 不再将作业放在隔离的 CPU 中

在以前的版本中,接收数据包提取(RPS)软件队列机制和传输包服务关联(XPS)可传输在所有 CPU 集合上分配的队列选择机制,包括隔离的 CPU。因此,当对延迟敏感的工作负载使用与运行 RPS 或 XPS 作业相同的 CPU 时,可能会导致实时环境中出现意外延迟。在这个版本中,storage _rps_map() 函数不包括任何隔离的 CPU 用于 RPS 配置。同样,用于 XPS 配置的内核驱动程序也尊重 CPU 隔离。因此,在上述场景中,RPS 和 XPS 不再将作业放在隔离的 CPU 上。如果在 /sys/devices/pci*/net/dev/queues/rx-*/rps_cpus 文件中配置隔离 CPU,会出现以下错误:

Error: "-bash: echo:write error: Invalid argument"

但是,在 /sys/devices/pci*/net/dev/queues/tx-*/xps_cpus 文件中手动配置隔离 CPU 成功在隔离的 CPU 上分配 XPS 作业。

请注意,在具有隔离 CPU 的环境中网络工作负载可能会遇到一些性能变化。

(BZ#1867174)

5.4.8. 文件系统和存储

SCSI 驱动程序不再使用过多内存

在以前的版本中,某些 SCSI 驱动程序使用的内存比 RHEL 7 中的内存更大。在某些情况下,比如在光纤通道主机总线适配器(HBA)上创建 vPort,内存用量过量,具体取决于系统配置。

内存用量增加是由块层中内存预分配造成的。多队列块设备调度(BLK-MQ)和每个 I/O 请求的多队列 SCSI 堆栈(SCSI-MQ)预分配内存,从而增加内存用量。

在这个版本中,块层限制预分配的内存量,因此 SCSI 驱动程序不再使用过多内存。

(BZ#1698297)

现在,VDO 可以在 UDS 完成重建前挂起

在以前的版本中,如果您试图在 UDS 索引重新构建时挂起 VDO 卷,d msetup suspend 命令就会变得无响应。该命令仅在重建后完成。

在这个版本中,这个问题已被解决。dmsetup suspend 命令可以在 UDS 重新构建之前完成,而不会变得无响应。

(BZ#1737639)

5.4.9. 动态编程语言、网页和数据库服务器

mod_cgid 日志记录中的问题已被解决

在更新之前,如果在线程多处理模块(MPM)下使用了 mod_cgid Apache httpd 模块,则会出现以下日志记录问题:

  • CGI 脚本的 stderr 输出没有使用标准时间戳信息作为前缀。
  • 如果已配置,CGI 脚本的 stderr 输出没有正确重定向到特定于 VirtualHost 的日志文件。

在这个版本中解决了这个问题,mod _cgid 日志记录现在可以正常工作。

(BZ#1633224)

5.4.10. 编译器和开发工具

如果 dlopen 失败,unrelocated 和未初始化共享对象不再会导致失败

在以前的版本中,如果 dlopen 调用失败,glibc 动态链接程序不会在报告错误前删除带有 NODELETE 标记的共享对象。因此,未重新定位和未初始化的共享对象会保留在进程镜像中,最终会导致断言失败或崩溃。在这个版本中,动态加载器使用待处理的 NODELETE 状态在 dlopen 失败时删除共享对象,然后将其标记为 NODELETE。因此,进程不会留下任何未重新定位的对象。另外,在 ELF 构造函数和析构函数运行时的惰性绑定失败现在会终止进程。

(BZ#1410154)

64 位 ARM 架构中的高级 SIMD 功能在临时解决方案后不再复杂

在以前的版本中,当延迟解析高级 SIMD 功能时,用于高级 SIMD 的新向量标准(PCS)无法正确保存和恢复某些调用者保存的寄存器。因此,二进制文件可能会在运行时发生错误。在这个版本中,符号表中的 Advanced SIMD 和 SVE 向量函数标记为 .variant_pcs,因此动态链接器会早期绑定这些函数。

(BZ#1726641)

sudo wrapper 脚本现在解析选项

在以前的版本中,/opt/redhat/devtoolset*/root/usr/bin/sudo wrapper 脚本无法正确解析 sudo 选项。因此,无法执行一些 sudo 选项(如 sudo -i)。在这个版本中,可以正确地解析更多 sudo 选项,因此 sudo 打包程序脚本的工作方式更像 /usr/bin/sudo

(BZ#1774118)

修复了 glibc 中的 TLS 变量对齐的问题

在以前的版本中,在某些情况下,一致的线程本地存储(TLS)数据可能会实例化而无需预期的对齐。在这个版本中,POSIX Thread Library libpthread 已被改进,以确保在任何条件下都正确一致。因此,为所有带有正确对齐的线程正确实例化了一致的 TLS 数据。

(BZ#1764214)

EINTREAGAIN 错误后重复的 pututxline 调用不再破坏 utmp 文件

pututxline 函数试图获取锁定且不成功时,该函数会返回 EINTREAGAIN 错误代码。在以前的版本中,如果立即调用 pututxline 并被管理来获取锁定,则它没有在 utmp 文件中使用已分配的匹配插槽,而是添加另一个条目。因此,这些未使用的条目极大地增加了 utmp 文件的大小。在这个版本中解决了这个问题,条目已正确添加到 utmp 文件中。

(BZ#1749439)

当发生内部故障时,m trace 不再挂起

在以前的版本中,mtrace 工具实现中的一个缺陷可能会导致内存追踪挂起。为解决这个问题,mtrace 内存追踪实现功能更强,即使在内部故障的情况下也能避免挂起。现在,用户可以调用 mtrace,它不再挂起,从而在有限制的时间里完成。

(BZ#1764235)

fork 功能可避免使用 pthread_atfork相关的某些死锁

在以前的版本中,如果程序注册了 in fork 处理程序并从异步信号处理程序调用 fork,则依赖内部实现的锁定中的缺陷可能会导致程序停滞。在这个版本中,对 fork 及其 for fork 处理程序 的实施进行了调整,以避免单线程程序中出现死锁。

(BZ#1746928)

strstr 不再返回对截断模式的不正确的匹配

在某些 IBM Z 平台(z15,以前称为 arch13)上,strstr 函数在处理跨页面边界的搜索模式时无法正确更新 CPU 寄存器。因此,strstr 返回了不正确的匹配项。在这个版本中解决了这个问题,strstr 在 上面提到的场景中可以正常工作。

(BZ#1777241)

glibc 中的 C.UTF-8 本地源省略表达式已被修复

在以前的版本中,C.UTF-8 源区域中的一个缺陷会导致 U+10000 之外的所有 Unicode 代码点都缺乏校验权重。因此,所有超过 U+10000 的代码点均无法按预期互操作。C.UTF-8 源区域设置已被修正,新编译的二进制区域现在对所有 Unicode 代码点具有排序权重。因为这个修复,编译的 C.UTF-8 区域设置会较大 5.3MiB。

(BZ#1361965)

当在不调用 setpwent() 的情况下调用 getpwent() 时,glibc 不再会失败。

如果您的 /etc/nsswitch.conf 文件指向 Berkeley DB(db)密码提供商,则可以使用 getpwent() 函数来请求数据,而无需首先调用 setpwent()。当您调用 endpwent() 函数时,在没有首先调用 setpwent() 的情况下进一步调用 getpwent() 会导致 glibc 失败,因为 endpwent() 无法重置间隔以允许新的查询。在这个版本中解决了这个问题。因此,在使用 endpwent() 结束一个查询后,对 getpwent() 的其他调用将启动一个新的查询,即使您没有调用 setpwent()。

(BZ#1747502)

ltrace 现在可以跟踪强化二进制文件中的系统调用

在以前的版本中,ltrace 在 AMD 和 Intel 64 位构架中不会在特定强化的二进制文件(如系统二进制文件)中产生任何结果。在这个版本中,lt race 可以跟踪强化的二进制文件中的系统调用。

(BZ#1655368)

Intel 的 JCC 漏洞不再会在 GCC 编译器中造成大量性能损失

某些 Intel CPU 受到 Jump Conditional Code(JCC)错误影响,从而导致机器指令被错误地执行。因此,受影响的 CPU 可能无法正确执行程序。完整的修复涉及更新有安全漏洞的 CPU 的微码,这可能会导致性能下降。在这个版本中,在 assembler 中启用了一个临时解决方案,可帮助减少性能丢失。默认情况下不启用临时解决方案

要应用该临时解决方案,请使用 GCC 重新编译带有 -Wa,-mbranches-with-32B-boundaries 命令行选项的程序。使用这个命令行选项重新编译的程序不会受到 JCC 缺陷的影响,但 microcode 更新仍然需要完全保护系统。

请注意,应用临时解决方案会增加程序的大小,并可能导致性能下降,尽管没有重新编译应该小于它。

(BZ#1777002)

使用并行构建时 make 不再减慢

在以前的版本中,当运行并行构建时,当等待其轮流运行时, 进程可能会临时变得无响应。因此,带有高 -j 值的构建会减慢或以较低有效 -j 值运行。在这个版本中,make 的作业控制逻辑没有阻塞。因此,具有高 -j 值的构建会以全 -j 速度运行。

(BZ#1774790)

ltrace 工具现在正确报告功能调用

由于改进了应用于所有 RHEL 组件的二进制强化,ltrace 工具之前无法在 RHEL 组件的二进制文件中检测功能调用。因此,lt race 输出为空,因为它没有报告在此类二进制文件中使用任何检测到的调用。这个更新解决了 ltrace 处理函数调用的方式,这防止了上面描述的问题的发生。

(BZ#1618748)

5.4.11. Identity Management

dsctl 实用程序不再无法在其名称中管理带有连字符的实例

在以前的版本中,dsctl 实用程序无法正确解析 Directory Server 实例名称中的连字符。因此,管理员无法使用 dsctl 管理名称中带有连字符的实例。在这个版本中解决了这个问题,dsctl 现在可以正常工作。

(BZ#1715406)

目录服务器实例名称现在可以有最多 103 个字符

当 LDAP 客户端建立与目录服务器的连接时,服务器会将与客户端地址相关的信息存储在本地缓冲区中。在以前的版本中,这个缓冲区的大小太小,无法存储超过 46 个字符的 LDAPI 路径名称。例如,如果 Directory Server 实例的名称太长,就会出现这种情况。因此,服务器因为缓冲区溢出而意外终止。在这个版本中,缓冲区大小增加到 Netscape Portable Runtime(NSPR)库对路径名称支持的最大大小。因此,在上述场景中 Directory 服务器不再崩溃。

请注意,由于 NSPR 库中的限制,实例名称可以最多 103 个字符。

(BZ#1748016)

pkidestroy 工具现在选择正确的实例

在以前的版本中,在一个半删除的实例上执行的 pkidestroy --force 命令默认选择 pki-tomcat 实例,无论使用 -i 实例 选项指定的实例名称是什么。

因此,这会删除 pki-tomcat 实例,而不是预期的实例,--remove-logs 选项不会删除预期的实例日志。pkidestroy 现在应用正确的实例名称,仅删除预期实例的左边。

(BZ#1698084)

sssd-ldap man page 中更新了 ldap_user_authorized_service 描述

RHEL 8 中更改了可插拔验证模块(PAM)堆栈。例如,systemd 用户会话现在使用 systemd -user PAM 服务启动 PAM 对话。此服务现在递归包含 system-auth PAM 服务,其中可能包括 pam_sss.so 接口。这意味着始终调用 SSSD 访问控制。

在为 RHEL 8 系统设计访问控制规则时,您应该了解这一变化。例如,您可以将 systemd-user 服务添加到允许的服务列表中。

请注意一些访问控制机制,如 IPA HBAC 或 AD GPOs,默认情况下 systemd-user 服务已添加到允许的服务列表中,您不需要进行任何操作。

sssd-ldap man page 已更新,以包含此信息。

(BZ#1669407)

现在,在 IdM 中启用 AD 信任支持时会显示有关所需 DNS 记录的信息

在以前的版本中,当启用对带有外部 DNS 管理的 Red Hat Enterprise Linux Identity Management(IdM)安装中的 Active Directory(AD)信任时,不会显示有关所需 DNS 记录的信息。手动输入 ipa dns-update-system-records --dry-run 命令是 necesary,以获取 IdM 所需的所有 DNS 记录列表。

在这个版本中,ipa -adtrust-install 命令可以正确地列出 DNS 服务记录,以便手动添加 DNS 区域。

(BZ#1665051)

现在,在带有集成 DNS 的 IdM 服务器中默认禁用递归 DNS 查询

在以前的版本中,在使用带有集成 DNS 的身份管理(IdM)服务器时,默认启用递归查询。因此,有可能使用服务器进行 DNS 放大攻击。有了这个更新,现在默认禁用递归 DNS 查询,且不再使用服务器进行 DNS 放大攻击。

您可以通过修改 IdM 服务器上的集成 DNS 配置来手动允许对特定客户端的递归查询。例如,要允许任何人查询服务器以获取权威数据,但只允许可信客户端访问您的缓存和递归,请在 trusted 访问控制列表(ACL)中列出客户端:

  1. /etc/named/ipa-ext.conf 文件中创建一个 trusted ACL:

    acl "trusted" {
         192.168.0.0/16;
         10.153.154.0/24;
         localhost;
         localnets;
     };
  2. trusted ACL 添加到 /etc/named/ipa-options-ext.conf 文件中:

         allow-query { any; };
         allow-recursion { trusted; };
         allow-query-cache { trusted; };

(BZ#2151696)

5.4.12. Desktop

当使用软件渲染器时,Wayland 上的 GNOME Shell 不再缓慢

在以前的版本中,当使用软件渲染器时,GNOME Shell 的 Wayland 后端没有使用可缓存的帧缓冲程序。因此,与 X.org 后端的软件渲染的 GNOME Shell 相比,Wayland 上的软件渲染 GNOME Shell 速度较慢。

在这个版本中,Wayland 的 GNOME Shell 中添加了中间的 shadow 帧缓冲。因此,Wayland 上的软件渲染的 GNOME Shell 现在和 X.org 上的 GNOME Shell 一样执行。

(BZ#1737553)

5.4.13. 虚拟化

在 10 代 Intel Core 处理器中启动虚拟机不再失败

在以前的版本中,在使用第 10 代 Intel Core 处理器(也称为 Icelake-Server)的主机模型中启动虚拟机(VM)会失败。在这个版本中,lib virt 不再尝试禁用 QEMU 不支持的 pconfig CPU 功能。因此,在运行 10 代 Intel 处理器的主机模型中启动虚拟机不再会失败。

(BZ#1749672)

使用 cloud-init 在 Microsoft Azure 上置备虚拟机现在可以正常工作

在以前的版本中,无法使用 cloud-init 工具在 Microsoft Azure 平台上置备 RHEL 8 虚拟机(VM)。在这个版本中,Azure 端点 的 cloud-init 处理已被修复,Azure 上的 RHEL 8 虚拟机现在可以按预期进行。

(BZ#1641190)

RHEL 7 主机上的 RHEL 8 虚拟机可在高于 1920x1200 的分辨率中可靠地查看

在以前的版本中,当使用在 RHEL 7 主机系统中运行的 RHEL 8 虚拟机(VM)时,显示虚拟机图形输出(如在 kiosk 模式下运行应用程序)的某些方法不能超过 1920x1200。因此,即使主机硬件支持更高的分辨率,使用这些方法显示虚拟机也只能达到 1920x1200 的分辨率。这个版本会调整 DRM 和 QXL 驱动程序,以防止上述问题的发生。

(BZ#1635295)

使用 cloud-init 自定义 ESXi 虚拟机并重启虚拟机现在可以正常工作

在以前的版本中,如果 cloud-init 服务用于修改在 VMware ESXi hypervisor 上运行的虚拟机(VM)以使用静态 IP,然后克隆虚拟机,则新的克隆虚拟机在某些情况下需要很长时间才能重启。在这个版本中,cloud-init 不会将虚拟机的静态 IP 重新写入 DHCP,这可防止上述问题发生。

(BZ#1666961, BZ#1706482)

5.4.14. 容器

从 quay.io 注册表中提取镜像不再会导致意外的镜像

在以前的版本中,在 /etc/containers/registries.conf 提供的默认 registry 搜索列表中列出 quay. io 容器镜像 registry 可允许用户在使用简短名称时拉取欺骗镜像。为解决这个问题,quay.io 容器镜像 registry 已从 /etc/containers/registries.conf 的默认 registry 搜索列表中删除。因此,从 quay.io registry 中拉取镜像现在要求用户指定完整的存储库名称,如 quay.io/myorg/myimage。quay.io registry 可以添加回 /etc/containers/registries.conf 中的默认 registry 搜索列表中,以使用短名称重新启用拉取容器镜像,但不建议这样做,因为它可能会造成安全风险。

(BZ#1784267)

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.