CVE-2026-90071 in Linux
Tóm tắt
Bởi VulDB • 17/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
net/sched: sch_teql: khôi phục lại giá trị của skb->dev trong đường dẫn xử lý khi thất bại ở thiết bị phụ (slave)
Hàm teql_master_xmit() đặt skb->dev = slave trước khi gọi ndo_start_xmit() của thiết bị phụ, nhưng không khôi phục nó khi quá trình truyền dữ liệu đó thất bại. Do đó, gói tin (skb) sẽ chuyển sang thiết bị phụ tiếp theo trong khi vẫn trỏ đến thiết bị cũ.
Nếu một thiết bị phụ sau đó không có hàng xóm đã được giải quyết (resolved neighbour), teql_resolve() sẽ chuyển skb cho neigh_event_send(), hàm này đặt nó vào arp_queue của hàng xóm tương ứng với giá trị skb->dev lỗi thời. Vì skb->dev không giữ tham chiếu, việc xóa thiết bị phụ cũ sẽ làm tự do hóa đối tượng net_device trong khi skb vẫn còn được xếp hàng đợi. Bất kỳ tác vụ nào chạy tiếp trên skb đó - chẳng hạn như arp_error_report() khi hết thời gian chờ (timeout), hoặc neigh_direct_output() -> dev_queue_xmit() sau khi hàng xóm được giải quyết - đều gây ra lỗi Use-After-Free (UAF) giống như dưới đây:
BUG: KASAN: slab-use-after-free in __icmp_send (net/ipv4/icmp.c:914 (discriminator 2)) Read of size 4 at addr ffff888106e100b0 by task flood_packet/527 CPU: 0 UID: 0 PID: 527 Comm: flood_packet Not tainted 7.2.0-rc6-g594d90519502 #1 PREEMPT(lazy) Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Call Trace: <IRQ> dump_stack_lvl (lib/dump_stack.c:94 lib/dump_stack.c:120) print_report (mm/kasan/report.c:378 mm/kasan/report.c:482) ? __pfx__raw_spin_lock_irqsave (./include/asm-generic/qrwlock.h:122 (discriminator 4)) ? __icmp_send (net/ipv4/icmp.c:914 (discriminator 2)) kasan_report (mm/kasan/report.c:595) ? __icmp_send (net/ipv4/icmp.c:914 (discriminator 2)) __icmp_send (net/ipv4/icmp.c:914 (discriminator 2)) [...]
ipv4_link_failure (net/ipv4/route.c:1251 net/ipv4/route.c:1258) ? __pfx_ipv4_link_failure (./include/linux/skbuff.h:4327) ? _raw_write_lock (./include/linux/instrumented.h:55 ./include/linux/atomic/atomic-instrumented.h:1301 ./include/asm-generic/qrwlock.h:98 ./include/linux/rwlock_api_smp.h:230 kernel/locking/spinlock.c:304) ? __pfx__raw_write_lock (kernel/locking/spinlock.c:175) arp_error_report (./include/net/dst.h:438 net/ipv4/arp.c:296) neigh_invalidate (net/core/neighbour.c:1077) neigh_timer_handler (net/core/neighbour.c:1169) [...]
Allocated by task 505: kasan_save_stack (mm/kasan/common.c:57) kasan_save_track (mm/kasan/common.c:78) __kasan_kmalloc (mm/kasan/common.c:398 mm/kasan/common.c:415) __kvmalloc_node_noprof (./include/linux/kasan.h:263 mm/slub.c:5334 mm/slub.c:6905) alloc_netdev_mqs (net/core/dev.c:12055 (discriminator 2)) rtnl_create_link (net/core/rtnetlink.c:3721) rtnl_newlink (net/core/rtnetlink.c:3903 net/core/rtnetlink.c:4044 net/core/rtnetlink.c:4159) rtnetlink_rcv_msg (net/core/dev.c:7076) [...]
Freed by task 536: kasan_save_stack (mm/kasan/common.c:57) kasan_save_track (mm/kasan/common.c:78) kasan_save_free_info (mm/kasan/generic.c:584) __kasan_slab_free (mm/kasan/common.c:253 mm/kasan/common.c:285) kfree (./include/linux/kasan.h:235 mm/slub.c:2677 mm/slub.c:6377 mm/slub.c:6692) device_release (drivers/base/core.c:2636) kobject_put (lib/kobject.c:689 lib/kobject.c:720 ./include/linux/kref.h:65 lib/kobject.c:737) netdev_run_todo (net/core/dev.c:11756) rtnl_dellink (net/core/rtnetlink.c:157 ./include/linux/rtnetlink.h:135 net/core/rtnetlink.c:3651) rtnetlink_rcv_msg (net/core/rtnetlink.c:7076) [...]
Khắc phục lỗi này bằng cách khôi phục lại skb->dev về thiết bị chính (master) ở cuối mỗi vòng lặp của thiết bị phụ.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.