GNU/Linux >> Linux Esercitazione >  >> Linux

Disabilitare le chiamate vssys in Linux

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

Se stai provando a ptrace sulle chiamate gettimeofday e non vengono visualizzate, quale fonte di ora sta utilizzando il sistema (pmtimer, acpi, tsc, hpet, ecc.). Mi chiedo se mi asseconderesti provando a forzare il tuo timer su qualcosa di più vecchio come pmtimer. È possibile che una delle tante ottimizzazioni specifiche del timer gtod stia causando l'evitamento delle chiamate ptrace, anche con vsyscall impostato su zero.


C'è un modo per disabilitare l'uso di vsyscalls/vDSO per un singolo processo o, se ciò non è possibile, per l'intero sistema operativo?

Si scopre che lì IS un modo per disabilitare efficacemente il collegamento di vDSO per un singolo processo senza disabilitarlo a livello di sistema utilizzando ptrace !

Tutto quello che devi fare è fermare il processo tracciato prima che ritorni da execve e rimuovi il AT_SYSINFO_EHDR voce dal vettore ausiliario (che viene direttamente dopo le variabili d'ambiente lungo la regione di memoria indicata in rsp ). PTRACE_EVENT_EXEC è un buon posto per farlo.

AT_SYSINFO_EHDR è ciò che il kernel utilizza per indicare al linker di sistema dove vDSO è mappato nello spazio degli indirizzi del processo. Se questa voce non è presente, ld sembra agire come se il sistema non avesse mappato un vDSO.

Si noti che questo in qualche modo non annulla la mappatura del vDSO dalla memoria dei processi, ma lo ignora semplicemente quando si collegano altre librerie condivise. Un programma dannoso sarà comunque in grado di interagire con esso se l'autore lo desidera davvero.

So che questa risposta è un po' in ritardo, ma spero che questa informazione risparmierà il mal di testa a qualche povera anima


Per i sistemi più recenti echo 0 > /proc/sys/kernel/vsyscall64 potrebbe non funzionare. In Ubuntu 16.04 vDSO può essere disabilitato a livello di sistema aggiungendo il parametro del kernel vdso=0 in /etc/default/grub sotto il parametro:GRUB_CMDLINE_LINUX_DEFAULT .

IMPORTANTE:Parametro GRUB_CMDLINE_LINUX_DEFAULT potrebbe essere sovrascritto da altri file di configurazione in /etc/default/grub.d/... , quindi ricontrolla quando aggiungere la tua configurazione personalizzata.


Linux
  1. Esempi di comandi di "spegnimento" in Linux

  2. Esempi di comandi resize2fs in Linux

  3. Localctl Esempi di comandi in Linux

  4. Alternativa a `memory.size()` di R in Linux?

  5. Sistema di accodamento Linux

Linux è un sistema operativo o un kernel?

Protezione di un sistema Linux ereditato

Introduzione di un amministratore di sistema Linux a cgroups

Documentare il tempo di attività del sistema in Linux

Ottimizzatore e monitoraggio del sistema Stacer Linux

Come elencare i servizi su Linux