CVE-2026-45949
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: hwrng: core - yarış şəraitini (race condition) düzəltmək üçün RCU və work_struct istifadəsi Hazırda hwrng_fill, hwrng_fillfn() axını (thread) çıxana qədər təmizlənmir. hwrng_unregister() funksiyası hwrng_fill dəyərini rng_mutex kilidindən kənarda oxuduğu üçün, eyni vaxtda çağırılan hwrng_unregister() eyni tapşırıq üzərində yenidən kthread_stop() funksiyasını çağıra bilər. Əlavə olaraq, əgər hwrng_unregister() funksiyası hwrng_register()-dən dərhal sonra çağırılarsa, dayandırılmış axın heç vaxt icra olunmamış ola bilər. Beləliklə, hwrng_unregister() geri döndükdən sonra belə hwrng_fill çirkli qalır. Bu halda, növbəti hwrng_register() çağırışları yeni axınların başladılmasına uğursuzluq gətirəcək və hwrng_unregister() azad edilmiş eyni tapşırıq üzərində kthread_stop() funksiyasını çağıracaq. Hər iki halda use-after-free baş verir: refcount_t: addition on 0; use-after-free. WARNING: ... at lib/refcount.c:25 refcount_warn_saturate+0xec/0x1c0 Call Trace: kthread_stop+0x181/0x360 hwrng_unregister+0x288/0x380 virtrng_remove+0xe3/0x200 Bu yamaq, qlobal hwrng_fill göstəricisini rng_mutex kilidi daxilində qoruyaraq yarış şəraitini düzəldir, beləliklə hwrng_fillfn() axını yalnız bir dəfə dayandırılır və kthread_run() ilə kthread_stop() çağırışları kilid saxlanıldığı halda ardıcıl şəkildə yerinə yetirilir. Kilid saxlanıldığı halda dayandırılarkən hwrng_fillfn()-də ölü kilidləmənin (deadlock) qarşısını almaq üçün current_rng-ni RCU-ya çeviririk ki, get_current_rng() kilidi saxlamadan current_rng-ni oxuya bilsin. put_rng()-dən kilidi çıxarmaq üçün biz aktual təmizləmə prosesini work_struct vasitəsilə təxirə salırıq. get_current_rng() artıq ERR_PTR dəyərləri qaytarmadığı üçün onu çağıranlarda IS_ERR() yoxlamaları silinib. hwrng_fill rng_mutex kilidi ilə qorunduğuna görə, hwrng_fillfn() artıq özü hwrng_fill-i təmizləyə bilməz. Buna görə də, əgər hwrng_fillfn() current_rng atıldıqdan dərhal sonra geri dönərsə, daha sonra azad edilmiş task_struct üzərində kthread_stop() çağırılardı. Bunu düzəltmək üçün hwrng_fillfn() indi tapşırığı dayandırılana qədər aktiv saxlamaq məqsədilə schedule() funksiyasını çağırır. kthread_stop() çağırışı həmçinin hwrng_unregister()-dən drop_current_rng()-ə köçürülmüşdür; bu, current_rng NULL olduğu bütün mümkün yollarda kthread_stop()-un çağırılmasını təmin edir ki, axın sonsuza qədər gözləməsin.
Necə düzəltmək olar
- linux linux_kernel6.12.75, 6.18.14, 6.19.4 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 | 3.17 ≤ v < 6.12.75, 6.13 ≤ v < 6.18.14, 6.19 ≤ v < 6.19.4 | 6.12.75, 6.18.14, 6.19.4 |
| microsoft azl3_kernel_6.6.150.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.157.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.139.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.141.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.143.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.144.1-1 | Aralıq göstərilməyib | — |
| microsoft azl3_kernel_6.6.145.2-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.