CVE-2024-42103

Yüksek

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: geri kazanım sırasında blok grubunun bir geri kazanım listesine ve kullanılmayanlar listesine eklenmesinin düzeltilmesi btrfs_reclaim_bgs_work fonksiyonunda yeniden deneme için paralel liste ekleme işlemi ile kullanılmayanlar listesine ekleme işlemi arasında potansiyel bir çakışma bulunmaktadır. Blok grubu geri kazanım listesinden çıkarıldığında ve bir yeniden konumlandırma işi üzerinde olduğunda, paralel olarak kullanılmayanlar listesine eklenebilir. Bu durum gerçekleştiğinde, bloğun tekrar geri kazanım listesine eklenmesi liste başlığını bozacak ve aşağıda belirtilen liste bozulmasına yol açacaktır. Bu sorun fs_info->unused_bgs_lock kilidi alınarak düzeltilmiştir. [177.504][T2585409] BTRFS error (device nullb1): error relocating ch= unk 2415919104 [177.514][T2585409] list_del corruption. next->prev should be ff1100= 0344b119c0, but was ff11000377e87c70. (next=3Dff110002390cd9c0) [177.529][T2585409] ------------[ cut here ]------------ [177.537][T2585409] kernel BUG at lib/list_debug.c:65! [177.545][T2585409] Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI [177.555][T2585409] CPU: 9 PID: 2585409 Comm: kworker/u128:2 Tainted: G W 6.10.0-rc5-kts #1 [177.568][T2585409] Hardware name: Supermicro SYS-520P-WTR/X12SPW-TF, BIOS 1.2 02/14/2022 [177.579][T2585409] Workqueue: events_unbound btrfs_reclaim_bgs_work[btrfs] [177.589][T2585409] RIP: 0010:__list_del_entry_valid_or_report.cold+0x70/0x72 [177.624][T2585409] RSP: 0018:ff11000377e87a70 EFLAGS: 00010286 [177.633][T2585409] RAX: 000000000000006d RBX: ff11000344b119c0 RCX:0000000000000000 [177.644][T2585409] RDX: 000000000000006d RSI: 0000000000000008 RDI:ffe21c006efd0f40 [177.655][T2585409] RBP: ff110002e0509f78 R08: 0000000000000001 R09:ffe21c006efd0f08 [177.665][T2585409] R10: ff11000377e87847 R11: 0000000000000000 R12:ff110002390cd9c0 [177.676][T2585409] R13: ff11000344b119c0 R14: ff110002e0508000 R15:dffffc0000000000 [177.687][T2585409] FS: 0000000000000000(0000) GS:ff11000fec880000(0000) knlGS:0000000000000000 [177.700][T2585409] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [177.709][T2585409] CR2: 00007f06bc7b1978 CR3: 0000001021e86005 CR4:0000000000771ef0 [177.720][T2585409] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [177.731][T2585409] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:0000000000000400 [177.742][T2585409] PKRU: 55555554 [177.748][T2585409] Call Trace: [177.753][T2585409] <TASK> [177.759][T2585409] ? __die_body.cold+0x19/0x27 [177.766][T2585409] ? die+0x2e/0x50 [177.772][T2585409] ? do_trap+0x1ea/0x2d0 [177.779][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72 [177.788][T2585409] ? do_error_trap+0xa3/0x160 [177.795][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72 [177.805][T2585409] ? handle_invalid_op+0x2c/0x40 [177.812][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72 [177.820][T2585409] ? exc_invalid_op+0x2d/0x40 [177.827][T2585409] ? asm_exc_invalid_op+0x1a/0x20 [177.834][T2585409] ? __list_del_entry_valid_or_report.cold+0x70/0x72 [177.843][T2585409] btrfs_delete_unused_bgs+0x3d9/0x14c0 [btrfs] btrfs_delete_unused_bgs() fonksiyonunda da benzer bir retry_list kodu bulunmaktadır ancak bu güvenlidir. Blok grubu kullanılmayanlar listesinde olduğu için, listeye eklendiği sırada kullanılan bayt miktarı 0 olmalıdır. Ardından, block_group->lock altında block_group->{used,reserved,pinned} değerlerinin hala 0 olup olmadığı kontrol edilir. Dolayısıyla bunlar hala geri kazanım listesi için değil, kullanılmayanlar listesi için uygun olmalıdır. Buradaki güvenliğin nedeni, space_info->groups_sem kilidinin yazma modunda tutuluyor olmasıdır. Bu, başka hiçbir görevin blok grubundan tahsisat yapamayacağı anlamına gelir; dolayısıyla biz deleted_unused_bgs() içerisindeyken diğer görevlerin blok grubundan extent tahsis etmesi veya serbest bırakması mümkün değildir, böylece başka hiç kimse tarafından kullanılmayanlar listesine veya geri kazanım listesine eklenemez. Hata, birkaç turdan sonra btrfs/166 ile yeniden üretilebilir. Pratikte bu durum, yeniden konumlandırmanın daha fazla chunk alanı bulamadığı ve ENOSPC ile sonuçlandığı durumlarda tetiklenebilir.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın30 Tem 2024
İlk görülme30 Tem 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.1.98, 6.6.39, 6.9.9 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.1.96 ≤ v < 6.1.98, 6.6.36 ≤ v < 6.6.39, 6.9.7 ≤ v < 6.9.9, 5.15.162, 6.106.1.98, 6.6.39, 6.9.9

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