CVE-2024-42103

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: btrfs: reclaim zamanı blok qrupunun reclaim siyahısına və istifadə olunmayan (unused) siyahıya əlavə edilməsinin düzəldilməsi btrfs_reclaim_bgs_work funksiyasında təkrar cəhd üçün paralel siyahı əlavə etmə və istifadə olunmayan siyahıya əlavə etmə potensialı mövcuddur. Blok qrupu reclaim siyahısından çıxarıldığı və yerləşdirmə işində olduğu üçün o, eyni zamanda istifadə olunmayan siyahıya əlavə edilə bilər. Bu baş verdikdə, onun reclaim siyahısına əlavə edilməsi siyahının başlığını korlayacaq və aşağıdakı kimi siyahı korlanmasına səbəb olacaqdır. Bu problem fs_info->unused_bgs_lock kilidinin götürülməsi ilə həll edilmişdir. [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() funksiyasında oxşar retry_list kodu var, lakin gördüyüm qədərilə bu təhlükəsizdir. Blok qrupu istifadə olunmayan siyahıda olduğu üçün, o siyahıya əlavə edildiyi zaman istifadə olunan baytlar 0 olmalıdır. Daha sonra, block_group->lock altında block_group->{used,reserved,pinned} dəyərlərinin hələ də 0 olduğu yoxlanılır. Beləliklə, onlar hələ də reclaim siyahısı üçün deyil, istifadə olunmayan siyahı üçün uyğun olmalıdırlar. Bunun orada təhlükəsiz olma səbəbi space_info->groups_sem kilidini yazma rejimində saxlamamızdır. Bu o deməkdir ki, heç bir digər tapşırıq blok qrupundan yer ayırdmadan (allocate) edə bilməz, buna görə də biz deleted_unused_bgs() funksiyasında olduğumuz müddətdə digər tapşırıqların blok qrupundan extent-ləri ayırması və ya azad etməsi mümkün deyil, beləliklə, o, heç kim tərəfindən istifadə olunmayan siyahıya və ya reclaim siyahısına əlavə edilə bilməz. Səhv, bir neçə dövrdən sonra btrfs/166 vasitəsilə təkrar istehsal edilə bilər. Praktikada bu, yerləşdirmə prosesi daha çox chunk sahəsi tapa bilmədikdə və ENOSPC ilə başa çatdıqda baş verə bilər.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc30 iyl 2024
İlk görülmə30 iyl 2024

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.1.98, 6.6.39, 6.9.9 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
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

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