Cloudanix VulnDB

CVE-2026-98567

None

CVSS

—

EPSS

0.2%

Published

Oct 18, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A bug in the Linux kernel's network traffic steering code can let an attacker write outside allowed memory, which might crash the system or allow deeper access.

Exploitation
Local Privilege
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Privilege Gain
Component
OS kernel
Class
Buffer Overflow
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

Out-of-bounds write in __netif_set_xps_queue when an invalid traffic class >= num_tc is used to index attr_map after netdev_set_num_tc lowers the count without clearing dev->tc_to_txq or prio_tc_map, allowing writes past the allocated map sized for num_tc classes.

Why it matters to the business

Kernel memory corruption on Linux systems using XPS queue steering with mqprio or veth devices can cause crashes, data corruption, or potential privilege escalation; low EPSS and absence from KEV indicate limited active exploitation risk five days after disclosure.

How an attack unfolds

An attacker configures mqprio with multiple traffic classes then reduces to fewer classes leaving stale entries, followed by writing to XPS attributes via net-sysfs which triggers __netif_set_xps_queue to compute an out-of-bounds tci and perform an uncontrolled store into the undersized attr_map.

How to fix it

Apply the upstream fix that rejects traffic classes outside the current num_tc range in netdev_txq_to_tc and netdev_get_prio_tc_map; rebuild and deploy the patched kernel; prefer netdev_reset_tc over netdev_set_num_tc(0) in teardown paths such as mqprio_destroy.

How to confirm the fix worked

Verify the patch is present by inspecting net/core/dev.c around netdev_txq_to_tc and __netif_set_xps_queue for the added bounds check; reproduce the KASAN splat on an unpatched kernel using veth with 8 queues and mqprio followed by XPS write; confirm absence of slab-out-of-bounds after upgrade.

Typical attack path

  1. Lower num_tc via netdev_set_num_tc without resetting tc_to_txq or prio_tc_map
  2. Invoke xps_rxqs_store or equivalent sysfs write referencing a stale high traffic class
  3. Compute tci = j * num_tc + tc where tc >= num_tc and j reaches the last id
  4. Perform RCU_INIT_POINTER write one past the end of the kmalloc'd attr_map

How to detect it

Search kernel logs for KASAN slab-out-of-bounds messages referencing __netif_set_xps_queue and net/core/dev.c:2954; inspect sysfs writes to /sys/class/net/*/queues/ that coincide with mqprio configuration changes; review audit logs for processes writing XPS attributes after TC reconfiguration.

  • BUG: KASAN: slab-out-of-bounds in __netif_set_xps_queue
  • Write of size 8 at addr .* by task xps_oob
  • net/core/dev.c:2954
  • xps_rxqs_store

What your security team should do

  • Monitor for kernel updates addressing this buffer overflow and schedule deployment within normal change windows given low EPSS
  • Audit custom or third-party drivers that call netdev_set_num_tc and ensure they use netdev_reset_tc for full teardown
  • Add KASAN or kernel memory debugging to test environments that exercise XPS and mqprio configurations

The record

In the Linux kernel, the following vulnerability has been resolved: net: xps: reject an out of range traffic class Only the entries below dev->num_tc are valid in dev->tc_to_txq[], and dev->prio_tc_map[] may only name classes below it. netdev_set_num_tc() lowers dev->num_tc without touching either array. netdev_txq_to_tc() walks all TC_MAX_QUEUE slots and netdev_get_prio_tc_map() returns the entry as it stands, so a leftover entry is handed out as a traffic class >= dev->num_tc. Taking that class from netdev_txq_to_tc(), __netif_set_xps_queue() rejects only a negative one and indexes an XPS map sized for dev->num_tc classes: tci = j * num_tc + tc; RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map); attr_map[] holds nr_ids * num_tc entries and j runs over the ids named in the mask, so a class that is not below num_tc pushes tci past the end of the map for the last ids and the store overruns it. Any caller that lowers num_tc leaves such entries behind, and mqprio_destroy() tears down with netdev_set_num_tc(dev, 0) rather than netdev_reset_tc(). After mqprio with 8 classes then 1, tc_to_txq[1..7] still describe txq 1..7. The splat is from an XPS write to txq 2 on a veth with 8 rx queues: attr_map[] has 8 * 1 entries, tci = j + 2, and j == 6 stores one past the end of the 88-byte map: 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) Reject a class the map has no room for.

Affected packages

Ecosystem Package Introduced Fixed