Өзегіне Linux 5.12 KFence ішкі жүйесі жадпен жұмыс істеген кезде қателерді анықтау үшін қабылданды

Дамытылып жатқан негізгі бөлік Linux 5.12 нұсқасында жадты пайдалануды, буфердің толып кетуін, босатылғаннан кейінгі жадқа кіруді және басқа да ұқсас қателерді тексеретін KFence (Kernel Electric Fence) механизмінің іске асырылуы бар.

Осындай функционалдылық ядрода KASAN (қазіргі gcc және clang жүйелерінде мекенжайды тазартқышты пайдаланатын ядро ​​мекенжайын тазартқыш) деп аталатын құрастыру опциясы ретінде бұрыннан бар еді, бірақ ол негізінен қателерді түзету мақсаттарына арналған. KFence ішкі жүйесі, KASAN-нан айырмашылығы, жоғары жылдамдықта жұмыс істейді, бұл мүмкіндікті тіпті өндірістік жүйелердегі ядроларда да пайдалануға мүмкіндік береді.

Өндірістік жүйелерде KFence пайдалану бізге сынақ барысында көрінбейтін және тек өндірістік жұмыс жүктемелері немесе ұзақ мерзімді жұмыс кезінде (жоғары жұмыс уақытымен) пайда болатын жад қателерін анықтауға мүмкіндік береді. Сонымен қатар, өндірістік жүйелерде KFence пайдалану ядро ​​жадын тестілеуге қатысатын машиналар санын айтарлықтай арттырады.

KFence күзет беттерін белгіленген аралықтарда үйіндіге бөлу арқылы жүктемеге тәуелсіз минималды үстеме шығындарға қол жеткізеді. Әрбір күзет аралығы аяқталғаннан кейін, KFence KFence нысандар пулынан тағы бір күзет бетін қосу үшін кіріктірілген жад бөлу жүйесін (SLAB немесе SLUB бөлгіш) пайдаланады және жаңа уақыт санауышын іске қосады. Әрбір KFence нысаны бөлек жад бетіне бөлінеді, ал сол және оң шекаралардағы жад беттері өлшемі кездейсоқ таңдалған күзет беттерін құрайды.

Осылайша, нысандары бар беттер бір-бірінен кез келген кіру кезінде "бет қатесін" тудыратындай етіп конфигурацияланған қорғау беттерімен бөлінген. Нысандары бар беттердегі шектен тыс жазуларды анықтау үшін, нысандар пайдаланбайтын жадты алатын үлгілерге негізделген "қызыл аймақтар" қосымша қолданылады, олар жад бетінің өлшемдері тураланған кезде қалады. —+————+—————+————+————+————+———| xxxxxxxxxx | O : | xxxxxxxxxx | : O | xxxxxxxxxx | | xxxxxxxxxx | B : | xxxxxxxxxx | : B | xxxxxxxxxx | | x GUARD x | J : RED- | x GUARD x | | xxxxxxxxxx | E : АЙМАҚ | xxxxxxxxxx | АЙМАҚ : E | xxxxxxxxxxx | | xxxxxxxxxx | C : | xxxxxxxxxxx | : C | xxxxxxxxxxx | | xxxxxxxxxx | T: | xxxxxxxxxxx | : T | xxxxxxxxxxx | —+————+—————+————+————+———+———+—

Егер буфер шекарасынан тыс аймаққа кіру әрекеті жасалса, операция қорғалған бетке тиеді, нәтижесінде KFence анықталған мәселені ұстап алып, тіркейтін «бет қатесі» пайда болады. Әдепкі бойынша, KFence қатені бұғаттамайды және тек ескертуді тіркейді, бірақ қате анықталған жағдайда ядроға дүрбелең күйіне кіруге мүмкіндік беретін «panic_on_warn» параметрі қолжетімді.

Ақпарат көзі: opennet.ru

DDoS қорғауы бар сайттар үшін сенімді хостинг, VPS VDS серверлерін сатып алыңыз 🔥 DDoS қорғанысы, VPS VDS серверлері бар сенімді веб-сайт хостингін сатып алыңыз | ProHoster