CVE-2026-68329
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: iommu/amd: iommu_completion_wait() fonksiyonunda erken dönmek yerine tamamlanmanın beklenmesi need_sync, söz konusu IOMMU arkasındaki tüm domainler ve cihazlar tarafından paylaşılan her IOMMU'ya özel bir bayraktır. Bir komut sync == true ile kuyruğa alındığında ayarlanır ve bir tamamlanma bekleme (CWAIT) komutu kuyruğa alındığında temizlenir. Ancak, temizlenmiş bir need_sync yalnızca kapsayıcı bir CWAIT'in kuyruğa alındığı anlamına gelir; daha önce kuyruğa alınan tüm komutların donanımda gerçekten tamamlandığı anlamına gelmez. iommu_completion_wait(), need_sync değerini kilitsiz olarak okuyor ve bu değer false olduğunda erken dönüyordu. Bu durum, çoklu CPU senaryosunda "daha önce kuyruğa alınan tüm komutlar tamamlanana kadar engelle" sözleşmesini bozmaktadır: CPU2: inv-B kuyruğa ekle => need_sync = true CPU1: CWAIT(N) kuyruğa ekle; need_sync = false; ardından wait_on_sem(N) CPU2: need_sync == false oku => 0 döndür (bekleme yok!) CPU2, inv-B işlemi henüz tamamlanmamış olsa bile (inv-B'den sonra kuyruğa alınan CWAIT(N) henüz sinyal vermemiştir) herhangi bir sıra numarasını beklemeden döner. Ardından CPU2, örneğin sayfa tablosu sayfalarını serbest bırakırken IOMMU hala güncelliğini yitirmiş çevrimleri yürütmeye devam edebilir ve bu da bir use-after-free penceresi açar. Bu, bayrağın anlamı bakımından mantıksal bir yarış durumudur (race condition), bellek görünürlüğü sorunu değildir; dolayısıyla tek başına bariyerler yardımcı olmaz. Gereksiz CWAIT komutlarından kaçınma optimizasyonunu kaybetmeden düzeltme şu şekilde yapılmıştır: need_sync test edilmeden önce iommu->lock alınır ve değer false olduğunda erken dönülmez, bunun yerine tahsis edilen son sıra numarası (cmd_sem_val) beklenir. need_sync == false olması, son CWAIT'ten sonra hiçbir sync komutunun kuyruğa alınmadığını ima ettiğinden, bu CWAIT henüz tamamlanmamış her komuttan sonra FIFO sırasına girmiştir; böylece onun sıra numarasının beklenmesi, önceki tüm komutların (başka bir CPU tarafından kuyruğa alınmış olabilir) tamamlandığını garanti eder. Bekleyen işlerin olduğu yaygın yol değişmemiştir ve fazladan bir donanım komutu verilmemektedir.
Nasıl düzeltilir
- Linux Linux82c9a749d44efaaa1a1c781f8a6cf1747718f228, ab7faf5a172ebfdc423ebb3eea4d472740de82f9, 93494bd446396c257fb589f59894577e96e406e2, d053eb7e09e10cbdca3fca8b35c1017d438091b2, 02f8cefa2ad95ea3754f0cfd6fbae7f866202ccb, 1e75a8255f11c81fb07e81e5029cfd75804350a0 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < 82c9a749d44efaaa1a1c781f8a6cf1747718f228, 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < ab7faf5a172ebfdc423ebb3eea4d472740de82f9, 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < 93494bd446396c257fb589f59894577e96e406e2, 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < d053eb7e09e10cbdca3fca8b35c1017d438091b2, 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < 02f8cefa2ad95ea3754f0cfd6fbae7f866202ccb, 815b33fdc279d34ab40a8bfe1866623a4cc5669b ≤ v < 1e75a8255f11c81fb07e81e5029cfd75804350a0, 3.0 | 82c9a749d44efaaa1a1c781f8a6cf1747718f228, ab7faf5a172ebfdc423ebb3eea4d472740de82f9, 93494bd446396c257fb589f59894577e96e406e2, d053eb7e09e10cbdca3fca8b35c1017d438091b2, 02f8cefa2ad95ea3754f0cfd6fbae7f866202ccb, 1e75a8255f11c81fb07e81e5029cfd75804350a0 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.