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/。
本文档适用于介于 12.2-RELEASE 和未来的 12.4-RELEASE 之间的 12-STABLE 开发分支的某一版本。有关此分支上的预构建二进制发布版本的信息,也可访问 https://www.FreeBSD.org/releases/。
FreeBSD 12.3-RELEASE 的发行版本可通过 https://www.FreeBSD.org/releases/ 或其镜像站点获取。有关获取该版本(及其他版本)发行版的更多信息,请参阅 FreeBSD 手册的获取 FreeBSD 附录。
建议所有用户在安装 FreeBSD 前查阅发行勘误文档(勘误)。该文档包含在发布周期后期或发布之后发现的最新信息,通常包括已知的错误、安全公告和文档修正。可在 FreeBSD 网站上找到 FreeBSD 12.3-RELEASE 的最新勘误文档。
本文档介绍了自 12.2-RELEASE 以来 FreeBSD 中新增或变更的最直观的用户功能。通常,这些变更是 12-STABLE 分支特有的,除非特别标注为 MERGED 特性。
发行说明通常记录自 12.2-RELEASE 之后发布的安全公告、新增的驱动程序或硬件支持、新的命令或选项、重大错误修复或第三方软件的升级。它们还可能列出主要的 Port/软件包变更或发布工程实践的更新。不过,发行说明不可能涉及 FreeBSD 两个版本之间的所有变更,本文档主要集中于安全公告、用户可见的变更和主要的架构改进。
从旧版 FreeBSD 升级
可以使用 freebsd-update(8) 工具在 RELEASE 版本之间(以及各种安全分支的快照版本)进行二进制升级。二进制升级过程将更新未修改的用户态工具以及作为 FreeBSD 官方发行版一部分的未修改 GENERIC 内核。freebsd-update(8) 工具要求被升级的主机具备互联网连接。
基于源代码的升级(通过重新编译 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) 脚本 /etc/rc.final
。
用户空间应用程序变更
实用程序 automount(8) 现在将在执行自动挂载前明确将根路径设置为 /
。
实用程序 bectl(8) 现在会抛出错误以防止创建包含空格的引导环境。
实用程序 bhyve(8) 修复了 nvme(4) 模拟中的大规模 IO 支持。
实用程序 cmp(1) 增加了参数 -b
和 --print-bytes
,以与 GNU cmp(1) 保持兼容。
实用程序 cmp(1) 增加了参数 -i
和 --ignore-initial
,作为 skip1/skip2 的替代。
实用程序 cmp(1) 现在支持 skip1/skip2 的 SI 后缀。
实用程序 cmp(1) 增加了参数 -n
和 --bytes
,用于限制比较的字节数。
实用程序 cpuset(1) 现在允许 jail 使用它来修改子 jail 的根。
实用程序 cron(8) 现在会引入用户或登录类的环境变量。
实用程序 daemon(8) 增加了一个参数 -H
,允许它捕获 SIGHUP
信号并重新打开输出文件。此功能用于支持 newsyslog(8) 操作。
实用程序 diff(1) 现在在指定 -q
时会尊重其他,例如 -w
。
实用程序 elfctl(1) 增加了一个参数 -l
,可以忽略未知变量,从而允许其在不同版本的 FreeBSD 间工作,并忽略未实现的功能。
实用程序 etcupdate(8) 现在支持恢复模式,可用于还原一个或多个文件。
实用程序 etcupdate(8) 新增了 -D
参数,用于指定目标目录。
etcupdate(8) 现在始终提取到临时目录,并能优雅地处理 SIGINT
信号。
实用程序 freebsd-update(8) 增加了参数 -j
,以支持 jail。
实用程序 freebsd-version(1) 增加了参数 -j
,以支持 jail。
现在实用程序 fstyp(8) 可以使用参数 -l
检测并显示 exFAT 文件系统。
实用程序 geli(8) 在对相同大小执行 resize
时将不再报告错误。
实用程序 grep(1) 现在在指定 -x
时会禁用 -w
。
现在实用程序 growfs(8) 可以运行在 RW
挂载的文件系统上。
实用程序 kldxref(8) 如果使用参数 -d
指定的目录不是实际目录,则不再报错。
实用程序 mergemaster(8) 现在在更新过程中可以处理符号链接。
实用程序 mksnap_ffs(8) 修复了导致 Panic: snapacct_ufs2: bad block
的崩溃问题。
实用程序 mount(8) 现在在启用配额时将正确显示 with quotas
。
实用程序 mountd(8) 在 /etc/exports
文件缺少 V4:
行时,现在会生成 syslog(3) 消息。
实用程序 newsyslog(8) 新增了参数 E
,用于防止旋转空日志文件。
实用程序 pkg(7) 新增了参数 -r
,用于在引导和 add
操作中指定 reponame
。
实用程序 pkg(7) 现在会使用 pkg.conf
中指定的环境变量。
rc(8) 脚本 rc.d/jail 变更了一个关键字,以修复对嵌套 jail 的支持。
守护进程 rtsold(8) 现在可以在 if_vlan
接口(参见:vlan(4))上工作。
实用程序 service(8) 现在在调用之前会设置 daemon
类的环境变量。
实用程序 tcpdump(8) 现在可以解码 pfsync 接口上的数据包。
命令 top(1) 新增了过滤器选项 /
,用于显示与指定字符串匹配的进程或参数(从 OpenBSD 引入)。
修复了 unzip(1) 在目标归档文件包含损坏的名称时引发的段错误。
实用程序 unzip(1) 现在支持密码保护的归档文件。
实用程序 zgrep(1) 在指定参数 --version
时现在可以正确打印版本信息。
实用程序 wpl_cli(8) 新增了事件文件操作,可以将事件传递给文件。
第三方软件
已合并 awk(1) 的 metamode
修复,同时代码与上游同步到版本 20210221。
SHA256
的修复已从上游合并到 apr (Apache Portable Runtime)(参见上游 r1889604 和 r1807975)。
第三方软件 bc(1) 已更新至 5.0.0。
实用程序 less(1) 更新至版本 v581.2。
libarchive(3) 库修复了符号链接处理的一个错误。
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) 实用程序更新至 nvi 2.2.0-3bbdfe4。
contrib/tzdata
信息已更新以修正约旦和萨摩亚的夏令时(DST)。
tzdata 2021a 已导入至代码树中。
unzip(1) 实用程序与上游 NetBSD 版本同步。
运行时库与 API
已更新 krpc 和 nfsd 模块间的内部 KAPI (参见 UPDATING
)。
powf(3) 库修复了当 x
接近 1
且 |y|
远大于 1
时可能出现的错误结果,并从 NetBSD 导入了一套测试工具。
内核
本节涉及未分类的内核配置、系统调优和系统控制参数的变更。
通用内核变更
防火墙 ipfw(8) 新增了 dnctl(8) 用于管理 dummynet(4) 配置。
新增了 opencrypto 的 sysctl(8) kern.crypto
节点。
新增了新的 sysctl(8) 项:debug.uma_reclaim
。
OID
kern.timecounter.hardware
已转换为可调项。
新增了 ASMedia® ASM116x PCIe 3.0 AHCI 控制器和 Intel® Gemini Lake I2C 控制器的 PCI
ID
信息。
amd64
的 GENERIC
内核现在包含 options COMPAT_LINUXKPI
和设备驱动程序 mlx5en(4) 。
设备与驱动程序
本节涉及自 12.2-RELEASE 以来设备和设备驱动程序的变更和新增内容。
设备驱动程序
设备驱动程序 alc(4) 现支持 Mikrotik® 10/25G 网络设备。
设备驱动程序 amdtemp(4) 新增对以下家族 17h 型号的支持:M20h (Dali, Zen1)、M60H (Renoir, Zen2) 和 M90H (Van Gogh, Zen2)。
设备驱动程序 amdtemp(4) 新增对 Zen 3 "Vermeer" 和 Ryzen® 4000 APU (Zen 2, "Renoir") 的支持。
设备驱动程序 amdsmn(4) 新增对 Zen 3 "Vermeer" 和 Ryzen® 4000 APU (Zen 2, "Renoir") 的支持。
驱动程序 cam(4) 修复了 SCSI 快速拔插的问题。
设备驱动程序 bnxt(4) 现在会报告硬件是否支持 WOL
(网络唤醒)功能,并在系统初始化时应用过滤器后显示启用状态。
设备驱动程序 em(4) 现支持无闪存的 i211 PBA。
设备驱动程序 em(4) 进行了多项共享代码更新。
设备驱动程序 ena(4) 更新至版本 2.4.1。
设备驱动程序 ice(4) 更新至版本 0.28.1-k,同时更新了 ice_ddp
包文件至版本 1.3.19.0。
新增驱动程序 igc(4) ,用于支持 Intel® I225 以太网控制器,支持 2.5G/1G/100MB/10MB 网络速度。
设备驱动程序 ixgbe(4) 进行了共享代码更新。
设备驱动程序 ixgbe(4) 修复了 x550em 10G NIC 的链接状态问题,其中自动协商功能未正确报告。
设备驱动程序 ixl(4) 新增了可调参数 hw.ix.flow_control
。
设备驱动程序 ixl(4) 更新了共享代码,并修复了 2.5G 和 5G 网络速度问题。
设备驱动程序 iwm(4) 现支持 Intel® Killer® Wireless-AC 1550i。
文件系统驱动程序 msdosfs(5) 修复了 msdosfs 挂起问题。
netgraph 节点 ng_bridge(4) 现已支持 SMP
。
netgraph 节点 ng_nat(4) 新增对 RFC
6598 和运营商级 NAT
的支持。
netgraph 节点 ng_source(4) 现在可以注入任意 netgraph 网络。
ACPI
驱动程序 nvdimm(4) 现可通过 sysctl(8) 导出健康信息。
设备驱动程序 nvme(4) 新增对 MSI 和单 MSI-X 的支持。
设备驱动程序 nvme(4) 合并了多个错误修复。
防火墙 pf(4) 已收到多项错误修复和更新。
资源限制驱动程序 rctl(4) 现在支持将速率限制资源的使用量节流至 0
(对支持节流的资源)。这些资源会遵循 kern.racct.rctl.throttle_max
sysctl(8) 设置的持续时间。
设备驱动程序 rsu(4) 现支持 ASUS® WL-167G V3 设备。
设备驱动程序 rtwn_usb(4) 现支持 Mercusys® MW150US (N150 Nano)、TP-Link® Archer T2U v3 和 D-Link® DWA-121 (N150 Nano) 设备。
设备驱动程序 run(4) 现支持 D-Link® DWA-130 rev F1 无线适配器和 ASUS® USB-N14 无线适配器。
tcp(4) 协议现在可以通过启用 net.inet.tcp.tolerate_missing_ts
sysctl(8) 容忍丢失的时间戳(RFC 1323/RFC 7323)。
设备驱动程序 uart(4) 现支持 Intel® 100 Series/C230 Series AMT。
vlan(4) 接口现支持 ALTQ
。
存储
本节涉及文件系统和其他存储子系统的变更和新增内容,包括本地和网络存储。
一般存储
合并了对 UFS/FFS
中嵌入式符号链接的处理修复。
合并了修复,解决了 NFSv4.1 Linux 客户端挂载卡在 CLOSE_WAIT
状态的问题。
合并了对 NFSv4.1/4.2 挂载从过期租约中恢复的修复。
启动加载器变更
本节涉及启动加载器、启动菜单和其他与启动相关的变更。
启动加载器变更
启动加载器现在支持从内存磁盘启动操作系统。
启动加载器现在支持没有特性的池。
启动加载器现在接受 zfs 特性 com.delphix:bookmark_written
和 com.datto:bookmark_v2
。
新增了 OID,hint.dev.X.disabled
,该 OID 可在启动过程中防止设备附加。
网络
本节介绍了影响 FreeBSD 网络的变更。
一般网络
合并了多个针对 NFSv4 的修复。
修复了在 wpa
EAP/PEAP MSCHAPv2 身份验证过程中发生的段错误。
fetch(3) 库现在支持通过 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
变更
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 系列的发布。
最后更新于