Linux 5.12 කර්නලය මතකය සමඟ වැඩ කිරීමේදී දෝෂ හඳුනා ගැනීමට KFence උප පද්ධතිය භාවිතා කර ඇත.

සංවර්ධනය වෙමින් පවතින Linux kernel 5.12, KFence (Kernel Electric Fence) යාන්ත්‍රණය ක්‍රියාත්මක කිරීම ඇතුළත් වන අතර, එය මතකය හැසිරවීම, බෆරය ඉක්මවා යාම, නිදහස් කිරීමෙන් පසු මතක ප්‍රවේශයන් සහ සමාන පන්තියක වෙනත් දෝෂ පරීක්ෂා කරයි.

KASAN ගොඩනැගීමේ විකල්පය (kernel address sanitizer, නවීන gcc සහ clang හි Address Sanitizer භාවිතා කරයි) ආකාරයෙන් දැනටමත් සමාන ක්‍රියාකාරීත්වයක් කර්නලයේ තිබුණි - කෙසේ වෙතත්, එය ප්‍රධාන වශයෙන් දෝශ නිරාකරණ භාවිතය සඳහා ස්ථානගත කර ඇත. KFence උපපද්ධතිය KASAN ට වඩා එහි ඉහළ ක්‍රියාකාරී වේගය අනුව වෙනස් වන අතර එමඟින් වැඩ කරන පද්ධතිවල හරය මත පවා මෙම විශේෂාංගය භාවිතා කිරීමට හැකි වේ.

නිෂ්පාදන පද්ධතිවල යෙදීම මඟින් පරීක්ෂණ ධාවන වලදී නොපෙන්වන මතක දෝෂ හසුකර ගැනීමට හැකි වන අතර වැඩ බරේදී හෝ දිගු කාලීන ක්‍රියාකාරිත්වයේදී (විශාල වේලාවක් සහිතව) පමණක් දිස් වේ. මීට අමතරව, නිෂ්පාදන පද්ධති මත KFence භාවිතා කිරීම මතකය සමඟ කර්නලයේ ක්රියාකාරිත්වය පරීක්ෂා කිරීම සඳහා සම්බන්ධ වන යන්ත්ර සංඛ්යාව සැලකිය යුතු ලෙස වැඩි කිරීමට හැකි වනු ඇත.

KFence ස්ථාවර කාල පරාසයන් තුළ ආරක්ෂක පිටු ගොඩට ඇතුල් කිරීමෙන් අවම බර-ස්වාධීන පොදු කාර්ය භාරයක් ලබා ගනී. මීළඟ ආරක්ෂණ විරාමය කල් ඉකුත් වූ පසු, KFence, සම්මත මතක වෙන් කිරීමේ පද්ධතිය (SLAB හෝ SLUB විබෙදුම) හරහා KFence වස්තු සංචිතයෙන් මීළඟ ආරක්ෂණ පිටුව එක් කර, නව කාල කවුන්ටර වාර්තාවක් ආරම්භ කරයි. සෑම KFence වස්තුවක්ම වෙනම මතක පිටුවක පිහිටා ඇති අතර වම් සහ දකුණු මායිම් දිගේ මතක පිටු ආරක්ෂක පිටු සාදයි, එහි විශාලත්වය අහඹු ලෙස තෝරා ගනු ලැබේ.

මේ අනුව, වස්තු සහිත පිටු ආරක්‍ෂක පිටු මගින් එකිනෙකින් වෙන් කරනු ලැබේ, ඕනෑම ප්‍රවේශයක් මත "පිටු දෝෂයක්" උත්පාදනය කිරීමට වින්‍යාස කර ඇත. වස්තු පිටු තුළ සීමාවෙන් පිටත ලිවීමේ මෙහෙයුම් හඳුනාගැනීම සඳහා, රටා මත පදනම් වූ “රතු කලාප” අතිරේකව භාවිතා කරනු ලැබේ, ඒවා වස්තූන් විසින් භාවිතා නොකරන මතකය අල්ලා ගන්නා අතර මතක පිටු වල ප්‍රමාණය පෙළගස්වන විට ඉතිරි වේ. —+————+———+———+———+—————+— | xxxxxxxx | O: | xxxxxxxx | :O | xxxxxxxx | | xxxxxxxx | B: | xxxxxxxx | :B | xxxxxxxx | | x ආරක්ෂකයා x | J : රතු- | x ආරක්ෂකයා x | රතු- : J | x ආරක්ෂකයා x | | xxxxxxxx | ඉ: කලාපය | xxxxxxxx | කලාපය: ඊ | xxxxxxxx | | xxxxxxxx | C: | xxxxxxxx | :C | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | : T | xxxxxxxx | —+————+————+———+———+————+—+—

බෆර සීමාවෙන් පිටත ප්‍රදේශයකට ප්‍රවේශ වීමට උත්සාහ කරන්නේ නම්, ක්‍රියාන්විතය ආරක්ෂණ පිටුවට බලපාන අතර එය “පිටු දෝෂයක්” උත්පාදනය කිරීමට තුඩු දෙයි, එය KFence බාධා කර හඳුනාගත් ගැටලුව පිළිබඳ තොරතුරු ලොග් කරයි. පෙරනිමියෙන්, KFence දෝෂයක් අවහිර නොකරන අතර ලොගයේ අනතුරු ඇඟවීමක් පමණක් පෙන්වයි, නමුත් "panic_on_warn" සැකසුම ඇත, එය දෝෂයක් අනාවරණය වුවහොත් කර්නලය භීතියට පත් කිරීමට ඔබට ඉඩ සලසයි.

මූලාශ්රය: opennet.ru

අදහස් එක් කරන්න