A zona vermelha é pura e simplesmente uma otimização que pode salvar instruções. Isso significa que não é mais necessário que o código emitido para cada função subtraia do ponteiro da pilha para tornar o armazenamento local assim
sub XXX, %rsp
no início de cada chamada de função, mesmo que não sejam funções folha. Muitas vezes, o código emitido pelo compilador pode usar o espaço temporário na zona vermelha abaixo do ponteiro da pilha sem precisar salvá-lo e antes de chamar outras funções. Essa é uma otimização útil para ter disponível.
Se você não precisar mais usar o ponteiro da pilha, o código emitido poderá usar rsp como ponteiro base, um trabalho normalmente reservado para rbp, e o código emitido poderá usar rbp como outro registro de uso geral.
Isso significa que o prólogo e o epílogo de cada chamada de função podem salvar duas instruções que salvariam e restaurariam o rbp:
(montador gnu)
pushq %rbp # prologue [ two instructions not necessary ]
movq %rsp,%rbp
.... [code]
movq %rbp,%rsp # epilogue [ two instructions not necessary ]
popq %rbp
Observe que no gcc você pode passar o sinalizador -mno-red-zone se não quiser (mas a ABI x86-64 exige). O kernel do Linux não precisa ser compatível com ABI e, portanto, todo o código do kernel é compilado com -mno-red-zone.
Além disso, acessar a memória além do ponteiro da pilha não é perigoso se esse for o modo de operação esperado. É apenas perigoso e pode levar à corrupção quando não é planejado e inesperado. Quando o código emitido faz isso, ele sabe o que está fazendo.
%rsp
como ponteiro base de qualquer maneira.