Tələsik düzəliş Linux nüvəsindəki Spectre zəifliyi üçün natamam düzəlişlə nəticələndi

Grsecurity layihəsinin tərtibatçıları paylaşdı kompilyator xəbərdarlıqlarının düşünmədən aradan qaldırılmasının kodda boşluqlara səbəb ola biləcəyini nümayiş etdirən xəbərdarlıq hekayəsi. May ayının sonunda, ptrace sistem çağırışı vasitəsilə Spectre zəifliyinin istismarının yeni vektoru üçün Linux nüvəsi üçün düzəliş təklif edildi.

Yamağı sınaqdan keçirərkən tərtibatçılar qeyd etdilər ki, qurarkən kompilyator kod və tərifləri qarışdırmaqla bağlı xəbərdarlıq göstərir (quruluş koddan sonra müəyyən edilmiş, mövcud dəyişənə dəyər təyin edilmişdir):

int indeksi = n;
əgər (n < HBP_NUM) { index = array_index_nospec(indeks, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[index];

Linus qəbul etdi düzəliş usta filialınıza, qurtardıqdan sonra Dəyişən tərifini if ​​blokuna köçürməklə xəbərdarlıqdan:

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

İyul ayında düzəliş 4.4, 4.9, 4.14, 4.19 və 5.2 sabit nüvə filiallarına da köçürüldü. Stabil budaqların baxıcıları da xəbərdarlıqla qarşılaşdılar və bunun Linusun usta filialında düzəldildiyini yoxlamaq əvəzinə, özləri düzəltdilər. Problem ondadır ki, bu barədə düşünmədən sadəcə olaraq köçdü strukturun müəyyənləşdirilməsi, beləliklə, zəiflikdən birbaşa müdafiəni təmin edən array_index_nospec çağırışı strukturu təyin edərkən artıq istifadə olunmur və "index" dəyişəninin əvəzinə həmişə "n" dəyişəni istifadə olunur:

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

Mənbə: opennet.ru

Добавить комментарий