CVE-2024-44943

Orta

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: mm: gup: try_grab_folio funksiyasının yanlış istifadəsinə son qoyulub SEV virtual maşını başladılan zaman CMA yaddaşında folio sabitləndikdə (pinning) kernel xəbərdarlığı bildirilmişdir. Xəta izi belə görünür: [ 464.325306] WARNING: CPU: 13 PID: 6734 at mm/gup.c:1313 __get_user_pages+0x423/0x520 [ 464.325464] CPU: 13 PID: 6734 Comm: qemu-kvm Kdump: loaded Not tainted 6.6.33+ #6 [ 464.325477] RIP: 0010:__get_user_pages+0x423/0x520 [ 464.325515] Call Trace: [ 464.325520] <TASK> [ 464.325523] ? __get_user_pages+0x423/0x520 [ 464.325528] ? __warn+0x81/0x130 [ 464.325536] ? __get_user_pages+0x423/0x520 [ 464.325541] ? report_bug+0x171/0x1a0 [ 464.325549] ? handle_bug+0x3c/0x70 [ 464.325554] ? exc_invalid_op+0x17/0x70 [ 464.325558] ? asm_exc_invalid_op+0x1a/0x20 [ 464.325567] ? __get_user_pages+0x423/0x520 [ 464.325575] __gup_longterm_locked+0x212/0x7a0 [ 464.325583] internal_get_user_pages_fast+0xfb/0x190 [ 464.325590] pin_user_pages_fast+0x47/0x60 [ 464.325598] sev_pin_memory+0xca/0x170 [kvm_amd] [ 464.325616] sev_mem_enc_register_region+0x81/0x130 [kvm_amd] yangge tərəfindən aparılan analizə görə, SEV virtual maşını başladılarkən yaddaşı sabitləmək üçün pin_user_pages_fast(..., FOLL_LONGTERM, ...) çağırılır. Lakin səhifə CMA sahəsində olduğu üçün sürətli GUP uğursuz olur və try_grab_folio() daxilindəki uzunmüddətli sabitləmə yoxlaması səbəbindən yavaş yola (slow path) keçid edilir. Yavaş yol səhifələri sabitləməyə və sonra onları CMA sahəsindən kənara köçürməyə çalışır. Lakin yavaş yol da səhifəni sabitləmək üçün try_grab_folio()-dan istifadə edir və eyni yoxlama səbəbindən yenə uğursuz olur, nəticədə yuxarıdakı xəbərdarlıq tetiklənir. Əlavə olaraq, try_grab_folio() funksiyasının sürətli yolda istifadə edilməsi nəzərdə tutulmuşdur və sıfır olmadığı halda add ref vasitəsilə folio refcount-u artırır. Yavaş yolda ən azı bir stabil istinadın olması təmin edildiyi üçün sadə atomik toplama əməliyyatından istifadə edilə bilərdi. Performans fərqi cüzi olsa da, yanlış istifadə çaşaedici və yanlış yönləndirici ola bilər. try_grab_folio() funksiyası try_grab_folio_fast() kimi, try_grab_page() isə try_grab_folio() kimi yenidən təyin edilmişdir və müvafiq yollarda istifadə olunur. Bu, həm yanlış istifadəni, həm də kernel xəbərdarlığını həll edir. Düzgün adlandırma onların istifadə ssenarilərini daha aydın edir və gələcəkdə yanlış istifadənin qarşısını almalıdır. peterx bildirib: : İstifadəçi sabitləmənin uğursuz olduğunu görəcək, gpu-slow üçün bu, həmin uğursuzluğun dərhal altında WARN-i tetikləyir (orijinal hesabatda olduğu kimi): : : folio = try_grab_folio(page, page_increm - 1, : foll_flags); : if (WARN_ON_ONCE(!folio)) { <------------------------ burada : /* : * Folio problemli olduqda 1-ci səhifə istinadını burax, ciddi şəkildə uğursuz et. : */ : gup_put_folio(page_folio(page), 1, : foll_flags); : ret = -EFAULT; : goto out; : } [1] https://lore.kernel.org/linux-mm/[email protected]/ [[email protected]: try_grab_folio_fast funksiyasının implicit deklarasiyası düzəldildi]

CiddilikOrta
CVSS5.5
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc28 avq 2024
İlk görülmə28 avq 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.6.47, 6.10 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel6.6 ≤ v < 6.6.47, 6.7 ≤ v < 6.10, 6.106.6.47, 6.10

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-44943 · Linux Kernel · Dark Radar