CVE-2026-98567 in Linux
Tóm tắt
Bởi VulDB • 19/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
net: xps: từ chối một lớp lưu lượng (traffic class) nằm ngoài phạm vi hợp lệ
Chỉ các mục dưới dev->num_tc mới là hợp lệ trong dev->tc_to_txq[], và dev->prio_tc_map[] chỉ có thể trỏ đến các lớp thấp hơn nó. Hàm netdev_set_num_tc() làm giảm dev->num_tc mà không tác động vào bất kỳ mảng nào trong hai mảng trên.
Hàm netdev_txq_to_tc() duyệt qua tất cả các slot TC_MAX_QUEUE và hàm netdev_get_prio_tc_map() trả về mục dữ liệu như trạng thái hiện tại, do đó một mục dư thừa được đưa ra dưới dạng lớp lưu lượng >= dev->num_tc. Khi lấy lớp này từ netdev_txq_to_tc(), __netif_set_xps_queue() chỉ từ chối các giá trị âm và lập chỉ mục cho bản đồ XPS có kích thước dành cho num_tc lớp:
tci = j * num_tc + tc; RCU_INIT_POINTER(new_dev_maps->attr_map[tci], map);
Mảng attr_map[] chứa nr_ids * num_tc mục và biến j chạy qua các id được đặt tên trong mặt nạ (mask), do đó một lớp không nằm dưới num_tc sẽ đẩy tci vượt quá cuối bản đồ đối với các id cuối cùng, khiến thao tác ghi tràn ra ngoài vùng nhớ.
Bất kỳ caller nào làm giảm num_tc đều để lại các mục dư thừa như vậy, và mqprio_destroy() hủy bỏ cấu hình bằng cách gọi netdev_set_num_tc(dev, 0) thay vì netdev_reset_tc(). Sau khi sử dụng mqprio với 8 lớp rồi chuyển sang 1 lớp, tc_to_txq[1..7] vẫn mô tả txq 1..7. Lỗi (splat) xuất hiện từ một thao tác ghi XPS vào txq 2 trên veth có 8 hàng đợi nhận (rx queues): attr_map[] có 8 * 1 mục, tci = j + 2, và khi j == 6 thì thực hiện ghi vượt quá cuối bản đồ kích thước 88 byte:
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)
Từ chối một lớp mà bản đồ không còn đủ chỗ chứa.
If you want to get best quality of vulnerability data, you may have to visit VulDB.