Gaizki pentsatutako adabaki batek Linux kerneleko Spectreren ahultasunerako konponketa osatugabea eragin zuen.

Grsecurity proiektuaren garatzaileak partekatua Konpiladorearen abisuak ezabatzeak kodean ahuleziak nola eragin ditzakeen erakusten duen kontu-istorio bat. Maiatzaren amaieran, Linux nukleorako konponketa bat proposatu zen Spectreren ahultasuna ustiatzeko bektore berri baterako, ptrace sistema-deiaren bidez.

Adabakia probatzen ari zirenean, garatzaileek ohartu ziren eraikitzean, konpilatzaileak kodea eta definizioak nahasteari buruzko abisua erakusten duela (egitura kodearen ondoren definitu zen, lehendik zegoen aldagai bati balio bat esleituz):

int indizea = n;
if (n < HBP_NUM) { indizea = array_index_nospec (indizea, HBP_NUM); struct perf_event *bp = haria->ptrace_bps[indizea];

Linusek onartu zuen zuzenketa zure adar nagusira, kenduta abisutik aldagaiaren definizioa if bloke batera eramanez:

if (n < HBP_NUM) { int indizea = array_index_nospec (n, HBP_NUM); struct perf_event *bp = haria->ptrace_bps[indizea];

Uztailean, konponketa kernel-adar egonkorretara ere eraman zen 4.4, 4.9, 4.14, 4.19 eta 5.2. Adar egonkorren mantentzaileek ere abisua topatu zuten eta, Linusen maisuaren adarrean jada konponduta zegoen ala ez egiaztatu beharrean, beraiek egin zuten konponketa. Arazoa da benetan pentsatu gabe, besterik gabe mugitu egitura gora definitzea, beraz, ahultasunaren aurkako babesa zuzenean ematen duen array_index_nospec-erako deia ez da gehiago erabiltzen egitura definitzerakoan, eta "index" aldagaiaren ordez "n" aldagaia erabiltzen da beti:

int indizea = n;
if (n < HBP_NUM ){ struct perf_event *bp = haria->ptrace_bps[indizea];
indizea = array_index_nospec (indizea, HBP_NUM);

Iturria: opennet.ru

Gehitu iruzkin berria