CVE-2026-23249
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: xfs: iki btree-ni yenidən təsdiqləyərkən silinmiş kursorların yoxlanılması Boş sahə və inode btree təmiri funksiyaları hər iki btree-ni eyni vaxtda yenidən qurur, bundan sonra korrupsiyaların aradan qalxdığını təsdiqləmək üçün hər iki btree-ni qiymətləndirmək lazımdır. Lakin Jiaming Zhang syzbot-u işlədib və ikinci xchk_allocbt çağırışında sistem çökməsi (crash) törədib. Onun kök səbəb analizi belədir (kiçik düzəlişlərlə): xrep_revalidate_allocbt() funksiyasında xchk_allocbt() iki dəfə çağırılır (birinci BNOBT üçün, ikincisi CNTBT üçün). Bu problemin səbəbi odur ki, birinci çağırış ikinci çağırış üçün tələb olunan kursoru sıfırlayıb (nullify). Gəlin əvvəlcə aşağıdakı çağırış zənciri vasitəsilə xrep_revalidate_allocbt()-yə daxil olaq: xfs_file_ioctl() -> xfs_ioc_scrubv_metadata() -> xfs_scrub_metadata() -> `sc->ops->repair_eval(sc)` -> xrep_revalidate_allocbt() Bu funksiyada xchk_allocbt() iki dəfə çağırılır. Birinci çağırışda: /* Qeyd edin ki, sc->sm->sm_type hazırda XFS_SCRUB_TYPE_BNOPT-dir */ xchk_allocbt() -> xchk_btree() -> `bs->scrub_rec(bs, recp)` -> xchk_allocbt_rec() -> xchk_allocbt_xref() -> xchk_allocbt_xref_other() sm_type XFS_SCRUB_TYPE_BNOBT olduğu üçün pur, &sc->sa.cnt_cur olaraq təyin edilir. Kernel xfs_alloc_get_rec() funksiyasını çağırdı və -EFSCORRUPTED qaytardı. Çağırış zənciri: xfs_alloc_get_rec() -> xfs_btree_get_rec() -> xfs_btree_check_block() -> (XFS_IS_CORRUPT || XFS_TEST_ERROR), birincisi yanlış (false) və ikincisi doğrudur (true), -EFSCORRUPTED qaytarılır. Təxminimcə, buna ioctl$XFS_IOC_ERROR_INJECTION səbəb olub. xchk_allocbt_xref_other()-ə qayıtsaq, xfs_alloc_get_rec()-dən -EFSCORRUPTED aldıqdan sonra kernel xchk_should_check_xref()-i çağırdı. Bu funksiyada *curpp (sc->sa.cnt_cur-ə işarə edir) sıfırlanır. xrep_revalidate_allocbt()-ə qayıtsaq, sc->sa.cnt_cur sıfırlandığı üçün daha sonra xchk_allocbt() (ikinci çağırış) -> xchk_btree() vasitəsilə null-ptr-deref baş verdi. Beləliklə, bnobt yenidən təsdiqlənməsi çarpaz istinad cəhdi zamanı uğursuz oldu, buna görə biz cntbt kursorunu sildik və sonra cntbt-ni yenidən təsdiqləməyə çalışarkən sistem çöktü. Buna görə də, həmin yenidən təsdiqləmədən əvvəl null cntbt kursorunun olub-olmadığını yoxlayın və təmiri tamamlanmamış kimi qeyd edin. Həmçinin, əgər birinci ağac yenidən qurulubsa lakin artıq korruptdirsə, ikinci ağacı tamamilə görməzdən gələ bilərik. Eyni problem olduğu üçün eyni düzəlişi xrep_revalidate_iallocbt funksiyasına da tətbiq edin.
Necə düzəltmək olar
- linux linux_kernel6.12.75, 6.18.16, 6.19.6 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 6.8 ≤ v < 6.12.75, 6.13 ≤ v < 6.18.16, 6.19 ≤ v < 6.19.6 | 6.12.75, 6.18.16, 6.19.6 |
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.