CVE-2026-64374
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: sched/rt: PREEMPT_RT olmayan sistemlər üçün RT_PUSH_IPI standart olaraq söndürülmüşdür RT miqrasiyası aqressiv şəkildə həyata keçirilir. Bir CPU yüksək prioritetli RT tapşırığını daha aşağı prioritetli tapşırıq üçün planlaşdırdıqda (schedule), digər CPU-da icra olunmağı gözləyən və hazırda planlaşdırılacaq tapşırıqdan daha yüksək prioritetə malik hər hansı bir RT tapşırığının olub-olmadığını yoxlayır. Əgər belə bir tapşırıq tapılarsa, o, həmin tapşırığı öz CPU-suna çəkir və orada icrasına şərait yaradır. Normalda bu çəkmə prosesi, scheduler domenindəki bütün CPU-ları əhatə edən və hazırda daha yüksək prioritetli RT tapşırığı işlədiyi üçün gözləyən RT tapşırıqlarının olduğu RT yüklü maskasına (rto) baxmaqla həyata keçirilir. Daha aşağı prioritetli tapşırığı planlaşdırmaq üzrə olan CPU, yüklü CPU-nun rq kilidini (lock) götürür və RT tapşırığını həmin CPU-nun növbəsindən (runqueue) yerli növbəyə köçürərək yüksək prioritetli RT tapşırığını planlaşdırır. Bir çox CPU eyni vaxtda daha aşağı prioritetli tapşırığı planlaşdırdıqda bu, problemlərə səbəb olurdu. Onların hamısı yüklü RT tapşırıqları olan CPU-nun eyni növbə kilidini götürməyə çalışırdılar. Yalnız kilidi ilk alan CPU həmin tapşırığı əldə edirdi. Digərləri isə növbə kilidini alana qədər gözləyir və sonra çəkiləcək heç nə olmadığını görüb heç bir hərəkət etmirdilər. Çox sayda CPU-lu sistemlərdə bu, PREEMPT_RT tərəfindən icazə veriləndən daha yüksək gecikməyə (500mk saniyəyə qədər) səbəb olurdu. Bunun həlli kimi RT_PUSH_IPI məntiqi yaradıldı. Hər hansı bir CPU tapşırığı çəkmək istədikdə, yüklü CPU-nun növbə kilidini götürmək əvəzinə, həmin CPU-ya IPI göndərirdi və bu IPI idarəedicisi (handler), gözləyən RT tapşırığı olan CPU-nun onu "itələməsini" (push) təmin edirdi. Sonra həmin idarəedici növbəti yüklü RT tapşırıqları olan CPU-ya IPI göndərirdi və belə davam edirdi. Qeyd edək ki, birinci CPU bu prosesi başlatdıqdan sonra, başqa bir CPU çəkmə əməliyyatı etmək istəsə, prosesin artıq başladığını görür və yalnız IPI-lərin davam etməsini təmin etmək üçün sayğacı artırırdı. RT_PUSH_IPI, PREEMPT_RT ilə bağlı gecikmə problemini həll etdi, lakin PREEMPT_RT olmayan sistemlərdə yeni bir problemə səbəb ola bilərdi. Belə ki, softirq-lər PREEMPT_RT-də thread kontekstində işləyir, lakin qeyri-RT sistemlərdə onlar kəsilmə (interrupt) kontekstində işləyə bilirlər. Əgər bir IPI, çox sayda RT tapşırığını yeni oyatmış CPU-ya çatarsa və cari CPU qeyri-RT və ya aşağı prioritetli RT tapşırığı işlədirsə, o, "itələmə" (push) etmək əvəzinə sadəcə həmin CPU-da planlaşdırma (schedule) aparardı. Lakin əgər bu CPU-da eyni zamanda softirq də icra olunursa, planlaşdırma softirq bitənə qədər gözləməli idi. O vaxta qədər, CPU-da hələ də icranı gözləyən RT tapşırıqları olduğu üçün CPU hələ də yüklü hesab edilirdi. Yüksək şəbəkə trafiki olan böyük bir maşında, softirq-lərin 750mk saniyənin 500mk saniyəsini tutduğu iş yükündə "live lock" halı baş verdi. Eyni zamanda RT tapşırıqları da oyadılırdı və bu, RT çəkmə məntiqinin daim icra olunmasına səbəb olurdu. Növbədə olan lakin hələ işləməyən RT tapşırıqları olan bir CPU-da softirq tetikləndikdə və digər CPU-lar bu CPU-nu yüklü gördükdə, ona IPI göndərirdilər. CPU, gözləyən RT tapşırıqlarının hazırda işləyən tapşırıqdan daha yüksək prioritetli olduğunu görür və sadəcə həmin CPU-nu planlaşdırırdı. Lakin softirq icra olunduğu üçün, planlaşdırma baş verməmişdən əvvəl eynisini etmək üçün yenidən IPI qəbul edirdi. IPI-lərin sayı hazırda işləyən softirq-ni o qədər yavaşlatırdı ki, o, tapşırıq kontekstinə geri dönməzdən əvvəl başqa bir softirq icra olunurdu və buna görə də CPU-nun planlaşdırma etməsinə heç vaxt imkan verilmir və CPU "live lock" vəziyyətinə düşürdü. RT_PUSH_IPI, PREEMPT_RT-yə kömək etmək üçün yaradıldığına görə, PREEMPT_RT aktiv deyilsə, onun standart olaraq söndürülmüş olması təmin edilmişdir.
Necə düzəltmək olar
- linux linux_kernel5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 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 | 4.1 ≤ v < 5.10.261, 5.11 ≤ v < 5.15.212, 5.16 ≤ v < 6.1.178, 6.2 ≤ v < 6.6.145, 6.7 ≤ v < 6.12.96, 6.13 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4 | 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 |
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.