CVE-2026-98567 in Linux信息

摘要

由 VulDB • 2026-10-19

在 Linux 内核中,已修复以下漏洞:

net: xps: 拒绝超出范围的流量类(traffic class)

只有 `dev->num_tc` 以下的条目在 `dev->tc_to_txq[]` 中才是有效的,且 `dev->prio_tc_map[]` 只能引用低于该值的类别。`netdev_set_num_tc()` 会降低 `dev->num_tc` 的值,但不会触碰上述两个数组。

`netdev_txq_to_tc()` 会遍历所有 TC_MAX_QUEUE 槽位,而 `netdev_get_prio_tc_map()` 则按原样返回条目,因此残留的条目会被作为 >= dev->num_tc 的流量类传出。从 `netdev_txq_to_tc()` 获取该类后,`__netif_set_xps_queue()` 仅拒绝负值,并索引大小为 `dev->num_tc` 个类的 XPS 映射:

tci = j * num_tc + tc; RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);

`attr_map[]` 包含 nr_ids * num_tc 个条目,且 j 遍历掩码中命名的 id。因此,一个不低于 num_tc 的类会将 tci 推至映射末尾之后(针对最后一个 id),导致存储操作越界溢出。

任何降低 num_tc 的调用者都会留下此类残留条目,而 `mqprio_destroy()` 使用 `netdev_set_num_tc(dev, 0)` 而非 `netdev_reset_tc()` 进行清理。在 mqprio 配置为 8 个类然后变为 1 个类后,`tc_to_txq[1..7]` 仍然描述 txq 1..7。该崩溃(splat)源于对具有 8 个接收队列的 veth 设备的 txq 2 进行 XPS 写入:`attr_map[]` 有 8 * 1 个条目,tci = j + 2,且当 j == 6 时,存储操作超出了该 88 字节映射的末尾:

BUG: KASAN: slab-out-of-bounds in __netif_set_xps_queue (net/core/dev.c:2954) Write of size 8 at addr ffff88813016bc58 by task xps_oob/634 __netif_set_xps_queue (net/core/dev.c:2954) xps_rxqs_store (net/core/net-sysfs.c:1880) netdev_queue_attr_store (net/core/net-sysfs.c:1390) Allocated by task 634: __kmalloc_noprof (mm/slub.c:5439) __netif_set_xps_queue (net/core/dev.c:2937) The buggy address is located 0 bytes to the right of allocated 88-byte region [ffff88813016bc00, ffff88813016bc58)

拒绝映射中没有空间的类。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

来源

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!