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

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

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

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

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

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

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

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

пікір қалдыру