Ислоҳи бесарусомонӣ боиси ислоҳи нопурраи осебпазирии Spectre дар ядрои Linux шуд

Таҳиягарони лоиҳаи Grsecurity мубодила як ҳикояи огоҳкунанда нишон медиҳад, ки чӣ гуна беандешона бартараф кардани огоҳиҳои компилятор метавонад ба осебпазирӣ дар код оварда расонад. Дар охири моҳи май, ислоҳи ядрои Linux барои вектори нави истифодабарии осебпазирии Spectre тавассути занги системаи ptrace пешниҳод карда шуд.

Ҳангоми санҷиши патч, таҳиягарон пай бурданд, ки ҳангоми сохтан, компилятор дар бораи омехта кардани код ва таърифҳо огоҳӣ медиҳад (сохтор пас аз код муайян карда шуда, ба тағирёбандаи мавҷуда арзиш таъин мекунад):

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

Линус қабул кард ислоҳ ба филиали устои худ, халос шудан аз огоҳӣ тавассути интиқол додани таърифи тағирёбанда ба блоки if:

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

Дар моҳи июл, ислоҳ инчунин ба шохаҳои устувори ядрои 4.4, 4.9, 4.14, 4.19 ва 5.2 интиқол дода шуд. Нигоҳдорони шохаҳои устувор низ бо огоҳӣ дучор шуданд ва ба ҷои тафтиш кардани он, ки он аллакай дар шохаи устоди Линус насб шудааст, онҳо худашон ислоҳ карданд. Мушкилот дар он аст, ки онҳо дар бораи он фикр накарда, танҳо кӯчид муайян кардани сохтор боло, ба тавре ки занг ба array_index_nospec, ки бевосита аз осебпазирӣ муҳофизат мекунад, дигар ҳангоми муайян кардани сохтор истифода намешавад ва ба ҷои тағирёбандаи "index" ҳамеша тағирёбандаи "n" истифода мешавад:

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

Манбаъ: opennet.ru

Илова Эзоҳ