Linux 5.12 nukleoak KFence azpisistema hartu du memoriarekin lan egitean akatsak detektatzeko

Linux kernel 5.12, garatzen ari dena, KFence (Kernel Electric Fence) mekanismoaren inplementazioa barne hartzen du, memoriaren kudeaketa, buffer gainditzeak harrapatzen dituena, askatu ondoren memoriarako sarbideak eta antzeko klase bateko beste akats batzuk egiaztatzen dituena.

Antzeko funtzionaltasuna zegoen jada nukleoan KASAN eraikitzeko aukeraren moduan (kernelaren helbidea sanitizer, Address Sanitizer erabiltzen du gcc modernoan eta clang) - hala ere, arazketa erabiltzeko kokatu zen batez ere. KFence azpisistema KASANetik bereizten da bere funtzionamendu-abiadura handiagatik, eta horrek funtzio hau funtzionatzeko sistemetako nukleoetan ere erabiltzeko aukera ematen du.

Produkzio-sistemetan aplikazioak proba exekuzioetan agertzen ez diren eta lan-kargak edo epe luzeko funtzionamenduetan soilik agertzen ez diren memoria-akatsak harrapatzea ahalbidetuko du (erabilpen-denbora handiarekin). Gainera, produkzio sistemetan KFence erabiltzeak nukleoaren funtzionamendua memoriarekin egiaztatzen parte hartzen duten makina kopurua nabarmen handitzea ahalbidetuko du.

KFence-k gutxieneko karga independentea lortzen du zaintza-orriak tarte finkoetan sartuz. Hurrengo babes-tartea iraungi ondoren, KFencek, memoria-esleipen-sistema estandarraren bidez (SLAB edo SLUB esleitzailea), hurrengo babes-orrialdea gehitzen du KFence objektu multzotik, eta denbora-kontagailuaren txosten berri bat hasten du. KFence objektu bakoitza memoria-orri bereizi batean dago, eta ezkerreko eta eskuineko ertzetan dauden memoria-orriek babes-orriak osatzen dituzte, eta horien tamaina ausaz aukeratzen da.

Horrela, objektuak dituzten orriak elkarrengandik bereizten dira babes orrien bidez, edozein sarbidetan "orriaren akatsa" sortzeko konfiguratuta daudenak. Objektuen orrien barruan mugaz kanpoko idazketak detektatzeko, ereduetan oinarritutako "zona gorriak" ere erabiltzen dira, objektuek erabiltzen ez duten memoria okupatzen dutenak, memoria-orrien tamaina lerrokatzen denean geratzen direnak. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x GUARDIA x | J : GORRIA- | x GUARDIA x | GORRIA- : J | x GUARDIA x | | xxxxxxxxx | E: ZONA | xxxxxxxxx | ZONA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Buffer-en mugetatik kanpo dagoen eremu batera sartzeko saiakera egiten bada, eragiketak babes-orriari eragiten dio, eta horrek "orriaren akatsa" sortzen du, eta horrek KFence atzematen du eta identifikatutako arazoari buruzko informazioa erregistratzen du. Lehenespenez, KFencek ez du akatsik blokeatzen eta abisu bat soilik bistaratzen du erregistroan, baina "panic_on_warn" ezarpen bat dago, eta horrek nukleoa izu-egoeran jartzea ahalbidetzen du errore bat hautematen bada.

Iturria: opennet.ru

Gehitu iruzkin berria