Gli sviluppatori del progetto Grsecurity una storia istruttiva che dimostra come la rimozione impulsiva degli avvisi del compilatore possa portare all'emergere di vulnerabilità nel codice. Alla fine di maggio, è stata proposta una correzione per un nuovo vettore di sfruttamento della vulnerabilità Spectre tramite la chiamata di sistema ptrace.
Durante il processo di test della patch, gli sviluppatori hanno notato che durante la compilazione il compilatore emetteva un avviso riguardo alla mescolanza di codice e definizioni (la struttura era stata definita dopo il codice che assegnava un valore a una variabile esistente):
int index = n;
if (n ptrace_bps[index];
Linus ha accettato nella sua branch master, l'avviso spostando la definizione della variabile nel blocco if:
if (n ptrace_bps[index];
A luglio, la correzione è stata anche portata nelle branch stabili del kernel 4.4, 4.9, 4.14, 4.19 e 5.2. Gli addetti delle branch stabili hanno anche riscontrato l'avviso e invece di controllare se fosse già stato rimosso nella branch master di Linus, hanno apportato manualmente la correzione. Il problema è che senza pensarci troppo hanno semplicemente la definizione della struttura in alto, in modo tale che la chiamata a array_index_nospec, che offre protezione dalla vulnerabilità, non venisse più utilizzata durante la definizione della struttura, e al posto della variabile «index» venisse sempre utilizzata la variabile «n»:
int index = n;
if (n ptrace_bps[index];
index = array_index_nospec(index, HBP_NUM);
Fonte: opennet.ru
