အဖုအပိန့်များ ပြုပြင်ခြင်းသည် Linux kernel ရှိ Spectre အားနည်းချက်အတွက် မပြည့်စုံသော ပြုပြင်မှုကို ဖြစ်ပေါ်စေသည်

Grsecurity ပရောဂျက်၏ developer များ မျှဝေသည်။ ကွန်ပြူလာသတိပေးချက်များကို မစဉ်းစားဘဲ ဖယ်ထုတ်ခြင်းသည် ကုဒ်ရှိ အားနည်းချက်များဆီသို့ မည်ကဲ့သို့ ဖြစ်ပေါ်လာနိုင်သည်ကို သရုပ်ပြသတိထားစရာ ပုံပြင်။ မေလကုန်တွင် ptrace စနစ်ခေါ်ဆိုမှုမှတစ်ဆင့် Spectre အားနည်းချက်ကို အသုံးချခြင်းဆိုင်ရာ အားနည်းချက်အသစ်အတွက် Linux kernel အတွက် ပြင်ဆင်ချက်တစ်ခု အဆိုပြုခဲ့သည်။

patch ကိုစမ်းသပ်နေစဉ်၊ တည်ဆောက်သည့်အခါတွင်၊ compiler သည် ကုဒ်နှင့်အဓိပ္ပါယ်များ ရောနှောခြင်းဆိုင်ရာ သတိပေးချက်ပြသသည်ကို developer များက သတိပြုမိသည် (ဖွဲ့စည်းပုံသည် ကုဒ်နောက်တွင် သတ်မှတ်လိုက်သည်၊ ရှိပြီးသား variable တစ်ခုသို့ တန်ဖိုးတစ်ခုသတ်မှတ်ခြင်းဖြစ်သည်)။

int အညွှန်း = n;
အကယ်၍ (n < HBP_NUM) { index = array_index_nospec(index, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

Linus လက်ခံတယ်။ ဆုံးမပဲ့ပြင်ခြင်း မင်းရဲ့အကိုင်းအခက်၊ ဖယ်ရှားပြီးနောက် ပြောင်းလဲနိုင်သော အဓိပ္ပါယ်ဖွင့်ဆိုချက်ကို if block တစ်ခုသို့ ရွှေ့ခြင်းဖြင့် သတိပေးချက်မှ

if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

ဇူလိုင်လတွင်၊ ပြင်ဆင်ချက်သည် တည်ငြိမ်သော kernel အကိုင်းအခက် 4.4၊ 4.9၊ 4.14၊ 4.19 နှင့် 5.2 သို့လည်း ပေးပို့ခဲ့သည်။ တည်ငြိမ်သောအကိုင်းအခက်များ၏ထိန်းသိမ်းသူများသည်သတိပေးချက်ကိုလည်းကြုံတွေ့ရပြီး Linus ၏ပင်မအကိုင်းအခက်တွင်ပြုပြင်ပြီးသားရှိမရှိစစ်ဆေးမည့်အစား၊ ၎င်းတို့ကိုယ်တိုင်ပြင်ဆင်မှုပြုလုပ်ခဲ့သည်။ ပြဿနာက အဲဒါကို တကယ်မစဉ်းစားဘဲ၊ ပြောင်းရွှေ့ ဖွဲ့စည်းတည်ဆောက်ပုံကို သတ်မှတ်ခြင်း၊ အားနည်းချက်ကိုတိုက်ရိုက်ကာကွယ်ပေးသည့် array_index_nospec သို့ခေါ်ဆိုမှုသည် ဖွဲ့စည်းပုံကိုသတ်မှတ်ရာတွင် အသုံးမပြုတော့ဘဲ၊ variable "index" အစား variable "n" ကို အမြဲတမ်းအသုံးပြုသည်-

int အညွှန်း = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
အညွှန်း = array_index_nospec(အညွှန်း၊ HBP_NUM);

source: opennet.ru

မှတ်ချက် Add