CVE-2026-89493

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: ocfs2: refcount blok validatorunda rl_used dəyərinin rl_count ilə yoxlanılması ocfs2_find_refcount_rec_in_rl() funksiyası diskdəki refcount qeyd massivini aşağıdakı şəkildə gəzir: for (; i < le16_to_cpu(rb->rf_records.rl_used); i++) { rec = &rb->rf_records.rl_recs[i]; ... rl_recs[] tək bir metadata blokunda (ümumi konfiqurasiyada 4096 bayt) yerləşir, buna görə də onun real tutumu ocfs2_refcount_recs_per_rb(sb) (16 baytlıq ocfs2_refcount_rec üçün 4K blokda 247 qeyd) tərəfindən təyin edilir. rl_used və rl_count hər ikisi ocfs2_validate_refcount_block() tərəfindən birbaşa diskdən oxunur və hər hansı bir refcount/reflink/CoW əməliyyatı massivi gəzmədən əvvəl nə həmin tutumla, nə də bir-birləri ilə heç vaxt yoxlanılmır. rl_used == 0xffff olan hazırlanmış (və ya korlanmış) refcount bloku yuxarıdakı dövrün blokun sonundan çox uzağa getməsinə səbəb olur və i 65534-ə qədər rl_recs[i]-ni dereference edir. Nəticədə alınan indeks sonra ocfs2_insert_refcount_rec() funksiyasına ötürülür və onun daxil etmə-yişdırma prosesi belə işləyir: if (index < le16_to_cpu(rf_list->rl_used)) memmove(&rf_list->rl_recs[index + 1], &rf_list->rl_recs[index], (le16_to_cpu(rf_list->rl_used) - index) * sizeof(struct ocfs2_refcount_rec)); Yəni, artıq blokdan kənarda olan ofsetdən (0xffff - index) * 16 bayta (~1 MiB) qədər memmove() əməliyyatı baş verir. Buna hazırlanmış/korlanmış ocfs2 imicinə qarşı adi reflink (FICLONE) vasitəsilə çatmaq mümkündür: cpos-u yarpaqdakı bütün real qeydlərdən sonra sıralanan bir extent-in qoşulması, axtarışın uyğunluq tapıb erkən dayanmaq əvəzinə blokun sonuna qədər davam etməsinə məcbur edir. Hücum modeli lokaldır: hazırlanmış və ya korlanmış ocfs2 imicini mount edən CAP_SYS_ADMIN və ya artıq mount edilmiş ocfs2 fayl sistemini dəstəkləyən blok cihazına birbaşa yazı yazan istifadəçi. ocfs2_validate_refcount_block() artıq blokun ECC, imza, rf_blkno və rf_fs_generation parametrlərini yoxlayır, lakin rl_count/rl_used dəyərlərini blokun diskdəki aktual tutumu ilə heç vaxt müqayisə etmir. Bu, ocfs2_validate_extent_block() (fs/ocfs2/alloc.c) funksiyasının artıq yaxın extent-list başlığı üçün bağladığı boşluqla eyni sinifdədir; həmin funksiya hər hansı bir kod h_list.l_recs[] massivini gəzmədən əvvəl həm qeyd tutumunu, həm də "istifadə olunan" (used) sərhədini yoxlayır: if (le16_to_cpu(eb->h_list.l_count) != ocfs2_extent_recs_per_eb(sb)) { rc = ocfs2_error(...); goto bail; } if (le16_to_cpu(eb->h_list.l_next_free_rec) > le16_to_cpu(eb->h_list.l_count)) { rc = ocfs2_error(...); goto bail; } ocfs2_validate_refcount_block() funksiyasına ekvivalent yoxlama cütlüyü əlavə edin: rl_count dəyəri ocfs2_refcount_recs_per_rb() tərəfindən qaytarılan sabit blok başına tutuma uyğun gəlməyən refcount blokunu rədd edin və rl_used > rl_count halında bloku rədd edin. Hər iki yoxlama OCFS2_REFCOUNT_TREE_FL təyin edildikdə ötürülür, çünki bu halda eyni birləşmə baytları refcount qeyd siyahısını (rf_records) deyil, ocfs2_extent_list (rf_list)-i saxlayır — həmin struktur istinad edilən extent bloku oxunduqda ocfs2_validate_extent_block() tərəfindən ayrıca yoxlanılır. Bu, bu faylda digər yerlərdə (məsələn, ocfs2_get_refcount_rec()) rf_records və ya rf_list üzvlərindən hansının aktiv olduğunu müəyyən etmək üçün istifadə olunan mövcud "!(rb->rf_flags & OCFS2_REFCOUNT_TREE_FL)" qorumasını əks etdirir. Bu tədbirin tətbiqi ilə saxtalaşdırılmış rl_used/rl_count dəyərləri, ocfs2_find_refcount_rec_in_rl()-də sərhədlərdən kənar oxumaya və ardınca ocfs2_insert_refcount_rec()-də sərhədlərdən kənar memmove() əməliyyatına səbəb olmaq əvəzinə, blok validasiyası zamanı (ocfs2_error()) aşkar edilir ki, bu da funksiyadakı digər bütün korlanma yoxlamaları ilə uyğundur. v6.19 KASAN (KASAN_GENERIC) build-ində hazırlanmış imiclə yoxlanılıb: eyni reflink (FICLONE) əməliyyatının təkrarlandılması bu yamadan əvvəl __ocfs2_increase_refcount()/ocfs2_insert_refcount_rec() funksiyalarında etibarlı şəkildə KASAN hesabatını tetikləyirdi, lakin ocfs2_validate_refcount_block() saxtalaşdırılmış rl_used/rl_count dəyərlərini rədd etdikdən sonra heç bir hesabat tetiklənmir.

CiddilikYüksək
CVSS8.8
İstismar ehtimalı—
MəhsulLinux
Dərc11 sen 2026
İlk görülmə11 sen 2026

Necə düzəltmək olar

Yeniləyin
  • Linux Linuxf882e9e32d017a6569b2996c63ba3864717788e6, 5593b63028cb43a6cda75a65ce1db95f00ea6857, c8b02f4ee91e757b3fff556c7168b24b7ae55132, 97584e93fc49a2d59252ac60467e9279f11b1b5b, af56e90cb546cb0c47bef059335365283f61d6a4, 0761d2c9494424469a0d30a9da3496ca010b0b2d, 04ead708e13ddcb9c39319cbe02a18cef99cb823, 4ca62df6bc0708947b48da3f6a712ecb8e73929c və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linuxf2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < f882e9e32d017a6569b2996c63ba3864717788e6, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < 5593b63028cb43a6cda75a65ce1db95f00ea6857, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < c8b02f4ee91e757b3fff556c7168b24b7ae55132, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < 97584e93fc49a2d59252ac60467e9279f11b1b5b, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < af56e90cb546cb0c47bef059335365283f61d6a4, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < 0761d2c9494424469a0d30a9da3496ca010b0b2d, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < 04ead708e13ddcb9c39319cbe02a18cef99cb823, f2c870e3b12e38da6d9b5b17c4c8ae56a0ed68e4 ≤ v < 4ca62df6bc0708947b48da3f6a712ecb8e73929c, 2.6.32f882e9e32d017a6569b2996c63ba3864717788e6, 5593b63028cb43a6cda75a65ce1db95f00ea6857, c8b02f4ee91e757b3fff556c7168b24b7ae55132, 97584e93fc49a2d59252ac60467e9279f11b1b5b, af56e90cb546cb0c47bef059335365283f61d6a4, 0761d2c9494424469a0d30a9da3496ca010b0b2d, 04ead708e13ddcb9c39319cbe02a18cef99cb823, 4ca62df6bc0708947b48da3f6a712ecb8e73929c

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-2026-89493 · Linux · Dark Radar