Një rregullim i nxituar rezultoi në një rregullim jo të plotë për një dobësi të Spectre në kernelin Linux

Zhvilluesit e projektit Grsecurity të përbashkëta një përrallë paralajmëruese që tregon se si eliminimi i pakujdesshëm i paralajmërimeve të përpiluesit mund të çojë në dobësi në kod. Në fund të majit, për kernelin Linux, u propozua një rregullim për një vektor të ri të shfrytëzimit të cenueshmërisë së Spectre përmes thirrjes së sistemit ptrace.

Në procesin e testimit të patch-it, zhvilluesit vunë re se gjatë ndërtimit, përpiluesi shfaq një paralajmërim për përzierjen e kodit dhe përkufizimeve (struktura u përcaktua pas kodit me caktimin e një vlere për një ndryshore ekzistuese):

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

Linus pranoi korrigjim në degën tuaj master, duke u hequr qafe nga paralajmërimi duke e mbështjellë përkufizimin e ndryshores në një bllok if:

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

Në korrik, rregullimi u transferua gjithashtu në degët e qëndrueshme të kernelit 4.4, 4.9, 4.14, 4.19 dhe 5.2. Mbajtësit e stabilit ndeshën gjithashtu paralajmërimin dhe në vend që të kontrollonin nëse ishte rregulluar tashmë në degën kryesore të Linusit, ata e rregulluan vetë. Problemi është se ata, pa u menduar shumë, vetëm të transferuara përcaktimi i strukturës lart, kështu që thirrja për array_index_nospec, e cila siguron drejtpërdrejt mbrojtje kundër cenueshmërisë, nuk përdoret më në përkufizimin e strukturës, dhe në vend të ndryshores "indeks", ndryshorja "n" është përdorur gjithmonë:

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

Burimi: opennet.ru

Shto një koment