Linux 5.12 kernel imepitisha mfumo mdogo wa KFence kugundua makosa wakati wa kufanya kazi na kumbukumbu.

Linux kernel 5.12, ambayo inatengenezwa, inajumuisha utekelezaji wa utaratibu wa KFence (Kernel Electric Fence), ambayo hukagua utunzaji wa kumbukumbu, kunasa kupita kwa bafa, ufikiaji wa kumbukumbu baada ya kufungia, na makosa mengine ya darasa sawa.

Utendaji sawa na huo tayari ulikuwepo kwenye kernel katika mfumo wa chaguo la kujenga la KASAN (kisafishaji cha anwani ya kernel, hutumia Anwani Sanitizer katika gcc ya kisasa na clang) - hata hivyo, iliwekwa kwa ajili ya matumizi ya utatuzi. Mfumo mdogo wa KFence hutofautiana na KASAN kwa kasi ya juu ya uendeshaji, ambayo inafanya uwezekano wa kutumia kipengele hiki hata kwenye cores katika mifumo ya kazi.

Maombi kwenye mifumo ya uzalishaji itafanya iwezekanavyo kupata makosa ya kumbukumbu ambayo hayaonekani katika majaribio ya majaribio na yanaonekana tu wakati wa mzigo wa kazi au wakati wa operesheni ya muda mrefu (pamoja na uptime kubwa). Kwa kuongeza, matumizi ya KFence kwenye mifumo ya uzalishaji itafanya iwezekanavyo kuongeza kwa kiasi kikubwa idadi ya mashine zinazohusika katika kuangalia uendeshaji wa kernel na kumbukumbu.

KFence hufanikisha sehemu ndogo ya juu isiyo na mzigo kwa kuingiza kurasa za ulinzi kwenye lundo kwa vipindi vilivyowekwa. Baada ya muda unaofuata wa ulinzi kuisha, KFence, kupitia mfumo wa kawaida wa ugawaji kumbukumbu (SLAB au kigawanya SLUB), huongeza ukurasa unaofuata wa ulinzi kutoka kwa hifadhi ya vitu vya KFence, na kuanzisha ripoti mpya ya kaunta ya saa. Kila kitu cha KFence kiko kwenye ukurasa tofauti wa kumbukumbu, na kurasa za kumbukumbu kando ya mipaka ya kushoto na kulia huunda kurasa za walinzi, ukubwa wa ambayo huchaguliwa kwa nasibu.

Kwa hivyo, kurasa zilizo na vitu zimetenganishwa kutoka kwa kila mmoja na kurasa za ulinzi, ambazo zimeundwa kutoa "kosa la ukurasa" kwenye ufikiaji wowote. Ili kugundua maandishi ya nje ya mipaka ndani ya kurasa za vitu, "maeneo nyekundu" ya msingi wa muundo hutumiwa pia, ambayo huchukua kumbukumbu isiyotumiwa na vitu, iliyobaki wakati saizi ya kurasa za kumbukumbu zimepangwa. —+————+————+————+—————+—————+—— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x MLINZI x | J : NYEKUNDU- | x MLINZI x | NYEKUNDU- : J | x MLINZI x | | xxxxxxxxx | E: Ukanda | xxxxxxxxx | KANDA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+—————+—

Ikiwa jaribio linafanywa kufikia eneo nje ya mipaka ya buffer, operesheni huathiri ukurasa wa ulinzi, ambayo inaongoza kwa kizazi cha "kosa la ukurasa", ambalo linaingilia KFence na kumbukumbu habari kuhusu tatizo lililogunduliwa. Kwa chaguo-msingi, KFence haizuii hitilafu na inaonyesha tu onyo kwenye logi, lakini kuna mpangilio wa "panic_on_warn" unaokuwezesha kuweka kernel katika hali ya hofu ikiwa hitilafu imegunduliwa.

Chanzo: opennet.ru

Kuongeza maoni