2016-12-07 2 views
-1

Je voudrais exécuter un mlockall sur un processus en temps réel to lock the memory pages qui n'a pas de privilèges root. Depuis l'utilisateur ulimit pour la mémoire verrouillée max est vraiment faible (et c'est ok pour des raisons de sécurité), je verrouiller la mémoire via un autre processus engendré par l'utilisateur root.`mlockall` à un autre processus

Malheureusement, mlockall a cette signature:

int mlockall(int flags); 

Ainsi, il ne fonctionne que si elle est appelée directement par le processus cible. Il existe un moyen (par exemple un autre appel système) de verrouiller la mémoire d'un autre processus? Quelque chose comme:

int mlockall(int flags, pid_t pid); 
+0

double possible de [LINUX: Comment verrouiller les pages d'un processus en mémoire] (http://stackoverflow.com/ questions/12520499/linux-how-to-lock-the-pages-of-a-process-in-memory) –

+0

Injecter du code avec gdb est vraiment une mauvaise solution, il vaudrait mieux avoir un syscall ou un autre mécanisme qui fait n'implique pas l'injection de code. – RicoRico

+0

Comment démarrer le processus en temps réel avec les privilèges nécessaires et utiliser une petite bibliothèque dynamique pour définir les limites de ressources, la priorité de processus et la mémoire de verrouillage, * et * abandonner les privilèges, avant que le processus réel 'main() ? Vous avez besoin d'un programme d'assistance (setuid) et de la bibliothèque dynamique, mais ils devraient être très simples à implémenter. Intéressé? –

Répondre

1

J'écris un nouvel appel système afin de combler l'écart.

Je joint le patch à la liste de diffusion du noyau mm, vous pouvez le trouver here