GNU/Linux >> Tutoriales Linux >  >> Linux

Deshabilitar vsyscalls en Linux

Prueba echo 0 > /proc/sys/kernel/vsyscall64

Si está tratando de realizar un seguimiento de las llamadas gettimeofday y no aparecen, qué fuente de tiempo está utilizando el sistema (pmtimer, acpi, tsc, hpet, etc.). Me pregunto si me seguirías la corriente tratando de forzar tu temporizador a algo más antiguo como pmtimer. Es posible que una de las muchas optimizaciones específicas del temporizador gtod esté causando que se eviten las llamadas de ptrace, incluso con vsyscall configurado en cero.


¿Hay alguna forma de deshabilitar el uso de vsyscalls/vDSO para un solo proceso o, si eso no es posible, para todo el sistema operativo?

Resulta que hay ES una forma de deshabilitar efectivamente la vinculación de vDSO para un solo proceso sin deshabilitarlo en todo el sistema usando ptrace !

Todo lo que tiene que hacer es detener el proceso rastreado antes de que regrese de execve y elimina el AT_SYSINFO_EHDR entrada del vector auxiliar (que viene directamente después de las variables de entorno a lo largo de la región de memoria apuntada en rsp ). PTRACE_EVENT_EXEC es un buen lugar para hacer esto.

AT_SYSINFO_EHDR es lo que usa el kernel para decirle al enlazador del sistema dónde se asigna vDSO en el espacio de direcciones del proceso. Si esta entrada no está presente, ld parece actuar como si el sistema no hubiera asignado un vDSO.

Tenga en cuenta que esto de alguna manera no desasigna el vDSO de la memoria de sus procesos, simplemente lo ignora al vincular otras bibliotecas compartidas. Un programa malicioso aún podrá interactuar con él si el autor realmente lo desea.

Sé que esta respuesta llega un poco tarde, pero espero que esta información le ahorre un dolor de cabeza a alguna pobre alma


Para sistemas más nuevos echo 0 > /proc/sys/kernel/vsyscall64 podría no funcionar En Ubuntu 16.04, vDSO se puede deshabilitar en todo el sistema agregando el parámetro del kernel vdso=0 en /etc/default/grub bajo el parámetro:GRUB_CMDLINE_LINUX_DEFAULT .

IMPORTANTE:Parámetro GRUB_CMDLINE_LINUX_DEFAULT puede ser sobrescrito por otros archivos de configuración en /etc/default/grub.d/... , así que verifique dos veces cuándo agregar su configuración personalizada.


Linux
  1. Cómo cambiar el nombre de host en Linux

  2. Ejemplos de comandos "apagar" en Linux

  3. Ejemplos de comandos localectl en Linux

  4. ¿Alternativa a `memory.size()` de R en Linux?

  5. Sistema de colas de Linux

¿Linux es un sistema operativo o un kernel?

Protección de un sistema Linux heredado

La introducción de un administrador de sistemas de Linux a cgroups

Documentación del tiempo de actividad del sistema en Linux

Optimizador y monitoreo del sistema Stacer Linux

Cómo enumerar servicios en Linux