Ядрои Linux 5.12 зерсистемаи KFence-ро барои ошкор кардани хатогиҳо ҳангоми кор бо хотира қабул кардааст

Ядро Linux 5.12, ки дар ҳоли таҳия аст, амалисозии механизми KFence (Kernel Electric Fence) -ро дар бар мегирад, ки коркарди хотира, дарёфти изофаи буфер, дастрасии хотира пас аз озодкунӣ ва хатогиҳои дигари синфи шабеҳро тафтиш мекунад.

Функсияи шабеҳ дар ядро ​​​​дар шакли опсияи сохтани KASAN мавҷуд буд (санитизатори суроғаи ядро, Address Sanitizer дар gcc ва clang-и муосирро истифода мебарад) - аммо он асосан барои истифодаи хатогиҳо ҷойгир карда шуда буд. Зерсистемаи KFence аз KASAN бо суръати баланди кораш фарқ мекунад, ки имкон медиҳад ин хусусият ҳатто дар ядроҳои системаҳои корӣ истифода шавад.

Татбиқ дар системаҳои истеҳсолӣ имкон медиҳад, ки хатогиҳои хотираро, ки дар озмоишҳо ба назар намерасанд ва танҳо ҳангоми сарбории корӣ ё ҳангоми кори дарозмуддат (бо вақти зиёди кор) пайдо мешаванд, дарёфт кунед. Гайр аз ин, истифодаи KFence дар системахои истехсолй имкон медихад, ки шумораи мошинхое, ки барои тафтиши кори ядро ​​бо хотира иштирок мекунанд, хеле зиёд карда шавад.

KFence ҳадди ақали сарбории новобастаро тавассути ворид кардани саҳифаҳои муҳофизатӣ ба тӯда дар фосилаҳои муайян ба даст меорад. Пас аз ба охир расидани фосилаи навбатии муҳофизат, KFence тавассути системаи стандартии тақсимоти хотира (SLAB ё SLUB тақсимкунанда) саҳифаи навбатии муҳофизатро аз ҳавзи объекти KFence илова мекунад ва ҳисоботи нави ҳисобкунаки вақтро оғоз мекунад. Ҳар як объекти KFence дар саҳифаи хотираи алоҳида ҷойгир аст ва саҳифаҳои хотира дар қад-қади сарҳадҳои чап ва рост саҳифаҳои муҳофизатиро ташкил медиҳанд, ки андозаи онҳо ба таври тасодуфӣ интихоб карда мешавад.

Ҳамин тариқ, саҳифаҳои дорои объектҳо аз ҳамдигар тавассути саҳифаҳои муҳофизатӣ ҷудо карда мешаванд, ки барои тавлиди "айби саҳифа" ҳангоми ҳама гуна дастрасӣ танзим карда мешаванд. Барои ошкор кардани навиштаҷоти берун аз ҳудуди дохили саҳифаҳои объект, ба таври иловагӣ "минтақаҳои сурх"-и намунавӣ истифода мешаванд, ки хотираи аз ҷониби объектҳо истифоданашавандаро ишғол мекунанд ва ҳангоми мувофиқ кардани андозаи саҳифаҳои хотира боқӣ мемонад. —+————+————+—————+————+—————+— | xxxxxxxxx | О: | xxxxxxxxx | :О | xxxxxxxxx | | xxxxxxxxx | Б: | xxxxxxxxx | :В | xxxxxxxxx | | x Гвардия x | J : СУРХ- | x Гвардия x | СУРХ- : J | x Гвардия x | | xxxxxxxxx | E: ЗОНА | xxxxxxxxx | МИНТАКАИ: Е | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | Т: | xxxxxxxxx | : Т | xxxxxxxxx | —+————+————+——————————+——————

Агар кӯшиши дастрасӣ ба минтақа берун аз ҳудуди буфер анҷом дода шавад, амалиёт ба саҳифаи муҳофизатӣ таъсир мерасонад, ки боиси тавлиди "айби саҳифа" мегардад, ки KFence-ро боздошта ва маълумотро дар бораи мушкилоти ошкоршуда сабт мекунад. Ба таври нобаёнӣ, KFence хатогиро манъ намекунад ва танҳо дар гузориш огоҳиро нишон медиҳад, аммо танзимоти "panic_on_warn" мавҷуд аст, ки ба шумо имкон медиҳад, ки ядроро дар ҳолати ошкор шудани хатогӣ ба ҳолати ваҳшат гузоред.

Манбаъ: opennet.ru

Илова Эзоҳ