CVE-2026-64584
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: usb: gadget: f_midi: midi nesnesi serbest bırakılmadan önce bekleyen IN işini iptal et f_midi sürücüsü, işleyicisi olan f_midi_in_work()'in container_of() aracılığıyla çevreleyen struct f_midi yapısını dereferans ettiği bir iş öğesi (midi->work) içerir. Bu iş iki noktadan etkinleştirilir: normal bir IN-uç nokta tamamlanmasında f_midi_complete() ve bir ALSA rawmidi çıkış akışı başlangıcında f_midi_in_trigger(). Ne f_midi_disable() ne de f_midi_unbind() midi->work işlemini iptal eder. f_midi_disable() yalnızca uç noktaları devre dışı bırakır ve in_req_fifo kuyruğunu boşaltır; iş öğesini senkronize etmez ve ses kartı, midi nesnesinin nihai olarak serbest bırakılmasına asenkron olarak bırakılır. midi nesnesi referans sayımlıdır (midi->free_ref) ve hem usb_function referansı hem de rawmidi private_data referansı bırakıldıktan sonra yalnızca f_midi_free() içinde serbest bırakılır. f_midi_unbind() işleminde, f_midi_disable() ses kartı serbest bırakılmadan önce çalışır; bu nedenle USB uç noktaları zaten devre dışı bırakılmış olsa da rawmidi aygıtı açık bir alt akış tarafından hala kullanılabilir durumdadır. Böyle bir alt akış üzerindeki eşzamanlı bir kullanıcı alanı yazma işlemi, f_midi_disable() döndükten sonra f_midi_in_trigger()'a ulaşabilir ve midi->work işlemini yeniden kuyruğa alabilir. Bu şekilde etkinleştirilen bir iş öğesi, son referans düştüğünde ve f_midi_free() kfree(midi) işlemini gerçekleştirdiğinde hala beklemede olabilir; bu durum f_midi_in_work()'in yapı serbest bırakıldıktan sonra onu dereferans etmesine yol açarak bir serbest bırakıldıktan sonra kullanım (use-after-free) hatasına neden olur. Bu nedenle, f_midi_disable() içinde midi->work işleminin iptal edilmesi yeterli olmayacaktır: ALSA tetikleme yolu, disable() döndükten sonra işi yeniden etkinleştirebilir. Referans sayımının sıfır olduğu serbest bırakma noktasındaki iptal işlemi, hiçbir etkinleştirme kaynağının hayatta kalamayacağı sınırdır; çünkü o ana kadar midi nesnesini canlı tutan her iki referans da düşürülmüştür: USB uç noktaları zaten devre dışı bırakılmıştır ve rawmidi aygıtı serbest bırakılmıştır. Bu sorun, gömülü work_struct yapısı geri kalan yapı ile birlikte serbest bırakılmadan önce, f_midi_free()'nin referans sayımı sıfır bloğunda cancel_work_sync(&midi->work) çağrılarak düzeltilmiştir. opts->lock uyuyan bir mutex olduğundan altında cancel_work_sync() çağırmak izin verilen bir işlemdir ve işleyici opts->lock yerine midi->transmit_lock kullandığından, çalışan bir iş örneğinin bitmesini beklerken herhangi bir kendi kendine kilitlenme (self-deadlock) durumu oluşmaz. Bu sorun kurum içi bir statik analiz aracı tarafından tespit edilmiştir.
Nasıl düzeltilir
- Linux Linuxf3c6f2c38062703d3dc7f86958bb0790c6959add, df18150126f66817e4d3f79f309e9c92d6ff384e, 620955b222c47332297d6bf38f78541aa699238a, 380b4bef46c2eb260c7a9c6bb2c5be33ce5a38f9, 87bc316dd6fc90072297c635e10b9aa6075ecda1, f45089eaad0a083d71d84ff175741d7e157d9b69, ac9a51d910bb7465c554c45320cb6c09f3d0b49d, 5650c18d93a1db7e27cb5a40b394747eb4686d5b, 5.10.265, 5.5 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 3635523e9b96213969693c320302d536774d8e9b ≤ v < f3c6f2c38062703d3dc7f86958bb0790c6959add, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < df18150126f66817e4d3f79f309e9c92d6ff384e, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < 620955b222c47332297d6bf38f78541aa699238a, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < 380b4bef46c2eb260c7a9c6bb2c5be33ce5a38f9, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < 87bc316dd6fc90072297c635e10b9aa6075ecda1, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < f45089eaad0a083d71d84ff175741d7e157d9b69, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < ac9a51d910bb7465c554c45320cb6c09f3d0b49d, 8653d71ce3763aedcf3d2331f59beda3fecd79e4 ≤ v < 5650c18d93a1db7e27cb5a40b394747eb4686d5b, 89019ab7a64fcdf98a2ba7799e5c6aff58d4a05d, 5.10.235 ≤ v < 5.10.265, 5.4.291 ≤ v < 5.5, 5.12 | f3c6f2c38062703d3dc7f86958bb0790c6959add, df18150126f66817e4d3f79f309e9c92d6ff384e, 620955b222c47332297d6bf38f78541aa699238a, 380b4bef46c2eb260c7a9c6bb2c5be33ce5a38f9, 87bc316dd6fc90072297c635e10b9aa6075ecda1, f45089eaad0a083d71d84ff175741d7e157d9b69, ac9a51d910bb7465c554c45320cb6c09f3d0b49d, 5650c18d93a1db7e27cb5a40b394747eb4686d5b, 5.10.265, 5.5 |
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.