Çareserkirinek bêserûber ji bo zerafetek Specter di kernel Linux de çareseriyek ne temam encam da

Pêşdebirên projeya Grsecurity parve kirin çîrokek hişyarker ku destnîşan dike ka rakirina hişyariyên berhevkar çawa dikare bibe sedema qelsiyên di kodê de. Di dawiya Gulanê de, ji bo vektorek nû ya kedxwariya Spectre bi rêya banga pergala ptrace ve ji bo kernel Linux-ê rastkirinek hate pêşniyar kirin.

Di dema ceribandina patchê de, pêşdebiran dît ku dema ku çêdike, berhevkar hişyariyek li ser tevlihevkirina kod û pênaseyan nîşan dide (avahî piştî kodê hate destnîşankirin, nirxek ji guhêrbarek heyî re destnîşan dike):

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

Linus qebûl kir serrastkirî ber şaxê xweyê xweyî, ji holê rabûye ji hişyariyê bi veguheztina pênaseya guhêrbar ber bi bloka ger ve:

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

Di Tîrmehê de, rastkirin ji şaxên kernelê yên stabîl 4.4, 4.9, 4.14, 4.19 û 5.2 re jî hate şandin. Parêzgerên şaxên îstîqrar jî rastî hişyariyê hatin û li şûna ku kontrol bikin ka ew jixwe di şaxê masterê Linus de rast bûye, wan bixwe rastkirinek çêkir. Pirsgirêk ev e ku bêyî ku bi rastî li ser wê bifikirin, ew tenê bar kir danasîna avahîsaziyê li jor, da ku banga array_index_nospec, ku rasterast parastinê li hember lawaziyê peyda dike, dema pênasekirina strukturê nema tê bikar anîn, û li şûna guhêrbar "index" guhêrbar "n" her gav tê bikar anîn:

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

Source: opennet.ru

Add a comment