Linux 5.12 kernel သည် Memory နှင့် အလုပ်လုပ်သောအခါ အမှားအယွင်းများကို သိရှိနိုင်စေရန် KFence subsystem ကို အသုံးပြုထားသည်။

ဖွံ့ဖြိုးဆဲ Linux kernel 5.12 တွင် Memory ကိုင်တွယ်ခြင်းအား စစ်ဆေးပေးခြင်း၊ ကြားခံ overruns များကို ဖမ်းယူခြင်း၊ လွတ်ပြီးနောက် memory access နှင့် အလားတူ class ၏ အခြားသော အမှားအယွင်းများကို စစ်ဆေးပေးသည့် KFence (Kernel Electric Fence) ယန္တရားကို အကောင်အထည်ဖော်ခြင်း ပါဝင်သည်။

အလားတူလုပ်ဆောင်နိုင်စွမ်းသည် KASAN တည်ဆောက်မှုရွေးချယ်မှုပုံစံ (kernel address sanitizer၊ ခေတ်မီ gcc နှင့် clang တွင် Address Sanitizer ကိုအသုံးပြုသည်) - သို့သော်၊ ၎င်းကို အမှားရှာပြင်ခြင်းအတွက် အဓိကနေရာယူထားသည်။ KFence စနစ်ခွဲသည် KASAN နှင့် မြင့်မားသော လည်ပတ်မှုအမြန်နှုန်းဖြင့် ကွဲပြားသည်၊ ၎င်းသည် အလုပ်လုပ်သည့်စနစ်များတွင်ပင် cores များတွင်ပင် ဤအင်္ဂါရပ်ကို သုံးနိုင်စေသည်။

ထုတ်လုပ်မှုစနစ်များပေါ်ရှိ အက်ပ်လီကေးရှင်းသည် စမ်းသပ်လည်ပတ်မှုများတွင် မပေါ်သည့် မှတ်ဉာဏ်အမှားများကို ဖမ်းယူနိုင်စေပြီး အလုပ်များချိန်တွင် သို့မဟုတ် ရေရှည်လုပ်ဆောင်မှုအတွင်း (ကြီးမားသောအလုပ်ချိန်ဖြင့်) ပေါ်လာမည်ဖြစ်သည်။ ထို့အပြင်၊ ထုတ်လုပ်မှုစနစ်များတွင် KFence ကိုအသုံးပြုခြင်းသည် kernel ၏လုပ်ဆောင်ချက်ကို memory ဖြင့်စစ်ဆေးခြင်းတွင်ပါ ၀ င်သည့်စက်အရေအတွက်ကိုသိသိသာသာတိုးလာစေလိမ့်မည်။

KFence သည် သတ်မှတ်ထားသောအချိန်အတောအတွင်း အစောင့်စာမျက်နှာများကို အမှိုက်ပုံထဲသို့ ထည့်သွင်းခြင်းဖြင့် အနည်းငယ်မျှသာသော ဝန်-အမှီအခိုကင်းသော အပေါ်စီးမှ ရရှိသည်။ လာမည့်ကာကွယ်မှုကာလ ကုန်ဆုံးပြီးနောက်၊ KFence သည် စံမှတ်ဉာဏ်ခွဲဝေမှုစနစ် (SLAB သို့မဟုတ် SLUB ခွဲဝေပေးသူ) မှတစ်ဆင့် KFence အရာဝတ္ထုရေကန်မှ နောက်ကာကွယ်မှုစာမျက်နှာကို ပေါင်းထည့်ကာ အချိန်တန်ပြန်အစီရင်ခံစာအသစ်ကို စတင်သည်။ KFence အရာဝတ္တုတစ်ခုစီသည် သီးခြားမှတ်ဉာဏ်စာမျက်နှာတစ်ခုတွင် တည်ရှိပြီး ဘယ်နှင့်ညာဘက်ဘောင်တစ်လျှောက်ရှိ မမ်မိုရီစာမျက်နှာများသည် ကျပန်းရွေးချယ်ထားသည့် အရွယ်အစားကို အကာအကွယ်စာမျက်နှာများအဖြစ် ဖွဲ့စည်းထားသည်။

ထို့ကြောင့်၊ အရာဝတ္ထုများပါသည့် စာမျက်နှာများကို အကာအကွယ်စာမျက်နှာများဖြင့် ခြားထားကာ မည်သည့်ဝင်ရောက်ခွင့်အတွက်မဆို "စာမျက်နှာအမှား" ကို ဖန်တီးရန် စီစဉ်ထားသည်။ အရာဝတ္တုစာမျက်နှာများအတွင်း နယ်နိမိတ်ပြင်ပတွင် ရေးသားခြင်းလုပ်ဆောင်မှုများကို သိရှိရန်၊ မှတ်ဉာဏ်စာမျက်နှာများ၏ အရွယ်အစားကို ချိန်ညှိလိုက်သောအခါတွင် ကျန်ရှိသည့် အရာဝတ္ထုများမှ အသုံးမပြုသည့်မှတ်ဉာဏ်ကို သိမ်းပိုက်ထားသည့် ပုံစံအခြေခံ "အနီရောင်ဇုန်များ" ကို ထပ်မံအသုံးပြုပါသည်။ —+————+————+————+————+————+— | xxxxxxxx | O: | xxxxxxxx | :O | xxxxxxxx | | xxxxxxxx | B: | xxxxxxxx | :B | xxxxxxxx | | x အစောင့် x | J : RED- | x အစောင့် x | RED- : J | x အစောင့် x | | xxxxxxxx | E: ZONE | xxxxxxxx | ZONE: E | xxxxxxxx | | xxxxxxxx | C: | xxxxxxxx | :C | xxxxxxxx | | xxxxxxxx | T: | xxxxxxxx | :T | xxxxxxxx | —+————+————+————+————+————+—

ကြားခံနယ်နိမိတ်များအပြင်ဘက်ရှိ ဧရိယာတစ်ခုကို ဝင်ရောက်ရန် ကြိုးပမ်းပါက၊ လုပ်ဆောင်ချက်သည် KFence ကို ကြားဖြတ်ပြီး ရှာဖွေတွေ့ရှိထားသော ပြဿနာနှင့်ပတ်သက်သော အချက်အလက်များကို မှတ်တမ်းတင်သည့် "စာမျက်နှာအမှား" ဖြစ်ပေါ်စေသည့် ကာကွယ်မှုစာမျက်နှာကို အကျိုးသက်ရောက်စေသည်။ ပုံမှန်အားဖြင့်၊ KFence သည် အမှားအယွင်းတစ်ခုကို ပိတ်ဆို့ထားခြင်းမဟုတ်ဘဲ မှတ်တမ်းတွင် သတိပေးချက်တစ်ခုသာ ပြသသော်လည်း အမှားတစ်ခုတွေ့ရှိပါက kernel အား ထိတ်လန့်သည့်အခြေအနေသို့ ထည့်သွင်းနိုင်စေမည့် "panic_on_warn" ဆက်တင်တစ်ခု ရှိပါသည်။

source: opennet.ru

မှတ်ချက် Add