CVE-2024-38613
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: m68k: çekirdek iş parçacığı oluşturmadaki spinlock yarışı düzeltildi Bağlam değiştirme (context switching), 'prev' görevinden 'next' görevine geçiş sırasında doğru kilit sahibini korumaya özen gösterir. Bu durum, geçiş süresince kesmelerin devre dışı kalmasına dayanır. Bu koşul, normal süreç oluşturma ve halihazırda çalışan süreçler arasındaki bağlam değiştirme için garanti altındadır; çünkü hem 'prev' hem de 'next', durum kaydedicilerinin kayıtlı kopyalarında kesmeleri zaten devre dışı bırakmıştır. Yeni oluşturulan çekirdek iş parçacıkları için durum farklıdır. Durum kaydedicisi copy_thread() fonksiyonunda PS_S olarak ayarlanır, bu da IPL değerini 0'da bırakır. switch_to() veya resume() fonksiyonunda 'next' iş parçacığının durum kaydedicisi geri yüklendiğinde, kesmeler vaktinden önce etkinleşmiş olur. Ardından resume(), çalışma kuyruğu kilidinin serbest bırakıldığı ret_from_kernel_thread() ve schedule_tail() üzerinden döner (bkz. finish_task_switch() ve finish_lock_switch()). finish_task_switch() içinde kilit serbest bırakılmadan önce scheduler_tick() fonksiyonunu çağıran bir zamanlayıcı kesmesi, kilidin mevcut görev tarafından sahiplenilerek zaten alınmış olduğunu tespit eder. Bu durum, Guenter Roeck tarafından bildirildiği üzere bir spinlock rekürsiyon uyarısına neden olur. Tespit edebildiğim kadarıyla, bu yarış durumu 533e6903bea0 ("m68k: split ret_from_fork(), simplify kernel_thread()") commit'i ile ortaya çıkmıştır ancak çekirdek geçmişi üzerinde detaylı bir inceleme yapmadığım için bu commit'ten daha öncesine dayanıyor olabilir. Çekirdek iş parçacıkları için kaydedilen durum kaydedici kopyasında kesmeler devre dışı bırakılamaz (kullanıcı alanı nihayet başlatıldığında init, kesmelerin devre dışı olduğu konusunda uyarı verecektir). resume() fonksiyonunda görevlerin kaydedici setleri değiştirilirken kesmeleri geçici olarak devre dışı bırakın. Burada sr geri yüklendikten sonra basit bir oriw 0x700,%sr işleminin yeterli olmadığına dikkat edin; bu işlem, 'spinlock recursion' uyarısının hala gözlemlenebilmesi için yeterli bir yarış durumu bırakmaktadır. ARAnyM ve qemu (Quadra 800 emülasyonu) üzerinde test edilmiştir.
Nasıl düzeltilir
- linux linux_kernel4.19.316, 5.4.278, 5.10.219, 5.15.161, 6.1.93, 6.6.33, 6.8.12, 6.9.3 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 | 3.7 ≤ v < 4.19.316, 4.20 ≤ v < 5.4.278, 5.5 ≤ v < 5.10.219, 5.11 ≤ v < 5.15.161, 5.16 ≤ v < 6.1.93, 6.2 ≤ v < 6.6.33, 6.7 ≤ v < 6.8.12, 6.9 ≤ v < 6.9.3 | 4.19.316, 5.4.278, 5.10.219, 5.15.161, 6.1.93, 6.6.33, 6.8.12, 6.9.3 |
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.