Sviluppatori del progetto Grsecurity
Durante il test della patch, gli sviluppatori hanno notato che durante la compilazione, il compilatore visualizza un avviso relativo alla combinazione di codice e definizioni (la struttura è stata definita dopo il codice, assegnando un valore a una variabile esistente):
indice int = n;
if (n <HBP_NUM) { indice = array_index_nospec(indice, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[indice];
Linus accettò
if (n <HBP_NUM) { int indice = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[indice];
A luglio la correzione è stata portata anche sui rami stabili del kernel 4.4, 4.9, 4.14, 4.19 e 5.2. Anche i manutentori dei rami stable si sono imbattuti nell'avviso e, invece di controllare se era già stato corretto nel ramo master di Linus, hanno apportato una correzione da soli. Il problema è che senza pensarci davvero, semplicemente
indice int = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[indice];
indice = array_index_nospec(indice, HBP_NUM);
Fonte: opennet.ru