CVE-2026-89675
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: nfsd: async copy ləğvi və söndürülməsində UAF xətası düzəldildi Sökücü çağırıcı (OFFLOAD_CANCEL, nfsd4_shutdown_copy, nfsd4_cancel_copy_by_sb) kopya kthread ilə yarışarkən, asinxron kopya azad edilə bilərdi və ya azad edildikdən sonra istifadə olunurdu (use-after-free): - find_async_copy() funksiyası copy->refcount dəyərini artırırdı, lakin kopyanı clp->async_copies siyahısında saxlayırdı, buna görə də reaper-in cleanup_async_copy() funksiyası release_copy_files()-i ləğv/söndürmə çağırıcısı ilə eyni vaxtda işlədə bilirdi. Hər ikisi ortaq kilid olmadan put əməliyyatını yerinə yetirir və nf_src/nf_dst dəyişənlərini NULL edirdi, nəticədə nfsd_file iki dəfə put edilir və vaxtından əvvəl azad olunurdu. - nfsd4_do_async_copy() funksiyası kopyanın son istifadələrindən (copy->nf_dst üzərində nfsd_update_cmtime_attr(), həmçinin nfsd4_send_cb_offload()) əvvəl NFSD4_COPY_F_STOPPED bitini təyin edirdi. nfsd4_stop_copy() təyin edilmiş STOPPED bitini "kthread tamamlandı, kthread_stop() ötürülür" kimi qəbul etdiyi üçün, sökücü çağırıcı kthread hələ də ona müraciət edərkən (dereference) release_copy_files()-i (hansı ki, nf_dst-ni put edir və NULL edir) işə salırdı (NULL/UAF). - copy->copy_task heç vaxt pin edilməmişdi. Bir dəfəlik kthread geri dönəndə özünü təmizləyir, buna görə də kthread_stop()'un get_task_struct() funksiyası azad edilmiş task_struct-a toxuna bilərdi. - co_cb kopyaya daxil edilmişdir, lakin nfsd4_send_cb_offload() yalnız klient üzərində istinad saxlayırdı, buna görə də CB_OFFLOAD callback-i icra olunan zaman paralel söküm prosesi kopyanı azad edə bilərdi. Söküm ömrü bütöv şəkildə düzəldildi: - find_async_copy() async_lock altında kopyanın əlaqəsini kəsir (clear cp_clp, list_del_init); ləğv, söndürmə və sb-ləğv yolları nfsd4_stop_copy()-dən sonra nfs4_put_copy() vasitəsilə siyahı üzvlüyü istinadını silir. cleanup_async_copy()-dən artıq lazımsız olan list_del düzəlişi çıxarıldı. - Əlaqənin kəsilməsi kopyanı reaper-dən gizlətdiyi üçün, onun cleanup_async_copy() funksiyası artıq kopyanın s2s_cp_stateids girişini silə bilmir; indi ləğv/söndürmə/sb-ləğv yolları nfs4_free_copy_state()-i özləri çağırırlar (cp_clp hələ də etibarlı olduğu müddətdə), beləliklə, giriş laundromat və manage_cpntf_state() tərəfindən müraciət edilməsi üçün azad edilmiş yaddaşda asılı qalmır. - kthread-ə öz istinadı verildi; bu istinad nfsd4_copy()-də wake_up_process()-dən əvvəl götürülür və nfsd4_do_async_copy()-nin sonunda buraxılır; wake_up_process() list_add()-dən əvvəl çağırılır. - nfsd4_copy()-də get_task_struct() ilə task_struct pin edildi və nfs4_put_copy()-də azad edildi, beləliklə kthread çıxdığı hər an kthread_stop() təhlükəsiz olur. NFSD4_COPY_F_STOPPED biti yalnız nfsd4_stop_copy()-də təyin edilir, hansı ki, indi həmişə release_copy_files()-dən əvvəl kthread_stop() edir; tamamlanma hələ də NFSD4_COPY_F_COMPLETED vasitəsilə bildirilir, buna görə də nfsd4_has_active_async_copies() təsirlənmir. Hər bir sökücü çağırıcı əvvəlcə kopyanı clp->async_copies siyahısından çıxarır, beləliklə kthread_stop() tam olaraq bir dəfə işləyir. - nfsd4_send_cb_offload()-də kopya istinadı götürüldü və nfsd4_cb_offload_release()-də buraxıldı. kthread orada hələ də öz istinadını saxladığı üçün refcount_inc() sonuncu azad etmə əməliyyatı ilə yarışa bilməz. - Sırasız set_bit()/clear_bit() yazıcıları ilə uyğunlaşdırmaq üçün cp_clp smp_load_acquire() ilə oxundu (Documentation/atomic_bitops.rst).
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.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.