Ny kernel Linux 5.12 dia nandray ny subsystem KFence hamantarana ny lesoka rehefa miasa amin'ny fitadidiana

Ny Linux kernel 5.12, izay eo an-dalam-pandrosoana, dia ahitana ny fampiharana ny rafitra KFence (Kernel Electric Fence), izay manamarina ny fitantanana ny fitadidiana, ny fisamborana ny fihoaram-pefy, ny fidirana amin'ny fahatsiarovana aorian'ny fanafahana, ary ny fahadisoana hafa amin'ny kilasy mitovy.

Ny fiasa mitovy amin'izany dia efa misy ao amin'ny kernel amin'ny endrika safidy fananganana KASAN (mpitsabo ny adiresy kernel, mampiasa ny Address Sanitizer amin'ny gcc sy clang maoderina) - na izany aza, dia napetraka indrindra ho an'ny fampiasana debugging. Ny subsystem KFence dia tsy mitovy amin'ny KASAN amin'ny hafainganam-pandeha avo lenta, izay ahafahana mampiasa io endri-javatra io na dia amin'ny cores amin'ny rafitra miasa aza.

Ny fampiharana amin'ny rafi-pamokarana dia ahafahana misambotra ireo hadisoana fitadidiana izay tsy miseho amin'ny andrana ary miseho mandritra ny enta-mavesatra na mandritra ny asa maharitra (miaraka amin'ny fotoana maharitra). Ankoatr'izay, ny fampiasana KFence amin'ny rafitra famokarana dia ahafahana mampitombo be ny isan'ny milina mandray anjara amin'ny fanamarinana ny fiasan'ny kernel miaraka amin'ny fitadidiana.

Ny KFence dia mahatratra ny ambony ambany indrindra tsy miankina amin'ny entana amin'ny alàlan'ny fampidirana pejy fiambenana ao amin'ny amboara amin'ny elanelana voafaritra. Rehefa tapitra ny elanelam-piarovana manaraka, KFence, amin'ny alàlan'ny rafitra fitsinjarana fahatsiarovana mahazatra (SLAB na SLUB allocator), dia manampy ny pejy fiarovana manaraka avy amin'ny dobo zavatra KFence, ary manomboka tatitra momba ny fotoana vaovao. Ny zavatra KFence tsirairay dia hita ao amin'ny pejin'ny fitadidiana misaraka, ary ny pejin'ny fitadidiana eo amin'ny sisin-tany havia sy havanana dia mamorona pejy fiambenana, ny haben'izy ireo dia voafidy kisendrasendra.

Noho izany, ny pejy misy zavatra dia misaraka amin'ny alàlan'ny pejy fiarovana, izay namboarina mba hamoronana "pejy diso" amin'ny fidirana rehetra. Mba hamantarana ny soratra ivelan'ny sisintany ao anatin'ny pejin'ny zavatra, dia ampiasaina koa ny "faritra mena" mifototra amin'ny lamina, izay mitahiry fahatsiarovana tsy ampiasain'ny zavatra, mijanona rehefa mifanaraka ny haben'ny pejy fitadidiana. —+————+————+————+————+————+— | xxxxxxxxx | O: | xxxxxxxxx | :O | xxxxxxxxx | | xxxxxxxxx | B: | xxxxxxxxx | :B | xxxxxxxxx | | x MPIADY x | J : MENA- | x MPIADY x | MENA- : J | x MPIADY x | | xxxxxxxxx | E: ZONE | xxxxxxxxx | ZONA: E | xxxxxxxxx | | xxxxxxxxx | C: | xxxxxxxxx | :C | xxxxxxxxx | | xxxxxxxxx | T: | xxxxxxxxx | : T | xxxxxxxxx | —+————+————+————+————+————+—

Raha misy fikasana hiditra amin'ny faritra ivelan'ny sisin-tanin'ny buffer, dia misy fiantraikany amin'ny pejin'ny fiarovana ny fandidiana, izay mitarika amin'ny famoronana "pejy diso", izay manakana ny KFence ary misoratra anarana momba ny olana fantatra. Amin'ny alàlan'ny default, KFence dia tsy manakana hadisoana ary mampiseho fampitandremana fotsiny ao amin'ny log, fa misy ny "panic_on_warn" izay ahafahanao mametraka ny kernel ao anatin'ny toe-javatra mikorontana raha misy hadisoana hita.

Source: opennet.ru

Add a comment