Citando https://www.kernel.org/doc/Documentation/process/adding-syscalls.rst :
Pelo menos no x86 de 64 bits, será um requisito difícil a partir da v4.17 não chamar funções de chamada do sistema no kernel. Ele usa uma convenção de chamada diferente para chamadas de sistema, onde
struct pt_regs
é decodificada dinamicamente em um wrapper syscall que então transfere o processamento para a função syscall real. Isso significa que apenas os parâmetros que são realmente necessários para um syscall específico são passados durante a entrada do syscall, em vez de preencher seis registros da CPU com conteúdo aleatório do espaço do usuário o tempo todo (o que pode causar sérios problemas na cadeia de chamadas).
A que problema sério na cadeia de chamadas se refere a última cláusula entre parênteses?
Para mim, parece estúpido não carregar os seis registros na preparação genérica para o syscall. Forçar cada wrapper do syscall a fazer isso os torna maiores e as funções do syscall se tornam um novo caso especial, então estou me perguntando qual é o "problema sério" de ter conteúdo de usuário não intencional em registros de argumentos não utilizados.
Uma das preocupações não era tanto com valores de registro arbitrários , mas com o fato de eles serem copiados para a pilha do kernel. Registradores não utilizados podem, portanto, ser usados para gravar valores arbitrários controlados pelo chamador na pilha, sem verificações.
Esses valores na pilha poderiam ser usados em um ataque mais complexo. É por isso que remover essa possibilidade pareceu uma boa ideia.
O resumo 4.17 de Kees Cook também menciona a possível influência desses valores de registro na execução especulativa.