CVE-2024-50275

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: arm64/sve: SVE trapları emal edilərkən köhnəlmiş CPU vəziyyətini ləğv etmək SVE traplarının idarə olunması məntiqi yadda saxlanılmış FPSIMD/SVE vəziyyətini yanlış şəkildə dəyişdirir və preemption ilə bağlı yarış şəraiti (race condition), canlı CPU vəziyyəti köhnəlmiş olsa belə (məsələn, SVE trapları aktiv olduqda), tapşırığın TIF_SVE bayrağının təyin edilmiş və TIF_FOREIGN_FPSTATE bayrağının təmizlənmiş olmasına səbəb ola bilər. Bunun, TIF_SVE təyin edildiyi halda SVE traplarının gözlənilmədiyi do_sve_acc() funksiyasından xəbərdarlıqların gəlməsinə səbəb olduğu müşahidə edilmişdir: | if (test_and_set_thread_flag(TIF_SVE)) | WARN_ON(1); /* SVE girişləri trap törətməməli idi */ Bu formada olan xəbərdarlıqlar vaxtaşırı olaraq hesabat edilmişdir, məsələn: https://lore.kernel.org/linux-arm-kernel/CA+G9fYtEGe_DhY2Ms7+L7NKsLYUomGsgqpdBj+QwDLeSg=JhGg@mail.gmail.com/ https://lore.kernel.org/linux-arm-kernel/[email protected]/ Yarış şəraiti, SVE trap idarəçisi yadda saxlanılmış FPSIMD/SVE vəziyyətini dəyişdirməzdən əvvəl və sonra, eyni CPU-da başlayıb bitmək şərtilə preemption-a məruz qaldıqda baş verə bilər, məsələn: | void do_sve_acc(unsigned long esr, struct pt_regs *regs) | { | // CPU 0-da trap; TIF_SVE təmizdir, SVE trapları aktivdir | // task->fpsimd_cpu 0-dır. | // per_cpu_ptr(&fpsimd_last_state, 0) task-dır. | | ... | | // Preempted; CPU 0-dan CPU 1-ə miqrasiya edildi. | // TIF_FOREIGN_FPSTATE təyin edildi. | | get_cpu_fpsimd_context(); | | if (test_and_set_thread_flag(TIF_SVE)) | WARN_ON(1); /* SVE girişləri trap törətməməli idi */ | | sve_init_regs() { | if (!test_thread_flag(TIF_FOREIGN_FPSTATE)) { | ... | } else { | fpsimd_to_sve(current); | current->thread.fp_type = FP_STATE_SVE; | } | } | | put_cpu_fpsimd_context(); | | // Preempted; CPU 1-dən CPU 0-a miqrasiya edildi. | // task->fpsimd_cpu hələ də 0-dır | // Əgər per_cpu_ptr(&fpsimd_last_state, 0) hələ də task-dırsa: | // - Köhnəlmiş HW vəziyyəti yenidən istifadə edilir (SVE trapları aktivdir) | // - TIF_FOREIGN_FPSTATE təmizlənir | // - İstifadəçi sahəsinə (userspace) qayıdış zamanı HW vəziyyətinin bərpası ötürülür | } Vəziyyətin canlı olmadığı və TIF_FOREIGN_FPSTATE-in təyin edildiyi halı, yadda saxlanılmış CPU vəziyyətindən ayrılmaq üçün fpsimd_flush_task_state() funksiyasını çağıraraq düzəldin. Bu, növbəti kontekst dəyişikliyinin köhnəlmiş CPU vəziyyətini yenidən istifadə etməməsini təmin edir və bunun əvəzinə TIF_FOREIGN_FPSTATE bayrağını təyin edərək, istifadəçi sahəsinə qayıtmazdan əvvəl yeni vəziyyətin yaddaşdan yenidən yüklənməsini məcburi edir.

CiddilikYüksək
CVSS7.3
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc19 noy 2024
İlk görülmə19 noy 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.6.61, 6.11.8 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.13 ≤ v < 6.6.61, 6.7 ≤ v < 6.11.8, 6.126.6.61, 6.11.8

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.

Intelligence 360 paketində

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.

CVE-2024-50275 · Linux Kernel · Dark Radar