Linux 5.12 nüvəsi yaddaşla işləyərkən səhvləri aşkar etmək üçün KFence alt sistemini qəbul etmişdir.

Hazırlanma mərhələsində olan Linux nüvəsi 5.12 yaddaşın idarə edilməsini, buferin aşılmasını, boşaldıqdan sonra yaddaşa daxil olmaları və oxşar sinifin digər səhvlərini yoxlayan KFence (Kernel Electric Fence) mexanizminin tətbiqini əhatə edir.

Oxşar funksionallıq nüvədə artıq KASAN qurma variantı şəklində mövcud idi (kernel ünvanı təmizləyicisi, müasir gcc və cingiltidə Ünvan Sanitizer istifadə edir) - lakin o, əsasən sazlama istifadəsi üçün yerləşdirilib. KFence alt sistemi KASAN-dan yüksək əməliyyat sürəti ilə fərqlənir ki, bu da bu funksiyadan hətta işçi sistemlərdəki nüvələrdə də istifadə etməyə imkan verir.

İstehsal sistemlərində tətbiq, sınaq sınaqlarında görünməyən və yalnız iş yükləri zamanı və ya uzunmüddətli əməliyyat zamanı (böyük iş vaxtı ilə) ortaya çıxan yaddaş səhvlərini tutmağa imkan verəcəkdir. Bundan əlavə, istehsal sistemlərində KFence-dən istifadə yaddaşla nüvənin işinin yoxlanılmasında iştirak edən maşınların sayını əhəmiyyətli dərəcədə artırmağa imkan verəcəkdir.

KFence, sabit aralıqlarla yığına qoruyucu səhifələr yerləşdirməklə minimum yükdən asılı olmayan yuxarı yükə nail olur. Növbəti qoruma intervalı başa çatdıqdan sonra, KFence standart yaddaş ayırma sistemi (SLAB və ya SLUB ayırıcı) vasitəsilə KFence obyekt hovuzundan növbəti qoruma səhifəsini əlavə edir və yeni vaxt sayğac hesabatına başlayır. Hər bir KFence obyekti ayrıca yaddaş səhifəsində yerləşir və sol və sağ sərhədlər boyu yaddaş səhifələri ölçüsü təsadüfi seçilən qoruyucu səhifələri təşkil edir.

Beləliklə, obyektləri olan səhifələr hər hansı bir giriş zamanı “səhifə xətası” yaratmaq üçün konfiqurasiya edilmiş qoruma səhifələri ilə bir-birindən ayrılır. Obyekt səhifələrinin daxilində sərhəddən kənar yazıları aşkar etmək üçün əlavə olaraq yaddaş səhifələrinin ölçüsü uyğunlaşdırıldıqda qalan obyektlər tərəfindən istifadə olunmayan yaddaşı tutan naxışa əsaslanan “qırmızı zonalar” istifadə olunur. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x GUARD x | J : QIRMIZI- | x GUARD x | QIRMIZI- : J | x GUARD x | | xxxxxxxxx | E: ZON | xxxxxxxxx | ZONA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+—————+————+————+—

Bufer hüdudlarından kənar əraziyə daxil olmağa cəhd edilərsə, əməliyyat mühafizə səhifəsinə təsir edir və bu, KFence-i kəsən və müəyyən edilmiş problem haqqında məlumatları qeyd edən “səhifə xətası”nın yaranmasına gətirib çıxarır. Varsayılan olaraq, KFence xətanı bloklamır və yalnız jurnalda xəbərdarlıq göstərir, lakin xəta aşkar edildikdə nüvəni panik vəziyyətinə salmağa imkan verən “panic_on_warn” parametri mövcuddur.

Mənbə: opennet.ru

Добавить комментарий