CVE-2026-89647
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: ceph: tərəqqi mümkün olmadıqda ceph_trim_dentries() funksiyasını təkrarlamayın ceph_cap_reclaim_work() funksiyası, ceph_trim_dentries() -EAGAIN qaytardığı müddətcə özünü yenidən növbəyə əlavə edir; bu isə hər dəfə bir lease gəzintisi öz `nr_to_scan` büdcəsini tükətdikdə baş verir. Bu, geri qaytarılacaq heç nə olmadıqda, heç bir tərəqqi etmədən CPU istehlak edən məşğul dövr (busy loop) yaradır: cap təzyiqi olmadıqda (`count==0`) və skan edilən hər bir lease hələ də etibarlı olduqda, hər bir keçid tam skan büdcəsini sıfıra endirir və `-EAGAIN` qaytarır, yalnız dərhal yenidən növbəyə əlavə edilir. Dir-lease gəzintisi vəziyyəti daha da pisləşdirmişdir. `expire_dir_lease` false olduqda (yəni dir lease-lərini geri qaytarmaq niyyətimiz olmadıqda), __dir_lease_check() hər bir etibarlı lease üçün `TOUCH` qaytarırdı. `TOUCH` dentry-ni siyahının sonuna keçirir və __dentry_dir_lease_touch() vasitəsilə `di->time`-ı sıfırlayır, buna görə də N sayda etibarlı lease üzərindəki gəzinti mənasız şəkildə siyahını yenidən yazır, vaxt möhürlərini yeniləyir (onların köhnəlməsinin qarşısını alır) və həmişə `nr_to_scan`-i boşaldaraq `-EAGAIN` ilə yenidən növbəyə alınmanı təmin edirdi. Bu problem üç addımla düzəldilir: - `expire_dir_lease` false olduqda `TOUCH` əvəzinə `KEEP` qaytarın. Əgər biz lease-i geri qaytarmayacaqsınızsa, siyahını qarışdırmaq və onun vaxt möhürünü sıfırlamaq əvəzinə onu olduğu kimi saxlayın; beləliklə, gəzinti təbii şəkildə (və ya ilk yeni lease-də `STOP` vasitəsilə) başa çatır. - Birinci (dentry-lease) gəzintisindən yalnız həqiqətən nəsə azad edildikdə `-EAGAIN` qaytarın. Heç nəyi azad etməyən tam paket eyni siyahının dərhal yenidən yoxlanılmasının faydasız olduğu anlamına gəlir; bunun əvəzinə dir-lease gəzintisinə keçid edin. - Hər iki gəzintidən sonra, heç nə azad edilmədikdə və cap təzyiqi olmadıqda (`count==0`), uğurla (0) çıxın. Cap limitini aşmadıqda və heç bir tərəqqi əldə etmədikdə yenidən cəhd etmək üçün heç bir səbəb yoxdur. Həqiqi cap təzyiqi altında (`count>0`) reclaim yolu dəyişməz qalır və hələ də `-EAGAIN` vasitəsilə yenidən cəhd edir. Bu yam olmadan veb serverlərimizdə saniyədə 500 ceph_trim_dentries() çağırışı müşahidə etdim. Bu, `/proc/lock_stat` faylında (5 dəqiqəlik tutma) çox aydın görünür: class name con-bounces contentions waittime-min waittime-max waittime-total waittime-avg acq-bounces acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg &mdsc->dentry_list_lock: 126180 128218 0.04 8063.44 15986965.20 124.69 1573354 5296812 0.04 8291.28 74164526.48 14.00 ----------------------- &mdsc->dentry_list_lock 111736 [<000000007b11e319>] __ceph_dentry_dir_lease_touch+0x7c/0xa8 &mdsc->dentry_list_lock 2631 [<0000000050597999>] __dentry_leases_walk+0x64/0x2c8 &mdsc->dentry_list_lock 3878 [<00000000c0022f62>] __ceph_dentry_lease_touch+0x5c/0xa8 &mdsc->dentry_list_lock 9973 [<000000002f27cb6f>] __dentry_lease_unlist+0x50/0xa0 ----------------------- &mdsc->dentry_list_lock 123621 [<0000000050597999>] __dentry_leases_walk+0x64/0x2c8 &mdsc->dentry_list_lock 1822 [<000000007b11e319>] __ceph_dentry_dir_lease_touch+0x7c/0xa8 &mdsc->dentry_list_lock 2720 [<000000002f27cb6f>] __dentry_lease_unlist+0x50/0xa0 &mdsc->dentry_list_lock 55 [<00000000c0022f62>] __ceph_dentry_lease_touch+0x5c/0xa8 Bu yam ilə: class name con-bounces contentions waittime-min waittime-max waittime-total waittime-avg acq-bounces acquisitions holdtime-min holdtime-max holdtime-total holdtime-avg &mdsc->dentry_list_lock: 1203 1215 0.16 408.88 33082.88 27.23 4320501 7357389 0.04 500.64 1961578.00 0.27 ----------------------- &mdsc->dentry_list_lock 1029 [<000000003c9aea8a>] __ceph_dentry_dir_lease_touch+0x7c/0xa8 &mdsc->dentry_list_lock 1 ---kəsilmişdir---
Necə düzəltmək olar
Mənbələrdə bu zəiflik üçün düzəldilmiş versiya və ya yamaq keçidi yoxdur.
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| microsoft azl3_kernel_6.6.157.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.150.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.152.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.159.1-1 | Aralıq göstərilməyib | — |
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.