CVE-2025-37786

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: net: dsa: probe uğursuz olduqda marşrutlaşdırma cədvəlinin azad edilməsi Əgər dsa_tree_setup() funksiyasında complete = true olarsa, bu o deməkdir ki, biz uğurla probe olunan ağacın sonuncu keçid cihazıyığıq (switch) və probe yolumuzdakı bütün keçid cihazlarını qurmalıyıq. "complete" dəyişəni true olduqdan sonra dsa_tree_setup_cpu_ports() və ya hər hansı növbəti funksiya uğursuz ola bilər. Bu baş verdikdə, bütün ağac qurulumu qeyri-müəyyən vəziyyətə düşür: ilk N-1 keçid cihazı probe prosesini uğurla tamamlayıb (yalniz ağacın dst->ports və bəlkə də dst->rtable hissələrində daimi yaddaş ayırıblar), lakin N-ci keçid cihazının probe prosesi uğursuz olur və istifadəçi baxımından heç bir nəticə əldə olunmadan ağacın qurulma prosesi sona çatır. N-ci keçid cihazının probe prosesi uğursuz olduqda, onun yaddaşı (ports) azad edilir və dst->ports-dan silinir. Lakin dsa_link_touch() tərəfindən yaradılan və həmin portlara işarə edən dst->rtable elementləri orada qalır və referans verildikdə use-after-free xətasına səbəb olur. Əgər dsa_tree_setup_switches() funksiyası -EPROBE_DEFER qaytararsa (ki, bu tamamilə mümkündür, çünki ds->ops->setup() məhz burada yerləşir), belə bir kasan hesabatı alırıq: ================================================================== BUG: KASAN: slab-use-after-free in mv88e6xxx_setup_upstream_port+0x240/0x568 Read of size 8 at addr ffff000004f56020 by task kworker/u8:3/42 Call trace: __asan_report_load8_noabort+0x20/0x30 mv88e6xxx_setup_upstream_port+0x240/0x568 mv88e6xxx_setup+0xebc/0x1eb0 dsa_register_switch+0x1af4/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 Allocated by task 42: __kasan_kmalloc+0x84/0xa0 __kmalloc_cache_noprof+0x298/0x490 dsa_switch_touch_ports+0x174/0x3d8 dsa_register_switch+0x800/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 Freed by task 42: __kasan_slab_free+0x48/0x68 kfree+0x138/0x418 dsa_register_switch+0x2694/0x2ae0 mv88e6xxx_register_switch+0x1b8/0x2a8 mv88e6xxx_probe+0xc4c/0xf60 mdio_probe+0x78/0xb8 really_probe+0x2b8/0x5a8 __driver_probe_device+0x164/0x298 driver_probe_device+0x78/0x258 __device_attach_driver+0x274/0x350 Bu xətanı düzəltməyin ən sadə yolu marşrutlaşdırma cədvəlini tamamilə silməkdir. Hətta N-ci keçid cihazından başqa digər portlar arasındakı bağlantıları silsək belə, dsa_tree_setup_routing_table() onu yenidən yaratmaqda problem yaşamayacaq, çünki dsa_link_touch() əvvəlcə port cütünün dst->rtable-da mövcud olub-olmadığını yoxlayır və yoxdursa, ayırır. Marşrutlaşdırma cədvəlinin tamamilə silinməsi artıq dsa_tree_teardown() funksiyasında mövcuddur, ona görə də bunu ağac qurulumunun xəta yolundan da çağırıla bilən bir funksiyaya çevirmək lazımdır. Səhvin mənbəyi olan commit analizimə görə, bu, dst->rtable-a dsa_link elementlərini əlavə edən commit-dir. Ondan əvvəl hər bir keçid cihazının öz ds->rtable-ı var idi və probe uğursuz olduqda bu azad edilirdi. Lakin ağac potensial olaraq daimi yaddaşdır.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc1 may 2025
İlk görülmə1 may 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.6.88, 6.12.25, 6.14.4 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.5 ≤ v < 6.6.88, 6.7 ≤ v < 6.12.25, 6.13 ≤ v < 6.14.4, 6.156.6.88, 6.12.25, 6.14.4

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.