CVE-2024-49868
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: yeni bir işlem başlatılamadığında meydana gelen NULL pointer dereference hatası düzeltildi [BUG] Syzbot, aşağıdaki çökme ile bir NULL pointer dereference raporlamıştır: FAULT_INJECTION: forcing a failure. start_transaction+0x830/0x1670 fs/btrfs/transaction.c:676 prepare_to_relocate+0x31f/0x4c0 fs/btrfs/relocation.c:3642 relocate_block_group+0x169/0xd20 fs/btrfs/relocation.c:3678 ... BTRFS info (device loop0): balance: ended with status: -12 Oops: general protection fault, probably for non-canonical address 0xdffffc00000000cc: 0000 [#1] PREEMPT SMP KASAN NOPTI KASAN: null-ptr-deref in range [0x0000000000000660-0x0000000000000667] RIP: 0010:btrfs_update_reloc_root+0x362/0xa80 fs/btrfs/relocation.c:926 Call Trace: <TASK> commit_fs_roots+0x2ee/0x720 fs/btrfs/transaction.c:1496 btrfs_commit_transaction+0xfaf/0x3740 fs/btrfs/transaction.c:2430 del_balance_item fs/btrfs/volumes.c:3678 [inline] reset_balance_state+0x25e/0x3c0 fs/btrfs/volumes.c:3742 btrfs_balance+0xead/0x10c0 fs/btrfs/volumes.c:4574 btrfs_ioctl_balance+0x493/0x7c0 fs/btrfs/ioctl.c:3673 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:907 [inline] __se_sys_ioctl+0xf9/0x170 fs/ioctl.c:893 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f [NEDEN] Tahsis hatası, prepare_to_relocate() içerisindeki start_transaction() sırasında gerçekleşir ve hata yönetimi esnasında fs_info->balance_ctl değerini NULL yapan unset_reloc_control() fonksiyonu çağrılır. Ardından, kök ağaçtaki dengeleme öğesini tamamen silmek için del_balance_item()'ı çağıran reset_balance_state() aracılığıyla btrfs_balance() içindeki hata yolu temizliğine devam edilir. Ancak set_reloc_contrl() ile unset_reloc_control() arasındaki kısa süre zarfında, bir alt hacim ağacı güncellemesi gerçekleşebilir ve bu alt hacim için bir reloc_root oluşturulabilir. Daha sonra del_balance_item()'ın nihai btrfs_commit_transaction() fonksiyonuna ve commit_fs_roots() içerisindeki btrfs_update_reloc_root() fonksiyonuna girilir. Bu fonksiyon, fs_info->reloc_ctl'nin merge_reloc_tree aşamasında olup olmadığını kontrol eder; ancak fs_info->reloc_ctl NULL olduğu için bu durum bir NULL pointer dereference ile sonuçlanır. [ÇÖZÜM] btrfs_update_reloc_root() içerisinde, fs_info->reloc_ctl->merge_reloc_tree kontrolünden önce fs_info->reloc_ctl üzerine ek bir kontrol eklendi. DEAD_RELOC_TREE işlemi, birleştirme aşamasında reloc ağacına daha fazla değişiklik yapılmasını önlemek içindir; ancak hiç reloc_ctl bulunmadığından bununla ilgilenmeye gerek yoktur.
Nasıl düzeltilir
- linux linux_kernel5.10.227, 5.15.168, 6.1.113, 6.6.55, 6.10.14, 6.11.3 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | v < 5.10.227, 5.11 ≤ v < 5.15.168, 5.16 ≤ v < 6.1.113, 6.2 ≤ v < 6.6.55, 6.7 ≤ v < 6.10.14, 6.11 ≤ v < 6.11.3 | 5.10.227, 5.15.168, 6.1.113, 6.6.55, 6.10.14, 6.11.3 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.