Linux: net: xps: reject an out of range traffic class
What fixes it
- 967e10f40a0c6732db299cbe001df0e859196055LinuxCVE List
- 1cb8e40525a72c9f1e1cf94c68c172b3b9bbdc81LinuxCVE List
- 6ea8f643053f33622f9116e4e1db58306ece45e3LinuxCVE List
- 9e841723ba482d41ecbf90241c756a16cdfea949LinuxCVE List
- 2cc1c3977acbffc417fb5b57699d1df3dcffb5fdLinuxCVE List
- 930318290d8509e864c015fe6c9239470b3c579cLinuxCVE List
Show all 7 fixed versions
- 4da3b7b8b50f3e2fde54a4c18a82a8e3f6223910LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
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.
Text from CVE List
Affected versions 18
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 967e10f40a0c6732db299cbe001df0e859196055CVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 1cb8e40525a72c9f1e1cf94c68c172b3b9bbdc81CVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 6ea8f643053f33622f9116e4e1db58306ece45e3CVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 9e841723ba482d41ecbf90241c756a16cdfea949CVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before eff227a3cb4d0089fbb85c73480bf8abf2e5ae7fCVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 2cc1c3977acbffc417fb5b57699d1df3dcffb5fdCVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 930318290d8509e864c015fe6c9239470b3c579cCVE List
- Linuxaffected: 184c449f91fef521042970cca46bd5cdfc0e3a37 before 4da3b7b8b50f3e2fde54a4c18a82a8e3f6223910CVE List
- Linuxaffected: 4.10CVE List
- Linuxunaffected: all versions before 4.10CVE List
- Linuxunaffected: 5.10.271 through 5.10.*CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.55 through 6.18.*CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 8
- git.kernel.org/stable/c/967e10f40a0c6732db299cbe001df0e859196055Referencevia CVE List
- git.kernel.org/stable/c/1cb8e40525a72c9f1e1cf94c68c172b3b9bbdc81Referencevia CVE List
- git.kernel.org/stable/c/6ea8f643053f33622f9116e4e1db58306ece45e3Referencevia CVE List
- git.kernel.org/stable/c/9e841723ba482d41ecbf90241c756a16cdfea949Referencevia CVE List
- git.kernel.org/stable/c/eff227a3cb4d0089fbb85c73480bf8abf2e5ae7fReferencevia CVE List
- git.kernel.org/stable/c/2cc1c3977acbffc417fb5b57699d1df3dcffb5fdReferencevia CVE List
- git.kernel.org/stable/c/930318290d8509e864c015fe6c9239470b3c579cReferencevia CVE List
- git.kernel.org/stable/c/4da3b7b8b50f3e2fde54a4c18a82a8e3f6223910Referencevia CVE List