Jedro Linuxa 5.12 je sprejelo podsistem KFence za odkrivanje napak pri delu s pomnilnikom

Jedro Linuxa 5.12, ki je v razvoju, vključuje implementacijo mehanizma KFence (Kernel Electric Fence), ki preverja ravnanje s pomnilnikom, lovi prekoračitve medpomnilnika, dostope do pomnilnika po sprostitvi in ​​druge napake podobnega razreda.

Podobna funkcionalnost je že bila prisotna v jedru v obliki možnosti gradnje KASAN (razkuževalec naslovov jedra, uporablja razkuževalec naslovov v sodobnih gcc in clang) - vendar je bil nameščen predvsem za uporabo pri odpravljanju napak. Podsistem KFence se od KASAN razlikuje po visoki hitrosti delovanja, kar omogoča uporabo te funkcije tudi na jedrih v delujočih sistemih.

Aplikacija na produkcijskih sistemih bo omogočila lovljenje pomnilniških napak, ki se ne pojavijo v testnih zagonih in se pojavijo le med delovnimi obremenitvami ali med dolgotrajnim delovanjem (z velikim časom delovanja). Poleg tega bo uporaba KFence v proizvodnih sistemih omogočila znatno povečanje števila strojev, vključenih v preverjanje delovanja jedra s pomnilnikom.

KFence doseže minimalne stroške, neodvisne od obremenitve, z vstavljanjem zaščitnih strani v kopico v določenih intervalih. Ko poteče naslednji zaščitni interval, KFence prek standardnega sistema za dodeljevanje pomnilnika (SLAB ali SLUB dodeljevalec) doda naslednjo zaščitno stran iz področja objektov KFence in začne novo poročilo o števcu časa. Vsak predmet KFence se nahaja na ločeni pomnilniški strani, pomnilniške strani vzdolž leve in desne meje pa tvorijo varovalne strani, katerih velikost je izbrana naključno.

Tako so strani z objekti med seboj ločene z zaščitnimi stranmi, ki so konfigurirane tako, da ob vsakem dostopu ustvarijo "napako strani". Za odkrivanje pisanja zunaj meja znotraj strani predmetov se dodatno uporabljajo »rdeča območja« na podlagi vzorcev, ki zasedejo pomnilnik, ki ga predmeti ne uporabljajo in ostanejo, ko je velikost pomnilniških strani poravnana. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x VAROVAL x | J : RDEČA- | x VAROVAL x | RDEČA- : J | x VAROVAL x | | xxxxxxxxx | E: OBMOČJE | xxxxxxxxx | CONA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Če se poskusi dostopati do območja zunaj meja medpomnilnika, operacija vpliva na zaščitno stran, kar vodi do generiranja »napake strani«, ki prestreže KFence in zabeleži informacije o zaznani težavi. Privzeto KFence ne blokira napake in prikaže le opozorilo v dnevniku, vendar obstaja nastavitev "panic_on_warn", ki vam omogoča, da jedro prestavite v stanje panike, če je zaznana napaka.

Vir: opennet.ru

Dodaj komentar