CVE-2024-49867

Yüksek

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: umount sırasında cleaner kthread durdurulmadan önce fixup çalışanlarının beklenmesi Ayırma işlemi (unmount) sırasında, close_ctree() fonksiyonunda şu adımlar sırasıyla gerçekleşmektedir: 1) Cleaner kthread park edilir - bu işlem kthread'i yok etmez, temel olarak yürütmesini durdurur (ona yönelik uyandırmalar çalışır ancak bir işlem yapmaz); 2) Cleaner kthread durdurulur - bu durum ilgili struct task_struct yapısının serbest bırakılmasıyla sonuçlanır; 3) Tüm iş kuyruklarında çalışan tüm görevlerin tamamlanmasını bekleyen ve ardından iş kuyruklarını serbest bırakan btrfs_stop_all_workers() çağrılır. Syzbot, btrfs_add_delayed_iput() fonksiyonunda cleaner'ı uyandırmaya çalışırken, cleaner kthread'in task_struct yapısı zaten serbest bırakıldığı için, kendi inode'u üzerinde gecikmeli bir iput işlemi yapan bir fixup çalışanının çökmeye neden olduğu bir durumu raporlamıştır. Bu durum ayırma işlemi sırasında meydana gelebilir çünkü cleaner kthread'e karşı kthread_stop() çağrılmadan (bu işlem tüm kaynakları durdurur ve serbest bırakır) önce hala çalışan herhangi bir fixup çalışanı beklenmemektedir. Bu sorun, close_ctree() aşamasında cleaner'a karşı kthread_stop() çağırmadan önce herhangi bir fixup çalışanının beklenmesi ve bekleyen gecikmeli iput işlemlerinin çalıştırılmasıyla düzeltilmiştir. Syzbot tarafından raporlanan yığın izleri şöyledir: BUG: KASAN: slab-use-after-free in __lock_acquire+0x77/0x2050 kernel/locking/lockdep.c:5065 Read of size 8 at addr ffff8880272a8a18 by task kworker/u8:3/52 CPU: 1 UID: 0 PID: 52 Comm: kworker/u8:3 Not tainted 6.12.0-rc1-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 Workqueue: btrfs-fixup btrfs_work_helper Call Trace: <TASK> __dump_stack lib/dump_stack.c:94 [inline] dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:377 [inline] print_report+0x169/0x550 mm/kasan/report.c:488 kasan_report+0x143/0x180 mm/kasan/report.c:601 __lock_acquire+0x77/0x2050 kernel/locking/lockdep.c:5065 lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5825 __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline] _raw_spin_lock_irqsave+0xd5/0x120 kernel/locking/spinlock.c:162 class_raw_spinlock_irqsave_constructor include/linux/spinlock.h:551 [inline] try_to_wake_up+0xb0/0x1480 kernel/sched/core.c:4154 btrfs_writepage_fixup_worker+0xc16/0xdf0 fs/btrfs/inode.c:2842 btrfs_work_helper+0x390/0xc50 fs/btrfs/async-thread.c:314 process_one_work kernel/workqueue.c:3229 [inline] process_scheduled_works+0xa63/0x1850 kernel/workqueue.c:3310 worker_thread+0x870/0xd30 kernel/workqueue.c:3391 kthread+0x2f0/0x390 kernel/kthread.c:389 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 </TASK> Allocated by task 2: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 unpoison_slab_object mm/kasan/common.c:319 [inline] __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:345 kasan_slab_alloc include/linux/kasan.h:247 [inline] slab_post_alloc_hook mm/slub.c:4086 [inline] slab_alloc_node mm/slub.c:4135 [inline] kmem_cache_alloc_node_noprof+0x16b/0x320 mm/slub.c:4187 alloc_task_struct_node kernel/fork.c:180 [inline] dup_task_struct+0x57/0x8c0 kernel/fork.c:1107 copy_process+0x5d1/0x3d50 kernel/fork.c:2206 kernel_clone+0x223/0x880 kernel/fork.c:2787 kernel_thread+0x1bc/0x240 kernel/fork.c:2849 create_kthread kernel/kthread.c:412 [inline] kthreadd+0x60d/0x810 kernel/kthread.c:765 ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:244 Freed by task 61: kasan_save_stack mm/kasan/common.c:47 [inline] kasan_save_track+0x3f/0x80 mm/kasan/common.c:68 kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:579 poison_slab_object mm/kasan/common.c:247 [inline] __kasan_slab_free+0x59/0x70 mm/kasan/common.c:264 kasan_slab_free include/linux/kasan.h:230 [inline] slab_free_h ---truncated---

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın21 Eki 2024
İlk görülme21 Eki 2024

Nasıl düzeltilir

Güncelleyin
  • 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ünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernelv < 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.35.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.

Intelligence 360 paketinde

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.

CVE-2024-49867 · Linux Kernel · Dark Radar