Scroll to navigation

PRCTL(2) Manuel du programmeur Linux PRCTL(2)

NOM

prctl - Opérations sur un processus

SYNOPSIS

#include <sys/prctl.h>

int prctl(int option, unsigned long arg2, unsigned long arg3,
          unsigned long arg4, unsigned long arg5);

DESCRIPTION

prctl() est invoqué avec un premier paramètre indiquant ce qu'il faut faire, (ses valeurs sont définies dans <linux/prctl.h>), et des paramètres supplémentaires dont la signification dépend du premier paramètre. Celui-ci peut être :

Renvoyer (en résultat de fonction) 1 si la capacité indiquée par arg2 est présente dans la limitation de capacités du thread appelant ou 0 si elle ne l'est pas. Les constantes des capacités sont définies dans <linux/capability.h>. L'ensemble des capacités liées contrôle si le processus peut recevoir la capacité par un ensemble de capacités autorisées pour un fichier lors d'un appel futur à execve(2).

Si la capacité indiquée dans arg2 n'est pas valable, alors l'appel échoue avec l'erreur EINVAL.

Si le thread appelant a la capacité CAP_SETPCAP, alors enlever la capacité indiquée par arg2 dans l'ensemble de limitation de capacités du thread appelant. Les fils du thread appelant hériteront de cette nouvelle limitation de capacités réduite.

L'appel échoue avec l'erreur EPERM si le thread appelant n'a pas la capacité CAP_SETPCAP ; ou avec l'erreur EINVAL si arg2 ne représente pas une capacité correcte ; ou avec l'erreur EINVAL si les capacités de fichier ne sont pas activée dans le noyau, auquel cas les limitations ne sont pas prises en charge par le noyau.

Fixer l'attribut déterminant si un fichier core est produit lorsque le processus reçoit un signal dont le comportement par défaut est de produire un fichier core. (Normalement cet attribut est validé pour un processus par défaut, mais est effacé à l'exécution d'un programme Set-UID ou Set-GID ainsi que par divers appels système manipulant des UID et GID). Dans les noyaux jusqu'à 2.6.12 inclus, arg2 doit valoir 0 (pas de fichier core) ou 1 (fichier core possible). Entre les noyaux 2.6.13 et 2.6.17, la valeur 2 était également autorisée ; elle permettait à un binaire qui ne produirait normalement pas de fichier core d'en créer un uniquement lisible par root ; cette fonctionnalité a été supprimée pour des raisons de sécurité. (Voir aussi la description de /proc/sys/fs/suid_dumpable dans proc(5).)
Renvoyer (en résultat de fonction) l'état actuel de l'attribut de création de fichier core du processus appelant.
Fixer le boutisme (endianness) du processus appelant à la valeur donnée dans arg2, qui doit être l'une des valeurs suivantes : PR_ENDIAN_BIG, PR_ENDIAN_LITTLE, ou PR_ENDIAN_PPC_LITTLE (PowerPC pseudo petit boutiste).
Renvoyer le boutisme (endianness) du processus appelant, dans l'emplacement pointé par (int *) arg2.
Fixer les bits de contrôle de l'émulation de FPU à arg2. Passer PR_FPEMU_NOPRINT pour émuler silencieusement les opérations flottantes, ou PR_FPEMU_SIGFPE pour ne pas émuler les opérations flottantes, et envoyer SIGFPE.
Renvoyer les bits de contrôle de l'émulation de FPU, dans l'emplacement pointé par (int *) arg2.
Fixer le mode d'exception flottante à arg2. Passer la valeur PR_FP_EXC_SW_ENABLE pour utiliser FPEXC pour activer les exceptions flottantes, PR_FP_EXC_DIV pour les divisions flottantes par zéro, PR_FP_EXC_OVF pour les dépassements de capacité vers le haut, PR_FP_EXC_UND pour les dépassements de capacité vers le bas, PR_FP_EXC_RES pour les résultats flottants inexacts, PR_FP_EXC_INV pour les opérations flottantes invalides, PR_FP_EXC_DISABLED pour désactiver les exceptions flottantes, PR_FP_EXC_NONRECOV pour le mode d'exceptions asynchrone non récupérable, PR_FP_EXC_ASYNC pour le mode d'exceptions asynchrone récupérable, PR_FP_EXC_PRECISE pour le mode d'exception précis.
Renvoyer le mode d'exception flottante, dans l'emplacement pointé par (int *) arg2.
Fixer l'état de l'attribut de conservation des capacités du thread, qui détermine si les ensembles de capacités effectives et disponibles sont effacés lorsqu'on modifie les UID réel, effectif et sauvé du thread de manière à ce que tous soient non nuls alors qu'auparavant l'un au moins était nul. (Par défaut les ensembles sont effacés). arg2 doit valoir 0 (les capacités sont effacées) ou 1 (capacités conservées). Cette valeur est remise à zéro pour les appels ultérieurs à execve(2).
Renvoyer (en résultat de fonction) l'état actuel de l'attribut de conservation des capacités du thread appelant.
Fixer le nom du processus appelant, en utilisant la valeur de l'emplacement pointé par (char *) arg2. Le nom peut avoir jusqu'à 16 octets de long et doit être terminé par un caractère nul s'il est plus petit.
Renvoyer le nom du processus appelant, dans le tampon pointé par (char *) arg2. Le tampon doit être suffisamment grand pour contenir jusqu'à 16 octets ; la chaîne sera terminée par un caractère nul si elle est plus petite.
Configurer le signal de mort du père du processus appelant avec la valeur arg2 (qui peut être un numéro de signal dans l'intervalle 1..maxsig, ou être nul pour effacer le signal). Il s'agit du numéro du signal que le processus appelant recevra si son père se termine. Cette valeur est effacée pour le fils d'un fork(2).
Renvoyer la valeur actuelle du signal de mort du processus père, dans l'emplacement pointé par (int *) arg2.
Configurer le mode de traitement sécurisé pour le thread appelant. Dans l'implémentation actuelle, arg2 doit valoir 1. Quand le mode de traitement sécurisé a été mis à 1, les seuls appels système permis pour le thread sont read(2), write(2), _exit(2) et sigreturn(2). Les autres appels système provoque la réception d'un signal SIGKILL. Le mode de traitement sécurisé est utile pour les applications de traitement numérique qui peuvent avoir besoin d'exécuter des instructions ne provenant pas d'une source de confiance, lues à partir d'un tuyau (« pipe ») ou d'une socket. Cette opération n'est disponible que si le noyau a été configuré avec l'option CONFIG_SECCOMP activée.
Renvoyer le mode de traitement sécurisé du thread appelant. Ce n'est pas très utile avec l'implémentation actuelle (le mode vaut toujours 1), mais pourrait être utile dans le future pour d'autres modes : si l'appelant n'est pas dans un mode de traitement sécurisé, cette opération renvoie 0 ; si l'appelant est dans le mode de traitement sécurisé, alors l'appel prctl() provoquera l'envoie d'un signal SIGKILL au processus. Cette opération n'est disponible que si le noyau a été configuré avec l'option CONFIG_SECCOMP activée.
Configurer l'attribut « securebits » du thread appelant à la valeur fournie par arg2. Voir capabilities(7).
Renvoyer (en résultat de fonction) l'état actuel de l'attribut « securebits » du thread appelant. Voir capabilities(7).
Permet de choisir la méthode de mesure du temps du processus à utiliser, en passant dans arg2 soit PR_TIMING_STATISTICAL (méthode statistique traditionnelle) ou PR_TIMING_TIMESTAMP (méthode exacte utilisant des horodatages). PR_TIMING_TIMESTAMP n'est pas implémenté pour l'instant (l'utilisation de ce mode renverra l'erreur EINVAL).
Renvoyer (en résultat de fonction) quelle méthode de mesure du temps du processus est utilisée actuellement.
Configurer l'état de l'attribut qui indique si le compteur d'horodatage peut être lu par le processus. Utilisez PR_TSC_ENABLE pour arg2 permet d'autoriser les lectures ou PR_TSC_SIGSEGV pour produire un SIGSEGV quand le processus essaie de lire le compteur d'horodatage.
Renvoyer, dans l'emplacement pointé par (int *) arg2, l'état de l'attribut qui indique si le compteur d'horodatage peut être lu.
(Seulement sur : ia64, depuis Linux 2.3.48 ; parisc, depuis Linux 2.6.15 ; PowerPC, depuis Linux 2.6.18 ; Alpha, depuis Linux 2.6.22) Fixer les bits de contrôle pour les accès non alignés à arg2. La valeur PR_UNALIGN_NOPRINT signifie que les accès non alignés en espace utilisateurs sont silencieusement corrigés, et PR_UNALIGN_SIGBUS cause l'envoi de SIGBUS lors d'un accès non aligné.
(Voir PR_SET_UNALIGN pour les informations sur les versions et les architectures) Renvoyer les bits de contrôle des accès non alignés, dans l'emplacement pointé par (int *) arg2.

VALEUR RENVOYÉE

En cas de réussite, PR_GET_DUMPABLE, PR_GET_KEEPCAPS, PR_CAPBSET_READ, PR_GET_TIMING, PR_GET_SECUREBITS et (si elle rend la main) PR_GET_SECCOMP renvoient les valeurs positives décrites ci-dessus. Toute autre valeur d'option renvoie 0en cas de réussite. En cas d'échec, -1 est renvoyé et errno contient le code d'erreur.

ERREURS

arg2 est une adresse non valable.
La valeur de option n'est pas reconnue.
arg2 n'est pas une valeur valable pour cette option.
option vaut PR_SET_SECCOMP ou PR_SET_SECCOMP et le noyau n'a pas été configuré avec CONFIG_SECCOMP.
option vaut PR_SET_SECUREBITS et l'appelant n'a pas la capacité CAP_SETPCAP ou a essayé d'enlever un attribut de « verrouillage » ou a essayer de positionner un attribut pour lequel l'attribut de verrouillage était positionné (voir capabilities(7)).
option vaut PR_SET_KEEPCAPS et l'attribut SECURE_KEEP_CAPS_LOCKED de l'appelant est positionné (voir capabilities(7)).
option vaut PR_CAPBSET_DROP et l'appelant n'a pas la capacité CAP_SETPCAP.

VERSIONS

L'appel système prctl() a été introduit dans Linux 2.1.57.

CONFORMITÉ

Cet appel système est spécifique à Linux. IRIX dispose d'un appel système prctl() (également introduit dans Linux 2.1.44 sur l'architecture MIPS sous le nom irix_prctl), dont le prototype est

ptrdiff_t prctl(int option, int arg2, int arg3);

et les options permettent de d'obtenir le nombre maximum de processus par utilisateur, le nombre maximal de processeurs utilisables par un processus, vérifier si un processus est bloqué, lire ou fixer la taille des piles,...

VOIR AUSSI

signal(2), core(5)

COLOPHON

Cette page fait partie de la publication 3.23 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <URL:http://alioth.debian.org/projects/perkamon/>.

Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-l10n-fr@lists.alioth.debian.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».

16 juillet 2008 Linux