github编辑

FreeBSD 12.3-RELEASE 发行说明(2021 年 12 月 7 日)

摘要

FreeBSD 12.3-RELEASE 的发行说明总结了 12-STABLE 开发分支上对 FreeBSD 基本系统所做的变更。本文档列出了自上一个版本以来发布的适用安全公告,以及对 FreeBSD 内核和用户态的重大变更。同时,还提供了关于升级的一些简要说明。

介绍

本文档包含 FreeBSD 12.3-RELEASE 的发行说明,介绍了 FreeBSD 最近新增、修改或删除的功能,并提供了从 FreeBSD 之前版本升级的一些注意事项。

本文档适用于 12-STABLE 开发分支自创建以来的最新阶段的发布版本。有关此分支上的预构建二进制发布版本的信息,可访问 https://www.FreeBSD.org/releases/arrow-up-right

本文档适用于介于 12.2-RELEASE 和未来的 12.4-RELEASE 之间的 12-STABLE 开发分支的某一版本。有关此分支上的预构建二进制发布版本的信息,也可访问 https://www.FreeBSD.org/releases/arrow-up-right

FreeBSD 12.3-RELEASE 的发行版本可通过 https://www.FreeBSD.org/releases/arrow-up-right 或其镜像站点获取。有关获取该版本(及其他版本)发行版的更多信息,请参阅 FreeBSD 手册arrow-up-right获取 FreeBSD 附录arrow-up-right

建议所有用户在安装 FreeBSD 前查阅发行勘误文档(勘误)。该文档包含在发布周期后期或发布之后发现的最新信息,通常包括已知的错误、安全公告和文档修正。可在 FreeBSD 网站上找到 FreeBSD 12.3-RELEASE 的最新勘误文档。

本文档介绍了自 12.2-RELEASE 以来 FreeBSD 中新增或变更的最直观的用户功能。通常,这些变更是 12-STABLE 分支特有的,除非特别标注为 MERGED 特性。

发行说明通常记录自 12.2-RELEASE 之后发布的安全公告、新增的驱动程序或硬件支持、新的命令或选项、重大错误修复或第三方软件的升级。它们还可能列出主要的 Port/软件包变更或发布工程实践的更新。不过,发行说明不可能涉及 FreeBSD 两个版本之间的所有变更,本文档主要集中于安全公告、用户可见的变更和主要的架构改进。

从旧版 FreeBSD 升级

可以使用 freebsd-update(8)arrow-up-right 工具在 RELEASE 版本之间(以及各种安全分支的快照版本)进行二进制升级。二进制升级过程将更新未修改的用户态工具以及作为 FreeBSD 官方发行版一部分的未修改 GENERIC 内核。freebsd-update(8)arrow-up-right 工具要求被升级的主机具备互联网连接。

基于源代码的升级(通过重新编译 FreeBSD 基本系统源码进行的升级)也得到支持,具体步骤请参见 /usr/src/UPDATING 文件中的说明。

升级 FreeBSD 前,必须备份 所有 数据和配置文件。

安全与勘误

本部分列出了自 FreeBSD 12.2-RELEASE 以来的各种安全公告和勘误通知。

安全公告

公告编号
日期
主题

2020 年 12 月 1 日

错误消息处理中的“使用后释放”问题

2020 年 12 月 1 日

多个漏洞

2020 年 12 月 8 日

空指针解引用

2021 年 1 月 29 日

内核栈信息泄露

2021 年 1 月 29 日

内核崩溃

2021 年 2 月 24 日

权限提升

2021 年 2 月 24 日

权限提升

2021 年 2 月 24 日

权限提升

2021 年 2 月 24 日

资源泄漏

2021 年 3 月 25 日

多个漏洞

2021 年 4 月 6 日

内核内存泄露

2021 年 4 月 6 日

权限提升或内存泄露

2021 年 4 月 6 日

权限提升

2021 年 5 月 26 日

缓解措施绕过

2021 年 5 月 26 日

拒绝服务攻击

2021 年 8 月 24 日

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

2021 年 8 月 24 日

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

2021 年 8 月 24 日

libfetch 越界读取

2021 年 8 月 24 日

OpenSSL 的多个漏洞

2021 年 8 月 24 日

OpenSSL 的多个漏洞

勘误通知

勘误编号
日期
主题

2020 年 12 月 1 日

execve/fexecve 系统调用审计

2020 年 12 月 1 日

时区数据库信息更新

2020 年 12 月 1 日

未初始化的变量

2020 年 12 月 1 日

callout CPU 迁移中的竞争条件

2021 年 1 月 29 日

时区数据库信息更新

2021 年 1 月 29 日

同时销毁 VNET 和 epair 时引发崩溃

2021 年 1 月 29 日

zfs recv 未能正确传播快照删除信息

2021 年 2 月 24 日

启动时加载微码导致启动挂起

2021 年 2 月 24 日

根证书包更新

2021 年 2 月 24 日

freebsd-update 密码生成问题

2021 年 4 月 6 日

无法通过 loader.conf(5) 设置 net.pf.request_maxcount

2021 年 4 月 6 日

使用 lldb 执行 print 命令时崩溃

2021 年 5 月 26 日

aesni(4) 加密 - 认证操作中的竞争条件

2021 年 5 月 26 日

在 divert 套接字上发送数据时内核双重释放

2021 年 5 月 26 日

pms(4) 数据损坏

2021 年 5 月 26 日

dc 更新

2021 年 6 月 1 日

rad_get_attr(3) 中的验证错误

2021 年 6 月 30 日

libcasper 断言失败

2021 年 6 月 30 日

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

2021 年 8 月 24 日

OpenSSL 1.1.1e 的 API 函数未导出

2021 年 8 月 24 日

修复 NVMe 大型 IO 的 iovec 构造

2021 年 11 月 4 日

根证书包更新

2021 年 11 月 4 日

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

2021 年 11 月 4 日

时区数据库信息更新

用户空间

本节介绍了用户空间应用程序、第三方软件和系统工具的变更和新增内容。

用户空间配置变更

caroot CA 捆绑处理器更新,以支持带有 DISTRUST_AFTER 条目的证书。

在所有用户进程终止后,将运行 rc(8)arrow-up-right 脚本 /etc/rc.final

用户空间应用程序变更

实用程序 automount(8)arrow-up-right 现在将在执行自动挂载前明确将根路径设置为 /

实用程序 bectl(8)arrow-up-right 现在会抛出错误以防止创建包含空格的引导环境。

实用程序 bhyve(8)arrow-up-right 修复了 nvme(4)arrow-up-right 模拟中的大规模 IO 支持。

实用程序 cmp(1)arrow-up-right 增加了参数 -b--print-bytes,以与 GNU cmp(1)arrow-up-right 保持兼容。

实用程序 cmp(1)arrow-up-right 增加了参数 -i--ignore-initial,作为 skip1/skip2 的替代。

实用程序 cmp(1)arrow-up-right 现在支持 skip1/skip2 的 SI 后缀。

实用程序 cmp(1)arrow-up-right 增加了参数 -n--bytes,用于限制比较的字节数。

实用程序 cpuset(1)arrow-up-right 现在允许 jail 使用它来修改子 jail 的根。

实用程序 cron(8)arrow-up-right 现在会引入用户或登录类的环境变量。

实用程序 daemon(8)arrow-up-right 增加了一个参数 -H,允许它捕获 SIGHUP 信号并重新打开输出文件。此功能用于支持 newsyslog(8)arrow-up-right 操作。

实用程序 diff(1)arrow-up-right 现在在指定 -q 时会尊重其他,例如 -w

实用程序 elfctl(1)arrow-up-right 增加了一个参数 -l,可以忽略未知变量,从而允许其在不同版本的 FreeBSD 间工作,并忽略未实现的功能。

实用程序 etcupdate(8)arrow-up-right 现在支持恢复模式,可用于还原一个或多个文件。

实用程序 etcupdate(8)arrow-up-right 新增了 -D 参数,用于指定目标目录。

etcupdate(8)arrow-up-right 现在始终提取到临时目录,并能优雅地处理 SIGINT 信号。

实用程序 freebsd-update(8)arrow-up-right 增加了参数 -j,以支持 jail。

实用程序 freebsd-version(1)arrow-up-right 增加了参数 -j,以支持 jail。

现在实用程序 fstyp(8)arrow-up-right 可以使用参数 -l 检测并显示 exFAT 文件系统。

实用程序 geli(8)arrow-up-right 在对相同大小执行 resize 时将不再报告错误。

实用程序 grep(1)arrow-up-right 现在在指定 -x 时会禁用 -w

现在实用程序 growfs(8)arrow-up-right 可以运行在 RW 挂载的文件系统上。

实用程序 kldxref(8)arrow-up-right 如果使用参数 -d 指定的目录不是实际目录,则不再报错。

实用程序 mergemaster(8)arrow-up-right 现在在更新过程中可以处理符号链接。

实用程序 mksnap_ffs(8)arrow-up-right 修复了导致 Panic: snapacct_ufs2: bad block 的崩溃问题。

实用程序 mount(8)arrow-up-right 现在在启用配额时将正确显示 with quotas

实用程序 mountd(8)arrow-up-right/etc/exports 文件缺少 V4: 行时,现在会生成 syslog(3)arrow-up-right 消息。

实用程序 newsyslog(8)arrow-up-right 新增了参数 E,用于防止旋转空日志文件。

实用程序 pkg(7)arrow-up-right 新增了参数 -r,用于在引导和 add 操作中指定 reponame

实用程序 pkg(7)arrow-up-right 现在会使用 pkg.conf 中指定的环境变量。

rc(8)arrow-up-right 脚本 rc.d/jail 变更了一个关键字,以修复对嵌套 jail 的支持。

守护进程 rtsold(8)arrow-up-right 现在可以在 if_vlan 接口(参见:vlan(4)arrow-up-right)上工作。

实用程序 service(8)arrow-up-right 现在在调用之前会设置 daemon 类的环境变量。

实用程序 tcpdump(8)arrow-up-right 现在可以解码 pfsync 接口上的数据包。

命令 top(1)arrow-up-right 新增了过滤器选项 /,用于显示与指定字符串匹配的进程或参数(从 OpenBSD 引入)。

修复了 unzip(1)arrow-up-right 在目标归档文件包含损坏的名称时引发的段错误。

实用程序 unzip(1)arrow-up-right 现在支持密码保护的归档文件。

实用程序 zgrep(1)arrow-up-right 在指定参数 --version 时现在可以正确打印版本信息。

实用程序 wpl_cli(8)arrow-up-right 新增了事件文件操作,可以将事件传递给文件。

第三方软件

已合并 awk(1)arrow-up-rightmetamode 修复,同时代码与上游同步到版本 20210221。

SHA256 的修复已从上游合并到 apr (Apache Portable Runtime)(参见上游 r1889604 和 r1807975)。

第三方软件 bc(1)arrow-up-right 已更新至 5.0.0。

实用程序 less(1)arrow-up-right 更新至版本 v581.2。

libarchive(3)arrow-up-right 库修复了符号链接处理的一个错误。

Libarchive 已导入版本 3.5.1。

OpenPAM 已升级到 OpenPAM Tabebuia。

OpenSSL 1.1.1l 已导入至代码树中。

SQLite3 3.35.5 已导入至代码树中。

TCSH 已导入版本 6.22.04。

Subversion 已更新至版本 1.14.1 LTS。

vi(1)arrow-up-right 实用程序更新至 nvi 2.2.0-3bbdfe4。

contrib/tzdata 信息已更新以修正约旦和萨摩亚的夏令时(DST)。

tzdata 2021a 已导入至代码树中。

unzip(1)arrow-up-right 实用程序与上游 NetBSD 版本同步。

运行时库与 API

已更新 krpc 和 nfsd 模块间的内部 KAPI(参见 UPDATING)。

powf(3)arrow-up-right 库修复了当 x 接近 1|y| 远大于 1 时可能出现的错误结果,并从 NetBSD 导入了一套测试工具。

内核

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

通用内核变更

防火墙 ipfw(8)arrow-up-right 新增了 dnctl(8)arrow-up-right 用于管理 dummynet(4)arrow-up-right 配置。

新增了 opencrypto 的 sysctl(8)arrow-up-right kern.crypto 节点。

新增了新的 sysctl(8)arrow-up-right 项:debug.uma_reclaim

OID kern.timecounter.hardware 已转换为可调项。

新增了 ASMedia® ASM116x PCIe 3.0 AHCI 控制器和 Intel® Gemini Lake I2C 控制器的 PCI ID 信息。

amd64GENERIC 内核现在包含 options COMPAT_LINUXKPI 和设备驱动程序 mlx5en(4)arrow-up-right

设备与驱动程序

本节涉及自 12.2-RELEASE 以来设备和设备驱动程序的变更和新增内容。

设备驱动程序

设备驱动程序 alc(4)arrow-up-right 现支持 Mikrotik® 10/25G 网络设备。

设备驱动程序 amdtemp(4)arrow-up-right 新增对以下家族 17h 型号的支持:M20h (Dali, Zen1)、M60H (Renoir, Zen2) 和 M90H (Van Gogh, Zen2)。

设备驱动程序 amdtemp(4)arrow-up-right 新增对 Zen 3 "Vermeer" 和 Ryzen® 4000 APU (Zen 2, "Renoir") 的支持。

设备驱动程序 amdsmn(4)arrow-up-right 新增对 Zen 3 "Vermeer" 和 Ryzen® 4000 APU (Zen 2, "Renoir") 的支持。

驱动程序 cam(4)arrow-up-right 修复了 SCSI 快速拔插的问题。

设备驱动程序 bnxt(4)arrow-up-right 现在会报告硬件是否支持 WOL(网络唤醒)功能,并在系统初始化时应用过滤器后显示启用状态。

设备驱动程序 em(4)arrow-up-right 现支持无闪存的 i211 PBA。

设备驱动程序 em(4)arrow-up-right 进行了多项共享代码更新。

设备驱动程序 ena(4)arrow-up-right 更新至版本 2.4.1。

设备驱动程序 ice(4)arrow-up-right 更新至版本 0.28.1-k,同时更新了 ice_ddp 包文件至版本 1.3.19.0。

新增驱动程序 igc(4)arrow-up-right ,用于支持 Intel® I225 以太网控制器,支持 2.5G/1G/100MB/10MB 网络速度。

设备驱动程序 ixgbe(4)arrow-up-right 进行了共享代码更新。

设备驱动程序 ixgbe(4)arrow-up-right 修复了 x550em 10G NIC 的链接状态问题,其中自动协商功能未正确报告。

设备驱动程序 ixl(4)arrow-up-right 新增了可调参数 hw.ix.flow_control

设备驱动程序 ixl(4)arrow-up-right 更新了共享代码,并修复了 2.5G 和 5G 网络速度问题。

设备驱动程序 iwm(4)arrow-up-right 现支持 Intel® Killer® Wireless-AC 1550i。

文件系统驱动程序 msdosfs(5)arrow-up-right 修复了 msdosfs 挂起问题。

netgraph 节点 ng_bridge(4)arrow-up-right 现已支持 SMP

netgraph 节点 ng_nat(4)arrow-up-right 新增对 RFC 6598 和运营商级 NAT 的支持。

netgraph 节点 ng_source(4)arrow-up-right 现在可以注入任意 netgraph 网络。

ACPI 驱动程序 nvdimm(4)arrow-up-right 现可通过 sysctl(8)arrow-up-right 导出健康信息。

设备驱动程序 nvme(4)arrow-up-right 新增对 MSI 和单 MSI-X 的支持。

设备驱动程序 nvme(4)arrow-up-right 合并了多个错误修复。

防火墙 pf(4)arrow-up-right 已收到多项错误修复和更新。

资源限制驱动程序 rctl(4)arrow-up-right 现在支持将速率限制资源的使用量节流至 0(对支持节流的资源)。这些资源会遵循 kern.racct.rctl.throttle_max sysctl(8)arrow-up-right 设置的持续时间。

设备驱动程序 rsu(4)arrow-up-right 现支持 ASUS® WL-167G V3 设备。

设备驱动程序 rtwn_usb(4)arrow-up-right 现支持 Mercusys® MW150US (N150 Nano)、TP-Link® Archer T2U v3 和 D-Link® DWA-121 (N150 Nano) 设备。

设备驱动程序 run(4)arrow-up-right 现支持 D-Link® DWA-130 rev F1 无线适配器和 ASUS® USB-N14 无线适配器。

tcp(4)arrow-up-right 协议现在可以通过启用 net.inet.tcp.tolerate_missing_ts sysctl(8)arrow-up-right 容忍丢失的时间戳(RFC 1323/RFC 7323)。

设备驱动程序 uart(4)arrow-up-right 现支持 Intel® 100 Series/C230 Series AMT。

vlan(4)arrow-up-right 接口现支持 ALTQ

存储

本节涉及文件系统和其他存储子系统的变更和新增内容,包括本地和网络存储。

一般存储

合并了对 UFS/FFS 中嵌入式符号链接的处理修复。

合并了修复,解决了 NFSv4.1 Linux 客户端挂载卡在 CLOSE_WAIT 状态的问题。

合并了对 NFSv4.1/4.2 挂载从过期租约中恢复的修复。

启动加载器变更

本节涉及启动加载器、启动菜单和其他与启动相关的变更。

启动加载器变更

启动加载器现在支持从内存磁盘启动操作系统。

启动加载器现在支持没有特性的池。

启动加载器现在接受 zfs 特性 com.delphix:bookmark_writtencom.datto:bookmark_v2

新增了 OID,hint.dev.X.disabled,该 OID 可在启动过程中防止设备附加。

网络

本节介绍了影响 FreeBSD 网络的变更。

一般网络

合并了多个针对 NFSv4 的修复。

修复了在 wpa EAP/PEAP MSCHAPv2 身份验证过程中发生的段错误。

fetch(3)arrow-up-right 库现在支持通过 HTTPS 代理 FTP

关于后续 FreeBSD 发布的常规说明

FreeBSD EC2 AMI Ids

已向 release/Makefile.ec2 添加对记录 EC2 AMI Ids 的支持,以允许 SSM 参数名称采用类似 /aws/service/freebsd/amd64/base/ufs/12.3/RELEASE 的格式,使用公共前缀 /aws/service/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 位测试是在使用内核选项 COMPAT_FREEBSD32 的 64 位硬件上,开发人员通过 lib32 库进行的,因此此变更确保了更好的覆盖率和用户体验。这也符合大多数 Linux® 发行版的做法,Linux® 发行版已经采用这种做法有一段时间了。

预计这是 i386 默认 CPUTYPE 最后的提升。

此变更不会影响 FreeBSD 12.x 系列的发布。

最后更新于