cria um vdso no linux [closed]

1

Atualmente, estou tentando implementar meu próprio VDSO. Eu vi este tutorial que explica como fazer isso.

No entanto, este tutorial é feito para o Linux 2.6.xe eu gostaria de usá-lo no Linux 4.8.x. Mas a estrutura arquitetônica do vdso mudou muito desde essa versão (por exemplo, vextern.h foi suprimida) e não sei como adaptá-la para que funcione.

Você sabe como eu poderia adaptar este tutorial para um kernel recente ou onde posso encontrar recursos suficientes sobre o vdso para implementar o meu próprio?

Além disso, você sabe se posso simplesmente recriar o comportamento de um syscall arbitrário como um VDSO? Eu sei que é uma ideia muito ruim do ponto de vista da segurança (e o ganho de desempenho é insignificante)

    
por Maxime B. 20.11.2018 / 13:35

1 resposta

1

Não sei se há um tutorial atualizado no mesmo estilo, mas as alterações são limitadas:

  • arch/x86/vdso foi movido para arch/x86/entry/vdso ;
  • as declarações de variáveis foram muito simplificadas .

O último significa que você só precisa declarar sua variável uma vez, em arch/x86/include/asm/vvar.h , em um deslocamento fixo, com a macro DECLARE_VVAR . Para defini-lo, use a macro DEFINE_VVAR ; para acessá-lo, use a macro VVAR . O commit vinculado acima possui vários exemplos (todos os usos existentes de variáveis compartilhadas).

Você não pode recriar o comportamento de um syscall arbitrário no vDSO, pelo menos não sem chamar o kernel no modo kernel. O vDSO só é realmente útil para chamadas que podem ser manipuladas no espaço do usuário; não há muitos desses.

    
por 20.11.2018 / 15:19