Desenvolvedores do projeto Grsecurity
Ao testar o patch, os desenvolvedores notaram que durante a construção, o compilador exibe um aviso sobre a mistura de código e definições (a estrutura foi definida após o código, atribuindo um valor a uma variável existente):
índice interno = n;
if (n <HBP_NUM) { índice = array_index_nospec(índice, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[índice];
Linus aceitou
if (n <HBP_NUM) {int índice = array_index_nospec(n, HBP_NUM); struct perf_event *bp = thread->ptrace_bps[índice];
Em julho, a correção também foi portada para as ramificações estáveis do kernel 4.4, 4.9, 4.14, 4.19 e 5.2. Os mantenedores dos ramos estáveis também encontraram o aviso e, em vez de verificar se já havia sido corrigido no ramo mestre do Linus, eles próprios fizeram uma correção. O problema é que, sem realmente pensar nisso, eles simplesmente
índice interno = n;
if (n <HBP_NUM){ struct perf_event *bp = thread->ptrace_bps[index];
índice = array_index_nospec(índice, HBP_NUM);
Fonte: opennet.ru