CVE-2024-35784

Orta

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: btrfs: fiemap və extent kilidlənməsi ilə bağlı deadlock problemi düzəldildi Extent kilidlənməsini çıxarmaq üçün yamaq dəsti üzərində işləyərkən, yeni extent kilidi əvəzləyicisi ilə fiemap və pagefaulting zamanı lockdep splat aşkar etdim. Bu deadlock bizim normal kodumuzda mövcuddur, sadəcə extent kilidlənməsində lockdep annotasiyaları olmadığı üçün biz bunu heç vaxt fərq etməmişik. Hər iterasiyada fiemap extent-ni istifadəçi sahəsinə kopyaladığımız üçün pagefaulting ehtimalı var. Bütün diapazon üçün extent kilidini saxladığımızdan, mmap etdiyimiz faylda müəyyən bir diapazona mkwrite edə bilərdik. Bu, aşağıdakı stek izi ilə deadlock-a səbəb olardı: [<0>] lock_extent+0x28d/0x2f0 [<0>] btrfs_page_mkwrite+0x273/0x8a0 [<0>] do_page_mkwrite+0x50/0xb0 [<0>] do_fault+0xc1/0x7b0 [<0>] __handle_mm_fault+0x2fa/0x460 [<0>] handle_mm_fault+0xa4/0x330 [<0>] do_user_addr_fault+0x1f4/0x800 [<0>] exc_page_fault+0x7c/0x1e0 [<0>] asm_exc_page_fault+0x26/0x30 [<0>] rep_movs_alternative+0x33/0x70 [<0>] _copy_to_user+0x49/0x70 [<0>] fiemap_fill_next_extent+0xc8/0x120 [<0>] emit_fiemap_extent+0x4d/0xa0 [<0>] extent_fiemap+0x7f8/0xad0 [<0>] btrfs_fiemap+0x49/0x80 [<0>] __x64_sys_ioctl+0x3e1/0xb50 [<0>] do_syscall_64+0x94/0x1a0 [<0>] entry_SYSCALL_64_after_hwframe+0x6e/0x76 Əvəzedici kilidim olmadan bu deadlock-u təkrar istehsal etmək üçün fstest yazdım və mövcud kilidləmə mexanizmində deadlock-un olduğunu təsdiqlədim. Bunu düzəltmək üçün fiemap-ın bütün müddəti boyunca extent kilidindən istifadə etməyin. Bu, ümumilikdə təhlükəsizdir, çünki ağacı axtararkən harada olduğumuzu izləyirik, beləliklə, fiemap çağırışımızın ortasında sıralanmış extent yenilənsə belə, əvvəl hansı ofsetdə olduğumuzu bildiyimiz üçün hələ də düzgün extent-ləri göndərəcəyik. Kilidin saxlandığı yeganə yer delalloc axtarışıdır. Delalloc məlumatları writeback zamanı dəyişə bildiyi üçün, delalloc bayrağını təyin etməli olduğumuzu yoxlayarkən delalloc-un ardıcıl görünüşünə malik olmaq üçün extent diapazonunu kilidləmək istəyirik. Bu yamaq tətbiq edildikdən sonra artıq mənim test halımla deadlock baş vermir.

CiddilikOrta
CVSS5.5
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc17 may 2024
İlk görülmə17 may 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.6.24, 6.7.12 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernelv < 6.6.24, 6.7 ≤ v < 6.7.12, 6.86.6.24, 6.7.12

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.