CVE-2025-39821
Təsvir
Linux kernelində aşağıdakı zəiflik həll edilmişdir: perf: Qeyri-aktiv hadisələrin dayandırılması/başladılması zamanı qeyri-müəyyən davranışın qarşısının alınması PERF_EVENT_STATE_OFF vəziyyətində olan perf hadisələri üzərində pmu->start()/stop() çağırışları event->hw.idx dəyərini -1 səviyyəsində qoya bilər. PMU drayverləri sonradan bu mənfi indeksi bit əməliyyatlarında sürüşmə eksponenti kimi istifadə etməyə cəhd etdikdə, bu, UBSAN-ın sürüşmənin hüdudları aşması barədə hesabatlarına səbəb olur. Problem, hadisə qruplarının bəzi üzvləri qəsdən deaktiv edildikdə throttling mexanizmini necə idarə etməsindəki məntiqi qüsurdur. Mark Rutland tərəfindən təqdim edilən analiz və reproduksiyaya əsaslanaraq (bu problem həm arm64, həm də x86-64 üzərində müşahidə olunur). Ssenari aşağıdakı kimi inkişaf edir: 1. Qrup lideri hadisə çox aqressiv seçmə dövrü ilə konfiqurasiya edilir (məsələn, sample_period = 1). Bu, tez-tez kəsilmələrə səbəb olur və throttling mexanizmini işə salır. 2. Həmin qrupdakı uşaq hadisə deaktiv vəziyyətdə yaradılır (.disabled = 1). Bu hadisə PERF_EVENT_STATE_OFF vəziyyətində qalır. PMU-ya planlaşdırılmadığı üçün onun event->hw.idx dəyəri -1 olaraq qalır. 3. Throttling baş verdikdə, perf_event_throttle_group() və sonradan perf_event_unthrottle_group() bütün qardaş hadisələri, o cümlədən deaktiv uşaq hadisəni də nəzərdən keçirir. 4. Bu qeyri-aktiv uşaq hadisə üzərində perf_event_throttle()/unthrottle() çağırılır və onlar da öz növbəsində event->pmu->start()/stop() çağırırlar. 5. PMU drayveri hw.idx == -1 olan hadisəni qəbul edir və onu sürüşmə eksponenti kimi istifadə etməyə cəhd edir. Məsələn, PMCNTENSET(idx) kimi makrolarda bu, UBSAN hesabatına səbəb olur. Throttling mexanizmi aparat üzərində aktiv şəkildə planlaşdırılmamış hadisələri başlatmağa/dayandırmağa cəhd edir. Vəziyyət yoxlaması perf_event_throttle()/perf_event_unthrottle() funksiyalarına köçürülür ki, qeyri-aktiv hadisələr tamamilə ötürülsün. Bu, yalnız etibarlı hw.idx dəyərinə malik aktiv hadisələrin emal edilməsini təmin edir, qeyri-müəyyən davranışın qarşısını alır və UBSAN xəbərdarlıqlarını susdurur. Düzəldilmiş yoxlama PMU əməliyyatlarına davam etməzdən əvvəl şərtin doğru olduğunu təmin edir. Problem syzkaller reproduksiyası ilə təkrar yaradıla bilər:
Necə düzəltmək olar
- linux linux_kernel6.16.5 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 | 6.16 ≤ v < 6.16.5, 6.17 | 6.16.5 |
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.