
Explicação
Existem dois tipos de espaço de endereço virtual e físico. No modelo físico(normalmente usado pelo kernel)a memória é limitada e cada endereço corresponde aos físicos.
O virtual é utilizado pelos processos. Não há limite(exceto aquele devido ao tamanho do ponteiro). Para obter mais memória o programa simplesmente solicita(ignorando qual valor pode ser solicitado). Cada endereço é mapeado para endereços físicos diferentes.
É assim que os processos são restritos no que podem ler da memória RAM.
O problema
O raciocínio é que as chamadas do sistema usam ring0, mas ao mesmo tempo(pelo menos no Linux)o estado do processo é atualizado para interrompível, sugerindo que as chamadas do sistema usam o espaço de endereço virtual.
Pelo que entendi, os anéis de CPU tratam de instruções privilegiadas, não de espaço de endereço(pois é relacionado ao MMU).
Então, se uma leitura fora do limite(devido a uma vulnerabilidade)ocorre durante a execução de uma chamada do sistema no código do kernel. Ele pode retornar memória de outros processos?
Responder1
O código do modo kernel pode fazer praticamente tudo o que quiser, incluindo espionar os espaços de endereço de vários processos.
Sim, o código do modo kernel usa espaço de endereço virtual. O núcleogerenciaespaço de endereço físico, mas isso não acontececorrer emespaço de endereço físico.
O modo de usuário não consegue ler nada da RAM porque não tem como afirmar endereços físicos.
Como o modo kernel é executado com a tradução de endereços habilitada, o código do modo kernel também pode afirmar apenas endereços virtuais. Mas o código do modo k pode configurar entradas da tabela de páginas para definir endereços virtuais que se traduzem em quaisquer endereços físicos que ele queira acessar.
Responder2
Essas chamadas de sistema invocadas pelo kernel usam espaço de endereço físico.
Essas chamadas de sistema invocadas por processos usam espaço de endereço virtual.