CVE-2023-54080
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: btrfs: zoned: pre-alloc yazma zamanı bölmə və məntiqi yenidən yazma əməliyyatlarını ötürün Relokasiya yerinə yetirilərkən, btrfs_reloc_clone_csums() funksiyasının icra edildiyi anda müvafiq bölgə üçün yoxlama cəmi (checksum) olmama ehtimalı var. Bu halda, btrfs_finish_ordered_zoned() funksiyasının cəmi etibarsız elementə işarə edir və buna görə də ordered_extent-in məntiqi dəyəri bəzi etibarsız dəyərə təyin edilir. Daha sonra, btrfs_zone_finish_endio() funksiyasındakı btrfs_lookup_block_group() blok qrupunu tapa bilmir və aşağıdakı kimi bir assert xətasına və ya null pointer dereference-ə səbəb olur. Bu problem, null_blk quruluşu ilə btrfs/028 testini bir neçə dəfə (məsələn, 4-16 dəfə) işlətməklə təkrar yaradıla bilər. Mənim sistemimdə cihazın zona ölçüsü və tutumu 32 MB, yaddaş həcmi isə 5 GB olaraq təyin edilmişdir. KASAN: null-ptr-deref in range [0x0000000000000088-0x000000000000008f] CPU: 6 PID: 3105720 Comm: kworker/u16:13 Tainted: G W 6.5.0-rc6-kts+ #1 Hardware name: Supermicro Super Server/X10SRL-F, BIOS 2.0 12/17/2015 Workqueue: btrfs-endio-write btrfs_work_helper [btrfs] RIP: 0010:btrfs_zone_finish_endio.part.0+0x34/0x160 [btrfs] Code: 41 54 49 89 fc 55 48 89 f5 53 e8 57 7d fc ff 48 8d b8 88 00 00 00 48 89 c3 48 b8 00 00 00 00 00 > 3c 02 00 0f 85 02 01 00 00 f6 83 88 00 00 00 01 0f 84 a8 00 00 RSP: 0018:ffff88833cf87b08 EFLAGS: 00010206 RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 0000000000000011 RSI: 0000000000000004 RDI: 0000000000000088 RBP: 0000000000000002 R08: 0000000000000001 R09: ffffed102877b827 R10: ffff888143bdc13b R11: ffff888125b1cbc0 R12: ffff888143bdc000 R13: 0000000000007000 R14: ffff888125b1cba8 R15: 0000000000000000 FS: 0000000000000000(0000) GS:ffff88881e500000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f3ed85223d5 CR3: 00000001519b4005 CR4: 00000000001706e0 Call Trace: <TASK> ? die_addr+0x3c/0xa0 ? exc_general_protection+0x148/0x220 ? asm_exc_general_protection+0x22/0x30 ? btrfs_zone_finish_endio.part.0+0x34/0x160 [btrfs] ? btrfs_zone_finish_endio.part.0+0x19/0x160 [btrfs] btrfs_finish_one_ordered+0x7b8/0x1de0 [btrfs] ? rcu_is_watching+0x11/0xb0 ? lock_release+0x47a/0x620 ? btrfs_finish_ordered_zoned+0x59b/0x800 [btrfs] ? __pfx_btrfs_finish_one_ordered+0x10/0x10 [btrfs] ? btrfs_finish_ordered_zoned+0x358/0x800 [btrfs] ? __smp_call_single_queue+0x124/0x350 ? rcu_is_watching+0x11/0xb0 btrfs_work_helper+0x19f/0xc60 [btrfs] ? __pfx_try_to_wake_up+0x10/0x10 ? _raw_spin_unlock_irq+0x24/0x50 ? rcu_is_watching+0x11/0xb0 process_one_work+0x8c1/0x1430 ? __pfx_lock_acquire+0x10/0x10 ? __pfx_process_one_work+0x10/0x10 ? __pfx_do_raw_spin_lock+0x10/0x10 ? _raw_spin_lock_irq+0x52/0x60 worker_thread+0x100/0x12c0 ? __kthread_parkme+0xc1/0x1f0 ? __pfx_worker_thread+0x10/0x10 kthread+0x2ea/0x3c0 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x30/0x70 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1b/0x30 </TASK> Zoned rejimində öncədən ayrılmış (pre-allocated) bölgəyə yazmaq məlumat relokasiyası yazısı deməkdir. Belə yazı hər zaman WRITE komandasından istifadə etdiyindən, məntiqi ünvanın bölünməsinə və yenidən yazılmasına ehtiyac yoxdur. Buna görə də, bu hal üçün funksiya sadəcə ötürülə bilər.
Necə düzəltmək olar
- Linux Linuxd3cfa44164688a076e8b476cafb5df87d07cfa63, c02d35d89b317994bd713ba82e160c5e7f22d9c8 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| Linux Linux | cbfce4c7fbde23cc8bcba44822a58c728caf6ec9 ≤ v < d3cfa44164688a076e8b476cafb5df87d07cfa63, cbfce4c7fbde23cc8bcba44822a58c728caf6ec9 ≤ v < c02d35d89b317994bd713ba82e160c5e7f22d9c8, 6.5 | d3cfa44164688a076e8b476cafb5df87d07cfa63, c02d35d89b317994bd713ba82e160c5e7f22d9c8 |
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.
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.