Desarrolladores del proyecto Grsecurity
Mientras probaban el parche, los desarrolladores notaron que durante la compilación, el compilador muestra una advertencia sobre la mezcla de código y definiciones (la estructura se definió después del código, asignando un valor a una variable existente):
índice int = n;
if (n < HBP_NUM) { índice = array_index_nospec(índice, HBP_NUM); struct perf_event *bp = hilo->ptrace_bps[índice];
Linus aceptó
if (n < HBP_NUM) { int índice = array_index_nospec(n, HBP_NUM); struct perf_event *bp = hilo->ptrace_bps[índice];
En julio, la solución también se transfirió a las ramas estables del kernel 4.4, 4.9, 4.14, 4.19 y 5.2. Los mantenedores de las ramas estables también encontraron la advertencia y, en lugar de verificar si ya se había solucionado en la rama maestra de Linus, lo arreglaron ellos mismos. El problema es que sin pensarlo realmente, simplemente
índice int = n;
if (n < HBP_NUM ){ struct perf_event *bp = thread->ptrace_bps[index];
índice = array_index_nospec(índice, HBP_NUM);
Fuente: opennet.ru