CVE-2025-38670
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: arm64/entry: cpu_switch_to() və call_on_irq_stack() funksiyalarında DAIF maskalanır `cpu_switch_to()` və `call_on_irq_stack()` funksiyaları, əgər aktivdirsə, Shadow Call Stack ilə birlikdə müxtəlif steklərə keçid etmək üçün SP-ni manipulyasiya edir. Bu iki stek dəyişikliyi atomar şəkildə yerinə yetirilə bilmir və hər iki funksiya SError-lar və ya Debug Exception-lar tərəfindən kəsilə bilər ki, bu da ehtimalı az olsa da, ciddi problemlərə yol açır: kəsilmə baş verdikdə, uyğunlaşmayan steklər və Shadow Call Stack yaranır ki, bu da steklərin korlanmasına (clobbering) səbəb olur. `cpu_switch_to()` funksiyasında bu, SP_EL0 yeni tapşığı (task) göstərdiyi, lakin x18 hələ də köhnə tapşığın SCS-ni göstərdiyi zaman baş verə bilər. İnterrupt handler tapşığın SCS göstəricisini saxlamağa çalışdıqda, köhnə tapşığın SCS göstəricisini (x18) yeni tapşıq strukturuna (SP_EL0 tərəfindən göstərilən) yazaraq onu korlayacaqdır. `call_on_irq_stack()` funksiyasında isə bu, tapşıq stekindən IRQ stekinə keçid zamanı və geri qayıdarkən baş verə bilər. Hər iki halda, SCS göstəricisi IRQ SCS-ni göstərdiyi, lakin SP tapşıq stekini göstərdiyi zaman kəsilmə baş verə bilər. İç-içə (nested) interupt handler öz qayıdış ünvanlarını IRQ SCS-ə yükləyir. Daha sonra o, SP-nin tapşıq stekini göstərdiyini aşkar edir, `call_on_irq_stack()` funksiyasını çağırır və tapşıq SCS göstəricisini IRQ SCS göstəricisi ilə əvəz edərək korlayır, hansı ki, ondan yenidən istifadə edəcək! Bu, tapşıqların yanlış SCS-ə və ya hətta IRQ SCS-ə qayıtmasına səbəb olur ki, bu da əgər aktivdirsə, CONFIG_VMAP_STACK və ya FPAC vasitəsilə kernel panic-ləri tetikləyir. Bu, standart konfiqurasiyada mümkündür, lakin ehtimalı azdır. Lakin CONFIG_ARM64_PSEUDO_NMI aktivləşdirildikdə, DAIF maskalanmır və bunun əvəzinə GIC, prioritetə əsasən CPU-nun hansı interuptları almalı olduğunu filtrləməyə cavabdeh olur. NMI-ləri emulyasiya etmək məqsədi nəzərə alınarsa, pseudo-NMI-lər sistem konfiqurasiyasından və iş yükündən asılı olaraq `cpu_switch_to()` və `call_on_irq_stack()` funksiyalarında belə çox tez-tez qəbul edilə bilər ki, bu da proqnozlaşdırılmayan kernel panic-lərə gətirib çıxarır. `cpu_switch_to()` funksiyasında DAIF tamamilə maskalanır və geri qayıdarkən bərpa edilir. Eyni proses `call_on_irq_stack()` funksiyasında da tətbiq edilir, lakin bərpa və maskalama branch ətrafında həyata keçirilir. Bütün konfiqurasiyalar arasında davranışın ardıcıllığını təmin etmək üçün CONFIG_SHADOW_CALL_STACK aktiv olmadıqda belə DAIF maskalanır. Mövcud makro yalnız IF-i maskaladığı üçün, DAIF-i saxlamaq və maskalamaq üçün yeni bir assembly makrosu tətbiq edilmişdir.
Necə düzəltmək olar
- linux linux_kernel5.10.210, 5.15.190, 6.1.149, 6.6.101, 6.12.41, 6.15.9 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.10.180 ≤ v < 5.10.210, 5.15.111 ≤ v < 5.15.190, 6.1.28 ≤ v < 6.1.149, 6.2.15 ≤ v < 6.6.101, 6.7 ≤ v < 6.12.41, 6.13 ≤ v < 6.15.9, 6.16 | 5.10.210, 5.15.190, 6.1.149, 6.6.101, 6.12.41, 6.15.9 |
| debian debian_linux | 11.0 | — |
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.
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.