CVE-2023-54149

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: net: dsa: sinxronlaşdırılmış VLAN-aware MAC ünvanları üçün şübhəli RCU istifadəsindən qaçınmaq Təsadüfi digər bir DSA switch-i üçün DSA master kimi felix drayverindən (UC filtrləməni və MC filtrləməni dəstəkləyən yeganə drayver) istifadə edildikdə, downstream switch portları VLAN-aware bridge-ə qoşularkən aşağıdakı stack trace görünür: ============================= WARNING: suspicious RCU usage ----------------------------- net/8021q/vlan_core.c:238 suspicious rcu_dereference_protected() usage! stack backtrace: Workqueue: dsa_ordered dsa_slave_switchdev_event_work Call trace: lockdep_rcu_suspicious+0x170/0x210 vlan_for_each+0x8c/0x188 dsa_slave_sync_uc+0x128/0x178 __hw_addr_sync_dev+0x138/0x158 dsa_slave_set_rx_mode+0x58/0x70 __dev_set_rx_mode+0x88/0xa8 dev_uc_add+0x74/0xa0 dsa_port_bridge_host_fdb_add+0xec/0x180 dsa_slave_switchdev_event_work+0x7c/0x1c8 process_one_work+0x290/0x568 Burada bildirilir ki, vlan_for_each() funksiyası rtnl_lock() kontekstini gözləyir, lakin DSA master-in ndo_set_rx_mode() funksiyasından çağırıldıqda bu kontekst təmin edilmir. Həmin funksiyanı çağıran dsa_slave_set_rx_mode() isə slave DSA interfeysinin dsa_port_bridge_host_fdb_add() funksiyasıdır və o, gecikdirilmiş dsa_slave_switchdev_event_work()-dan gəlir. Biz 0faf890fc519 ("net: dsa: drop rtnl_lock from dsa_slave_switchdev_event_work") commit-ində həmin çağırış yolunda rtnl_lock() kontekstindən qaçmaq üçün ciddi tədbirlər görmüşük və rtnl_lock()-u çağırmaq sadəcə mümkün deyil, çünki rtnl_lock()-a sahib olan çağırış yollarından (əslində onların hamısından) dsa_flush_workqueue() çağırılanda deadlock ehtimalı var. Beləliklə, DSA master öz ndo_set_rx_mode() funksiyasından vlan_for_each()-i çağırdıqda, bu cihazda 8021q drayverinin vəziyyəti eyni vaxtda girişlərdən heç bir şəkildə qorunmur. net/8021q/ kataloquna baxdıqda, vlan_info->vid_list-in xüsusi olaraq RCU traversal üçün nəzərdə tutulduğunu düşünmürəm, buna görə də vlan_for_each()-in RCU read-side formasını — vlan_for_each_rcu()-nu tətbiq etmək asan olmayacaq və hər halda bu tam olaraq bizim ehtiyac duyduğumuz şey olmayacaqdı. Ümumiyyətlə, inanıram ki, həll yolu net/8021q/-da deyil; vlan_for_each() bu tapşırıq üçün uyğun deyil. DSA-ya məhz rtnl_lock()-un saxlanılması lazım deyil — çünki biz blokladığımız şey netdev vəziyyətinin dəyişməsi deyil, sadəcə VLAN siyahısına eyni vaxtda əlavələrin/silinmələrin qarşısını almaqdır. Bizə hətta yuxuya gedə bilən (sleepable) kontekst belə lazım deyil — vlan_for_each()-in callback-i sadəcə gecikdirilmiş işi planlaşdırır. Təklif olunan çıxış yolu vlan_for_each()-ə asılılığı aradan qaldırmaq və .ndo_vlan_rx_add_vid() və .ndo_vlan_rx_kill_vid() funksiyalarından modifikasiya edilmiş VLAN siyahısı nüsxələrinə əsaslanan, yuxuya getməyən və rtnl-siz alternativ kodu birbaşa yazmaqdır.

CiddilikYüksək
CVSS7.5
İstismar ehtimalı—
MəhsulLinux
Dərc24 dek 2025
İlk görülmə24 dek 2025

Necə düzəltmək olar

Yeniləyin
  • Linux Linux3948c69b3837fec2ee5a90fbc911c343199be0ac, 3f9e79f31e51b7d5bf95c617540deb6cf2816a3f, d06f925f13976ab82167c93467c70a337a0a3cda, 6.3 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linux64fdc5f341db01200e33105265d4b8450122a82e ≤ v < 3948c69b3837fec2ee5a90fbc911c343199be0ac, 64fdc5f341db01200e33105265d4b8450122a82e ≤ v < 3f9e79f31e51b7d5bf95c617540deb6cf2816a3f, 64fdc5f341db01200e33105265d4b8450122a82e ≤ v < d06f925f13976ab82167c93467c70a337a0a3cda, 2daf967a24334865e51520e55190a646dd480cd7, 6.2.10 ≤ v < 6.3, 6.33948c69b3837fec2ee5a90fbc911c343199be0ac, 3f9e79f31e51b7d5bf95c617540deb6cf2816a3f, d06f925f13976ab82167c93467c70a337a0a3cda, 6.3

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.

CVE-2023-54149 · Linux · Dark Radar