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.