For the complete documentation index, see llms.txt. This page is also available as Markdown.

FreeBSD 13.1-RELEASE 发行说明(2022 年 5 月 16 日)

摘要

FreeBSD 13.1-RELEASE 的发行说明总结了在 13-STABLE 开发分支中对 FreeBSD 基本系统所作的变更。本文件列出了自上次发行以来发布的适用安全公告,以及对 FreeBSD 内核和用户空间的重大变更。此外,还简要介绍了升级相关的注意事项。

引言

本文件包含 FreeBSD 13.1-RELEASE 的发行说明,介绍了最近添加、变更或删除的功能,同时提供了从 FreeBSD 早期版本升级的相关说明。

本发行说明所适用的发行版,代表了 13-STABLE 开发分支自创建以来的最新节点。有关此分支上预构建的二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/

本发行说明所涉的发行版,位于 13-STABLE 开发分支中 13.0-RELEASE 和未来 13.2-RELEASE 之间的某一节点。有关此分支上预构建的二进制发行版的信息,请访问 https://www.FreeBSD.org/releases/

FreeBSD 13.1-RELEASE 是一种 RELEASE 发行版,可以从 https://www.FreeBSD.org/releases/ 或其任一镜像站下载。获取此版本(或其他版本)发行版的更多信息,请参阅 FreeBSD 手册 中的 获取 FreeBSD 附录

建议所有用户在安装 FreeBSD 之前,查阅发行版的勘误。勘误文档包含在发行周期后期或发行后发现的“最新信息”,通常包括已知错误、安全公告以及文档修订的相关内容。可以在 FreeBSD 网站上找到 FreeBSD 13.1-RELEASE 的最新勘误副本。

本文件介绍了自 13.0-RELEASE 以来,FreeBSD 中对用户最显著的新功能或变更。一般而言,本文中提到的变更是 13-STABLE 分支所独有的,除非明确标记为已合并功能。

发行说明通常记录自 13.0-RELEASE 以来发布的安全公告、新驱动程序或硬件支持、新命令或选项、重大错误修复或第三方软件升级。此外,还可能列出主要的 Ports/软件包变更或发行工程实践的更新。显然,发行说明无法列出两个版本之间 FreeBSD 的每一处变更;本文件主要关注安全公告、用户可见的变更以及主要的架构改进。

从旧版 FreeBSD 升级

通过 freebsd-update(8) 工具,可以在不同 RELEASE 版本之间(包括各安全分支的快照版本)进行二进制升级。该工具将更新未修改的用户空间工具,以及官方 FreeBSD 发行版中包含的未修改的 GENERIC 内核。使用 freebsd-update(8) 工具要求待升级的主机具备互联网连接。

支持从早期版本基于源代码的升级(即通过重新编译 FreeBSD 基本系统的源代码进行升级),具体请按照 /usr/src/UPDATING 中的说明操作。

对于所有 powerpc 架构的用户,在成功安装内核和世界后,需要手动运行 kldxref /boot/kernel

重要

在尝试升级 FreeBSD 之前,务必备份 所有 数据和配置文件。

重要

升级后,sshd(来自 OpenSSH 8.8p1)在重新启动之前不会接受新的连接。在安装新用户空间后,要么按照源代码升级程序的要求重启系统,要么执行 service sshd restart 来重启 sshd 服务。

安全与勘误

本节列出了自 13.0-RELEASE 以来的各项安全公告和勘误通知。

安全公告

公告
日期
主题

2021 年 2 月 24 日

login.access 未能应用规则

2021 年 2 月 24 日

jail_remove(2) 未能终止所有 Jail 进程

2021 年 2 月 24 日

jail_attach(2) 依赖调用者更改当前工作目录

2021 年 2 月 24 日

Xen 授权映射错误处理问题

2021 年 4 月 6 日

过时虚拟内存映射导致内存信息泄露

2021 年 4 月 6 日

accept_filter(9) 套接字配置接口中的双重释放

2021 年 4 月 6 日

通过挂载到 Jail 根目录可能实现 Jail 逃逸

2021 年 5 月 26 日

SMAP 绕过

2021 年 5 月 26 日

libradius(3) 缺少消息验证

2021 年 8 月 24 日

bhyve(8) 设备模型中缺少错误处理

2021 年 8 月 24 日

ggatec(8) 中的远程代码执行

2021 年 8 月 24 日

libfetch 越界读取

2021 年 8 月 24 日

多个 OpenSSL 漏洞

2022 年 1 月 11 日

vt 控制台缓冲区溢出

2022 年 3 月 15 日

多个 WiFi 问题

2022 年 3 月 15 日

OpenSSL 证书解析无限循环

2022 年 4 月 6 日

netmap 中潜在的 Jail 逃逸漏洞

2022 年 4 月 6 日

bhyve e82545 设备仿真越界写入

2022 年 4 月 6 日

mpr/mps/mpt 驱动 ioctl 堆越界写入

2022 年 4 月 6 日

802.11 堆缓冲区溢出

2022 年 4 月 6 日

zlib 压缩越界写入

勘误通知

勘误
日期
主题

2021 年 5 月 26 日

在 divert 套接字上传输时内核双重释放

2021 年 5 月 26 日

mpt(4) 在较大 maxphys 值下出现 I/O 错误

2021 年 5 月 26 日

pms(4) 数据损坏

2021 年 5 月 26 日

virtio(4) 设备探测失败

2021 年 5 月 26 日

dc 更新

2021 年 6 月 1 日

rad_get_attr(3) 中的不正确验证

2021 年 6 月 29 日

libc++ 中缺少 C++20 头文件

2021 年 6 月 29 日

libcasper 断言失败

2021 年 6 月 29 日

vlan(4) 缺少向后兼容性

2021 年 6 月 29 日

启用 ipfw 链路层过滤时内核崩溃

2021 年 6 月 29 日

Linux 兼容层 futex(2) 系统调用漏洞

2021 年 8 月 24 日

virtio_blk(4) 在某些虚拟机监控程序上无法挂载

2021 年 8 月 24 日

OpenSSL 1.1.1e API 函数未导出

2021 年 8 月 24 日

修复大型 IO 的 NVMe iovec 构建问题

2021 年 11 月 3 日

libevent1 ABI 不兼容

2021 年 11 月 3 日

根证书捆绑包更新

2021 年 11 月 3 日

修复 vmci 驱动初始化时的内核崩溃

2021 年 11 月 3 日

时区数据库信息更新

2022 年 1 月 11 日

fsck_ffs 未能纠正某些错误

2022 年 1 月 11 日

XSAVE 状态大小不正确

2022 年 1 月 11 日

某些 Hyper-V 版本的 vPCI 兼容性改进

2022 年 1 月 11 日

tail -F 未能跟随某些类型的日志轮转

2022 年 1 月 11 日

libalias 中对分片 IPv4 数据包的处理不正确

2022 年 2 月 1 日

Intel CPU LA57 引导失败

2022 年 3 月 15 日

ZFS 写入未能更新文件大小

2022 年 3 月 15 日

ZFS lseek(2) 不一致

2022 年 3 月 15 日

并发 zfs list 调用时 ZFS 崩溃

2022 年 3 月 22 日

时区数据库信息更新

用户空间

本节涉及对用户空间应用程序、第三方软件以及系统实用工具的变更和新增内容。

用户空间配置变更

选项 -i 现在默认添加到 /etc/defaults/rc.conf 中的 rtsol(8)rtsold(8)。变更详情见 a0fc5094bf4c(由 https://www.patreon.com/cperciva 赞助)。

用户空间应用程序变更

选项 -i 添加到 rtsol(8)rtsold(8) 中,用于禁用 0 到 1 秒的随机延迟,从而加快启动过程。8056b73ea163(由 https://www.patreon.com/cperciva 赞助)

对于 64 位架构,基本系统现在默认启用位置无关可执行文件(PIE)支持。可以通过开关 WITHOUT_PIE 禁用该功能,需要进行完全重新编译。396e9f259d96

新增 rc(8) 服务脚本 zfskeys,允许在启动过程中自动解密使用 ZFS 原生加密的 ZFS 数据集。更多信息请参考 rc.conf(5) 手册。33ff39796ffe8719e8a951b7(由 Modirum 和 Klara Inc. 赞助)

bhyve(8) 的 NVMe 仿真升级至 NVMe 规范的 1.4 版本。b7a2cf0d9102 eae02d959363

bhyve(8) 中构建大 IO 的 NVMe iovec 的问题修复完成,该问题由 Rocky Linux 8.4 附带的 UEFI 驱动暴露出来。a7761d19dacd

巴西葡萄牙语 ABNT2 键盘添加了额外的 Alt Gr 映射。310623908c20

chroot 现在支持非特权操作,chroot(8) 程序增加了选项 -n 以启用该功能。460b4b550dc9(由 EPSRC 赞助)

CAM 库已修改,以在解析设备名称之前使用 realpath(3),从而允许诸如 camcontrol(8)smartctl(8) 之类的工具在使用符号链接时更加友好。e32acf95ea25

兼容 Linux 的 md5sum(1) 和类似的消息摘要程序添加完成,方法是在程序名称以 sum 结尾时让相应的 BSD 程序带选项 -r 运行。c0d5665be0dc(由 Netflix 赞助)

svnlite(1) 默认在构建中禁用。a4f99b3c2384

mpsutil(8) 已扩展,以显示适配器信息并控制 NCQ。395bc3598b47

使用 camcontrol(8) 下载固件后设备出现的问题修复完成,方法是在下载固件后强制重新扫描 LUN。327da43602cc(由 Netflix 赞助)

第三方软件

LLDB 的构建支持已在所有 PowerPC 架构上启用。cb1bee9bd34

  • One True Awk 更新为上游的最新版本(20210215)。除一个补丁外,FreeBSD 的所有补丁被上游接纳或移除。主要变更包括:

    • 范围不再使用区域设置。

    • 修复了各种错误。

    • 提高了与 gawkmawk 的兼容性。 剩余的一项 FreeBSD 修改可能会在 FreeBSD 14 中移除,目前依然允许将以 0x 为前缀的十六进制数解析并解释为十六进制数,而其他 awk 实现(现在包括 One True Awk)将其解释为 0,符合 awk 的历史行为。

  • zlib 升级到版本 1.2.12。

  • libarchive 升级到版本 3.6.0,并包含即将发布的修补程序版本中的额外错误和安全修复。发行说明可在 https://github.com/libarchive/libarchive/releases 查看。

  • ssh 软件包更新为 OpenSSH v8.8p1,包含安全更新和错误修复。其他更新包括以下变更:

    • ssh(1):在提示是否记录新主机密钥时,接受该密钥的指纹作为“yes”的同义词。

    • ssh-keygen(1):作为 CA 并使用 RSA 密钥签署证书时,默认使用 rsa-sha2-512 签名算法。

    • ssh(1):默认启用 UpdateHostkeys,但需满足一些保守的前提条件。

    • scp(1):远程到远程复制(如 scp host-a:/path host-b:)的行为变更,默认通过本地主机传输。

    • scp(1):实验性支持使用 SFTP 协议进行传输,以替代传统的 SCP/RCP 协议。

对 FIDO/U2F 硬件认证器的支持在 ssh 中启用,新增了 ecdsa-sked25519-sk 公钥类型以及相应的证书类型。有关 FIDO/U2F 支持的描述请参考 https://www.openssh.com/txt/release-8.2a613d68fff9a(由 FreeBSD 基金会赞助)

bsdinstall(8) 的脚本分区编辑器新增了一种新模式,用于支持变体磁盘名称。如果 DEFAULT 被设置为磁盘参数,或者在参数 PARTITIONS 中未指定设备名称,安装程序将遵循自动分区模式的逻辑。如果存在多个磁盘,将提供选择对话框;如果只有一个磁盘,则会自动选择。这简化了为具有不同磁盘名称的硬件或虚拟机创建全自动安装介质的过程。5ec4eb443e81

运行时库和 API

OpenSSL 的汇编优化代码添加到 powerpc、powerpc64 和 powerpc64le 平台。ce35a3bc852

对 ARMv7 和 ARM64 加速加密操作的 CPU 特性检测修复完成,大幅提升了 aes-256-gcmsha256 的性能。32a2fed6e71f(由 Ampere Computing LLC 和 Klara Inc. 赞助)

riscv64 和 riscv64sf 平台上已启用 ASAN 和 UBSAN 库的构建。8c56b338da7

OFED 库现在在 riscv64 和 riscv64sf 平台上构建。2b978245733

OPENMP 库现在在 riscv64 和 riscv64sf 平台上构建。aaf56e35569

内核

本部分涉及内核配置、系统调优以及未分类的系统控制参数的变更。

内核通用变更

powerpc64 平台上串行控制台的输出损坏问题修复完成。dca829138ca

CAS 变更为支持 Radix MMU。cc8e726c85b

powerpc64(le) 平台上在 QEMU 的 TCG 模式下运行启用了 HPT 超页的 FreeBSD 的问题修复完成。f05174ed354

powerpc64(le) 平台上的 pmap_mincore 添加了对超页的支持。32b50b8520d

HWCAP/HWCAP2 辅助参数支持添加到 arm64 平台的 32 位 ARM 二进制文件中。这修复了在 COMPAT32 仿真下构建/运行 Golang 的问题。28e22482279f(由 Rubicon Communications, LLC (“Netgate”) 赞助)

设备与驱动

本部分介绍了自 13.0-RELEASE 以来,设备和设备驱动的变更和新增内容。

设备驱动程序

igc(4) 驱动程序引入,用于支持 Intel I225 以太网控制器。该控制器支持 2.5G/1G/100Mb/10Mb 速度,并支持 tx/rx 校验和卸载、TSO、LRO 和多队列操作。d7388d33b4dd(由 Rubicon Communications, LLC (“Netgate”) 赞助)

powerpc64(le) 平台在启动过程中使用 AST2500 时,VGA/HDMI 控制台的问题修复完成。c41d129485e

virtio(4) 驱动中大端目标设备的 PCI 通用读写功能修复完成。7e583075a41, 8d589845881

mpr(4) 驱动添加了大端支持。7d45bf699dc, 2954aedb8e5, c80a1c1072d

aacraid(4) 驱动的最大 I/O 大小降低,以避免 DMA 问题。572e3575dba

virtio_random(8) 驱动阻止虚拟机客户机关机或重启的问题修复完成。fa67c45842bb

ice(4) 驱动更新至 1.34.2-k,增加了固件日志记录功能和初步的 DCB 支持。a0cdf45ea1d1(由 Intel Corporation 赞助)

网络接口驱动程序 mgb(4) 添加,支持 Microchip 的 LAN7430 PCIe 千兆以太网控制器(带 PHY)和 LAN7431 PCIe 千兆以太网控制器(带 RGMII 接口)。尽管该驱动仍存在一些限制,但功能可用。e0262ffbc6ae(由 FreeBSD 基金会赞助)

cdce(4) 设备添加了链路状态、媒体类型和 VLAN MTU 的支持。973fb85188ea

iwlwifi(4) 驱动和一个 LinuxKPI 802.11 兼容层添加,用于支持较新的 Intel 无线芯片组,以补充 iwm(4) 驱动。(由 FreeBSD 基金会赞助)

当内核使用选项 MMCCAM 配置时,现在可以使用 dwmmc 控制器将内核崩溃转储保存到 SD 卡和 eMMC 模块。79c3478e76c3

当内核使用选项 MMCCAM 配置时,现在可以使用 sdhci 控制器将内核崩溃转储保存到 SD 卡。8934d3e7b9b9

支持的平台

新增对 HiFive Unmatched RISC-V 开发板的支持。

存储

本部分涉及文件系统及其他存储子系统(包括本地和网络存储)的变更与新增内容。

通用存储

暂无具体变更说明。

ZFS 变更

ZFS 已升级至 OpenZFS 2.1.4 版本。OpenZFS 的发行说明可参阅 https://github.com/openzfs/zfs/releases

NFS 变更

  • 两个新的守护进程 rpc.tlsclntd(8)rpc.tlsservd(8) 现在默认在 amd64 和 arm64 架构上构建。它们提供了对基于 TLS 的 NFS 加密支持,该功能描述于《Towards Remote Procedure Call Encryption By Default》草案中。这些守护进程在指定 WITH_OPENSSL_KTLS 时构建,使用 KTLS 加密/解密所有 NFS RPC 消息流量,并可选择通过 X.509 证书验证机器身份。2c76eebca71b 59f6f5e23c1a

  • 默认的 NFSv4 挂载次版本号已变更为 NFSv4 服务器所支持的最高次版本号。用户可通过挂载选项 minorversion 手动覆盖此默认值。8a04edfdcbd2

  • NFSv4.1/4.2 新增挂载选项 nconnect,用于指定挂载所使用的 TCP 连接数量(最多 16 个)。默认的第一个 TCP 连接将用于所有小型 RPC 消息,而可能包含大型 RPC 消息的操作(如 Read、Readdir、ReaddirPlus、Write)将在额外的 TCP 连接上以轮转方式发送。如果 NFS 客户端或服务器具有多个聚合的网络接口或支持多队列的网络接口,则此功能可以提高 NFS 的性能。9ec7dbf46b0a

  • 新增 sysctl 配置项 vfs.nfsd.srvmaxio,用于将 NFS 服务器的最大 I/O 大小从 128KB 增加到任意 2 的幂值(最高 1MB)。该选项只能在 nfsd 线程未运行时设置,且通常需要将 kern.ipc.maxsockbuf 增加至首次尝试设置 vfs.nfsd.srvmaxio 时控制台日志所建议的值。9fb6e613373c

UFS 变更

在提交 5cc52631b3b8 之后,fsck_ffs(8) 工具在预检模式下对启用软更新(但未启用软更新日志)的 UFS 执行后台 fsck 时无法正常运行。此问题修复完成。fb2feceac34c

引导加载程序变更

本部分涉及引导加载程序、引导菜单和其他引导相关的变更内容。

引导加载程序变更

  • UEFI 引导改进(amd64): amd64 架构的 UEFI 引导已改进。加载器会检测所加载的内核是否支持原位暂存区(非复制模式)。默认设置为 copy_staging auto。用户可以通过手动覆盖自动检测,例如:设置 copy_staging enable 时,加载器会无条件将暂存区复制到 2M 地址,无论内核是否支持。此外,扩展暂存区的代码更为稳健,用户无需手动调整和重新编译加载器即可完成扩展。(由 FreeBSD 基金会 赞助)

  • 修复 boot1loader 在 powerpc64le 架构上的问题8a62b07bce7

其他引导变更

  • 性能改进loader(8)nvme(4)random(4)rtsold(8) 和 x86 时钟校准的性能优化,这显著缩短了系统引导时间。此外,EC2 平台的配置变更进一步提高了性能,使得 13.1-RELEASE 的引导速度达到 13.0-RELEASE 的两倍以上。(由 https://www.patreon.com/cperciva 赞助)

  • EC2 镜像默认使用 UEFI 引导: EC2 镜像现在默认使用 UEFI 引导而非传统的 BIOS 引导。不过,基于 Xen 的 EC2 实例或“bare metal” EC2 实例仍不支持 UEFI。65f22ccf8247(由 https://www.patreon.com/cperciva 赞助)

  • 支持在 AWS Systems Manager 参数存储中记录 EC2 AMI ID: FreeBSD 在 AWS Systems Manager 参数存储中使用公共前缀 /aws/service/freebsd,生成类似 /aws/service/freebsd/amd64/base/ufs/13.1/RELEASE 的参数名称。242d1c32e42c(由 https://www.patreon.com/cperciva 赞助)

网络

本部分介绍了 FreeBSD 中影响网络功能的变更。

通用网络

  • IPv4 子网最低地址的处理变更: IPv4(子)网的最低地址(主机 0)的处理方式发生了变化,只有在该地址被设置为广播地址时,才会将数据包作为广播发送。这一变更使最低地址可用于主机。如果需要恢复旧行为,可以通过 sysctl 选项 net.inet.ip.broadcast_lowest 恢复。背景信息参见 https://datatracker.ietf.org/doc/draft-schoen-intarea-unicast-lowest-address/3ee882bf21af

关于后续 FreeBSD 版本的一般说明

默认 CPUTYPE 变更

从 FreeBSD-13.0 开始,i386 架构的默认 CPUTYPE 将从 486 变更为 686

这意味着默认生成的二进制文件将需要支持 686 级别的 CPU,包括但不限于由 FreeBSD 发布工程团队提供的二进制文件。尽管 FreeBSD 13.0 仍将支持较旧的 CPU,但需要此功能的用户需自行构建其专属版本以获得官方支持。

由于 i486 和 i586 CPU 的主要应用通常在嵌入式市场,普通终端用户受此变更的影响预计会非常有限。新硬件中这些类型的 CPU 早已不常见,而从统计数据来看,大部分现有系统的硬件已接近退役年限。

此变更考虑了多个因素。例如,i486 不支持 64 位原子操作,虽然内核可以模拟这些操作,但在用户空间中无法实现。此外,32 位 amd64 库自开始以来便已采用 i686。

大多数 32 位测试由开发者在 64 位硬件上使用 lib32 库并配合内核中的选项 COMPAT_FREEBSD32 完成。此变更可提供更好的覆盖范围和用户体验,同时符合大多数 Linux 发行版的长期做法。

这预计将是 i386 架构中默认 CPUTYPE 的最后一次升级。

重要

此变更不影响 FreeBSD 12.x 系列版本。

最后更新于