CVE-2026-64364
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: HID: multitouch: mt_io_flags üzerindeki sınır dışı bit erişimi düzeltildi mt_io_flags tek bir unsigned long değeridir ancak mt_process_slot(), mt_release_pending_palms() ve mt_release_contacts() bunu slot numarasıyla indekslenen her slota özel bir bitmap olarak kullanmaktadır. Bu slot numarası BITS_PER_LONG ile değil, cihazın ContactCountMaximum özellik raporundan alınan ve 255'e kadar çıkabilen td->maxcontacts ile sınırlandırılmıştır. Sonuç olarak, yüksek temas sayısı bildiren bir multitouch cihazı, set_bit()/clear_bit() fonksiyonlarının mt_io_flags sözcüğünün ötesinde çalışmasına neden olur ve struct mt_device yapısının bitişik üyelerini bozar. Buna ulaşmanın en kolay yolu sticky-fingers serbest bırakma zamanlayıcısıdır. mt_release_contacts() şu şekilde çalışır: for (i = 0; i < mt->num_slots; i++) clear_bit(i, &td->mt_io_flags); Burada num_slots == maxcontacts şeklindedir. maxcontacts değeri 250 civarında olduğunda döngü, td->applications.next ile örtüşen bitleri temizleyerek bu liste başlığını sıfırlar ve hemen ardından gelen list_for_each_entry() işlemi NULL referansı verir. Çekirdek, zamanlayıcı (softirq) bağlamında panic durumuna geçer. Bir KASAN derlemesinde bu durum, mt_release_contacts() içinde, offsetof(struct mt_application, num_received) olan 0x58 ofsetinde bir null-ptr-deref ile genel koruma hatası (general protection fault) olarak görünür. Bu duruma güvenilmeyen bir USB veya Bluetooth HID multitouch cihazı üzerinden ulaşılabilir; herhangi bir yerel yetki gerekmemektedir. Her slota özel aktif durumu, pending_palm_slots için halihazırda kullanılan desenin aynısı olacak şekilde maxcontacts boyutunda ayrı tahsis edilmiş bir bitmap'te saklayın ve mt_io_flags içerisinde yalnızca MT_IO_FLAGS_RUNNING bilgisini tutun. İki adet "mt_io_flags & MT_IO_SLOTS_MASK" kurma kontrolü bitmap_empty(td->active_slots, td->maxcontacts) haline gelir. MT_IO_FLAGS_RUNNING değerini tekrar bit 0'a taşıyın. Düşük baytı slot bitlerine ayırmak amacıyla aynı commit ile bit 32'ye yükseltilmişti; slot bitleri kaldırıldığında tekrar bit 0'a sığar, bu da onu 32-bit sistemlerde unsigned long sınırları içinde tutar.
Nasıl düzeltilir
- linux linux_kernel5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18, 6.18.39, 7.1.4 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 5.10.246 ≤ v < 5.10.261, 5.15.196 ≤ v < 5.15.212, 6.1.158 ≤ v < 6.1.178, 6.6.114 ≤ v < 6.6.145, 6.12.55 ≤ v < 6.12.97, 6.17.5 ≤ v < 6.18, 6.18.1 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4, 6.18, 7.2 | 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.97, 6.18, 6.18.39, 7.1.4 |
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.