CVE-2021-47350
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: powerpc/mm: Kernel exec fault zamanı sistemin donmasının (lockup) qarşısının alınması powerpc kerneli kernel tərəfindən törədilən exec fault-ları idarə etmək üçün hazır deyil. Xüsusilə, is_exec_fault() funksiyası kernel tərəfindən exec fault baş verdikdə 'false' qaytaracaq, çünki yoxlama istifadəçidən gələn trap məlumatlarını ehtiva edən current->thread.regs->trap oxunmasına əsaslanır. Məsələn, LKDTM EXEC_USERSPACE testi stimullaşdırıldıqda, current->thread.regs->trap SYSCALL trap-ına (0xc00) təyin edilir və kernel tərəfindən törədilən fault, set_access_flags_filter() tərəfindən exec fault kimi görünmür. d7df2443cd5f ("powerpc/mm: Fix spurious segfaults on radix with autonuma") commit-i bunu aydınlaşdırdı və düzgün şəkildə idarə etdi. Lakin daha sonra d3ca587404b3 ("powerpc/mm: Fix reporting of kernel execute faults") commit-i həmin idarəetməni silərək error_code əsaslı yoxlamanı tətbiq etdi. Problem də buradadır, çünki 603 prosessorunda TLB instruction miss handler ISI-ya keçid etdikdə SRR1-in bütün yuxarı bitləri sıfırlanır. cbd7e6ca0210 ("powerpc/fault: Avoid heavy search_exception_tables() verification") commit-inə qədər, kernel tərəfindən userspace ünvanında baş verən exec fault, istisna cədvəllərində (exception tables) həmin ünvan üçün girişin olmaması ilə dolayı yolla aşkar edilirdi. Lakin həmin commit-dən sonra kernel səhv istifadəçi girişlərini tutmaq üçün əsasən KUAP-a və ya nüvə mm idarəetməsinə güvənir. Burada giriş səhv olmadığı üçün mm onu idarə edir. PAGE_EXEC təyin edilməmiş olduğu üçün bu kiçik bir fault-dur (minor fault); set_access_flags_filter() PAGE_EXEC-i təyin etməli idi. Lakin əvvəldə izah edildiyi kimi, is_exec_fault() false qaytardığı üçün set_access_flags_filter() PAGE_EXEC bayrağını təyin etmədən çıxır və bu da sonsuz dövrü olan minor exec fault-a səbəb olur. Kernel belə exec fault-ları idarə etmək üçün hazır olmadığından, d3ca587404b3 commit-indən əvvəl olduğu kimi, kernel tərəfindən törədilən hər hansı exec fault üçün bad_kernel_fault() çağırılmalıdır.
Necə düzəltmək olar
- linux linux_kernel5.4.133, 5.10.51, 5.12.18, 5.13.3 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 | 4.14 ≤ v < 5.4.133, 5.5 ≤ v < 5.10.51, 5.11 ≤ v < 5.12.18, 5.13 ≤ v < 5.13.3 | 5.4.133, 5.10.51, 5.12.18, 5.13.3 |
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.