Катуу оңдоо Linux ядросундагы Spectre алсыздыгынын толук эмес оңдоосуна алып келди

Grsecurity долбоорун иштеп чыгуучулар бөлүштү компилятордун эскертүүлөрүн ойлонбостон жок кылуу коддогу алсыздыктарга алып келиши мүмкүн экенин көрсөткөн эскертүү жомок. Майдын аягында, ptrace тутумунун чалуусу аркылуу Spectre аялуулугун эксплуатациялоонун жаңы вектору үчүн Linux ядросу үчүн оңдоо сунушталган.

Жамаатты сынап жатканда, иштеп чыгуучулар курууда компилятор код менен аныктамаларды аралаштыруу жөнүндө эскертүү берерин байкашкан (структура коддон кийин аныкталган, учурдагы өзгөрмөгө маани берген):

int индекс = n;
if (n < HBP_NUM) { index = array_index_nospec (индекс, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];

Линус кабыл алды оңдоо Сиздин башкы филиалыңызга, кутулуу өзгөрмөнүн аныктамасын if блогуна жылдыруу менен эскертүүдөн:

if (n < HBP_NUM) { int index = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[индекс];

Июль айында оңдоо 4.4, 4.9, 4.14, 4.19 жана 5.2 туруктуу ядро ​​бутактарына көчүрүлгөн. Туруктуу бутактардын кароолчулары да эскертүүгө туш болушту жана анын Линустун башкы бутагына орнотулган же орнотулганын текшерүүнүн ордуна, өздөрү оңдоп коюшту. Маселе, алар бул жөнүндө ойлонбостон, жөн эле калтырылды түзүмүн аныктоодо, ошентип, түзүмдүн аялуулугунан түздөн-түз коргоону камсыз кылган array_index_nospec чалуусу структураны аныктоодо колдонулбайт жана "индекс" өзгөрмөсүнүн ордуна дайыма "n" өзгөрмөсү колдонулат:

int индекс = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[индекс];
индекс = array_index_nospec(индекс, HBP_NUM);

Source: opennet.ru

Комментарий кошуу