Grsecurity projekti arendajad õppetundi, mis näitab, kuidas hoolimatu kompilaatori hoiatuste eemaldamine võib tuua koodi haavatavusi. Mais tehti Linuxi kerneli jaoks ettepanek parandada uut Spectre haavatavuse ekspluateerimise vektorit ptrace süsteemi kutsumise kaudu.
Paranduse testimise käigus tähelepanid arendajad, et kompilaatori ehitamisel ilmub hoiatus koodi ja definitsioonide segamise kohta (struktuur oli defineeritud pärast olemasoleva muutuja väärtuse määramist):
int index = n;
if (n ptrace_bps[index];
Linus aktsepteeris oma master-haru, hoiatusest viidates muutuja määramine if plokki:
if (n ptrace_bps[index];
Juulis viidi see parandamine ka stabiliseeritud põhiharudesse 4.4, 4.9, 4.14, 4.19 ja 5.2. Stabiilsete harude hooldajad seisid silmitsi hoiatustega ja selle asemel, et kontrollida, kas see on juba Linuse master-harus kõrvaldatud, teostasid nad paranduse ise. Probleem on selles, et nad, eriti mitte mõeldes, lihtsalt struktuuri määratlemise üles, nii et funktsioon array_index_nospec, mis otse kaitseb haavatavuse eest, lõpetas struktuuri määramisel kasutamise ja muutujat «index» kasutati alati muutuja «n» asemel:
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Allikas: opennet.ru
