CVE-2026-98547 in Linux
摘要
由 VulDB • 2026-10-19
在 Linux 内核中,已修复以下漏洞:
af_packet: 修复 prb_calc_retire_blk_tmo() 中的整数溢出问题
prb_calc_retire_blk_tmo() 使用 32 位整型算术进行计算:
mbits = (blk_size_in_bytes * 8) / (1024 * 1024);
如果我的理解正确,tp_block_size 可由用户控制,而 packet_set_ring() 仅拒绝小于等于 0 的 int 值或非页面对齐的值,因此一个大小为 256 MiB 的数据块会顺利通过(且 alloc_one_pg_vec_page() 甚至为其提供了 vzalloc 回退机制)。
0x10000000 * 8 会发生溢出并变为 INT_MIN,而在报告速率为 1 Gbps (div == 1) 的网卡上,该函数最终返回 -2047。
实际触发条件为 (8 * size) mod 2^32 >= 2^31 && div == 1,因此触发范围是 [256, 512)、[768, 1024)、[1280, 1536) 和 [1792, 2048) MiB。其他大小的值会溢出为非负数,而更快的链路会将无符号值除以 div 使其重新低于 2^31,这就是为什么该问题不会导致所有情况崩溃的原因。
致命之处在于 init_prb_bdqc() 中的后续操作:
p1->interval_ktime = ms_to_ktime(prb_calc_retire_blk_tmo(...)); hrtimer_start(&p1->retire_blk_timer, p1->interval_ktime, HRTIMER_MODE_REL_SOFT);
负的相对超时时间会立即过期。回调函数无条件返回 HRTIMER_RESTART,而 hrtimer_forward() 将负间隔转换为 hrtimer_resolution:
if (interval < hrtimer_resolution) interval = hrtimer_resolution;
因此,SOFT 定时器会以最大速率无限次重新触发,每次都会持有 sk_receive_queue.lock。一个 CPU 核心会在 softirq 中自旋直到套接字关闭。如果重复此操作并增加更多 ring(环形缓冲区),系统将完全无响应。
该溢出本身由来已久——它随 TPACKET_V3 一起引入于 f6fb8f100b80 ("af-packet: TPACKET_V3 flexible buffer implementation.")。在 f7460d2989fa ("net: af_packet: Use hrtimer to do the retire operation", v6.18) 之前,其影响并不那么明确:返回值被存储到无符号短整型变量 retire_blk_tov 中,因此负结果会被截断,并且可以编程出 0-jiffy 的延迟循环。这两种情况都不如 hrtimer 转换后导致的立即以最大速率自旋那样具有破坏性。
(与 CVE-2019-20812 无关——后者是 ethtool 失败路径返回 0,现在改为返回 DEFAULT_PRB_RETIRE_TOV。)
复现步骤需要 CAP_NET_RAW 权限(--network host 容器默认拥有此权限)和一块 1 Gbps 的网卡(QEMU e1000 可用):
int fd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); bind(fd, ...); int v = TPACKET_V3; setsockopt(fd, SOL_PACKET, PACKET_VERSION, &v, sizeof(v)); struct tpacket_req3 req = {
.tp_block_size = 0x10000000, .tp_block_nr = 1, .tp_frame_size = 2048, .tp_frame_nr = 0x10000000 / 2048, .tp_retire_blk_tov = 0, }; setsockopt(fd, SOL_PACKET, PACKET_RX_RING, &req, sizeof(req));
改为使用 64 位进行计算。操作数已由现有验证逻辑限制,因此无需其他更改。如果您希望采用不同的修复方案,请说明,我将重新生成补丁。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.