Grsecurity projekti arendajad õpetliku looga, mis näitab, kuidas ettevaatamatu kompilaatori hoiatuste eemaldamine võib viia koodi haavatavuste tekkimiseni. Mais pakuti Linuxi kärgi jaoks välja uus parandus Spectre haavatavuse eksploitatsiooni uue vektori jaoks läbi süsteemi kutsumise ptrace.
Paranduse testimise käigus märkasid arendajad, et kompilaator annab hoiatuse koodi ja määratluste segamise kohta (struktuur defineeriti pärast olemasoleva muutuja väärtuse määramist):
int index = n;
if (n ptrace_bps[index];
Linus võttis oma master-oksasse, hoiatustest, viies muutuja määratluse if-plokki:
if (n ptrace_bps[index];
Juulis viidi parandused ka stabiilsetesse kerni okstesse 4.4, 4.9, 4.14, 4.19 ja 5.2. Stabiilsete okste hooldajad kohtasid samuti hoiatust ning selle asemel, et kontrollida, kas see on juba Linuse master-oksas lahendatud, tegid nad paranduse ise. Probleem oli selles, et nad, eriti mitte mõeldes, lihtsalt struktuuri määratluse üles, nii et array_index_nospec'i kutsumine, mis otseselt kaitseb haavatavuse eest, ei saanud enam struktuuri määramisest osa ning muutuja "index" asemel kasutati alati muutujat "n":
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Allikas: opennet.ru
