fexecve(3) Library Functions Manual fexecve(3) NOM fexecve - Executer un programme indique par un descripteur de fichier BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int fexecve(int fd, char *const argv[], char *const envp[]); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : fexecve() : Depuis la glibc 2.10 : _POSIX_C_SOURCE >= 200809L Avant la glibc 2.10 : _GNU_SOURCE DESCRIPTION fexecve() effectue la meme tache que execve(2), excepte que le fichier a executer est indique a l'aide d'un descripteur de fichier fd au lieu d'un chemin. Le descripteur de fichier fd doit etre ouvert en lecture seule (O_RDONLY) ou avec le drapeau O_PATH, et l'appelant doit avoir les permissions necessaires pour executer le fichier lie au descripteur de fichier. VALEUR RENVOYEE En cas de reussite, la fonction fexecve() ne rend pas la main. En cas d'erreur, la fonction renvoie -1 et errno est definie avec le code d'erreur correspondant. ERREURS Les erreurs sont les memes que pour execve(2), avec en plus : EINVAL fd n'est pas un descripteur de fichier valable, ou argv est NULL, ou envp est NULL. ENOENT Le drapeau close-on-exec est defini pour le descripteur de fichier fd et fd est associe a un script. Voir BOGUES. ENOSYS Le noyau ne prend pas en charge l'appel systeme execveat(2) et l'acces a l'arborescence /proc a echoue. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |fexecve() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ STANDARDS POSIX.1-2008. HISTORIQUE glibc 2.3.2. Sous Linux avec les versions 2.26 et anterieures de la glibc, fexecve() est implementee en utilisant l'arborescence proc(5) ; /proc doit donc etre montee et disponible au moment de l'appel. Depuis la version 2.27 de la glibc et si le noyau prend en charge l'appel systeme execveat(2), fexecve() est implemente en utilisant cet appel systeme, ce qui a pour avantage de ne pas necessiter le montage de /proc. NOTES L'idee derriere fexecve() est de permettre a l'appelant de verifier (avec une somme de controle) le contenu d'un executable avant de l'executer. Juste ouvrir le fichier et calculer la somme de controle du contenu avant de faire un execve() ne suffirait pas puisque, entre les deux etapes, la partie chemin du nom du fichier ou le nom de fichier lui-meme pourraient avoir ete modifies (par exemple en modifiant la cible d'un lien symbolique). fexecve() n'attenue pas le probleme lie au fait que le contenu d'un fichier pourrait etre modifie entre le calcul de la somme de controle et l'appel a fexecve(). Pour cela, la solution consiste a s'assurer que les permissions sur le fichier l'empechent d'etre modifie par un utilisateur malveillant. L'idee sous-jacente a l'utilisation de fexecve() consiste a definir le drapeau close-on-exec pour le descripteur de fichier fd de facon a ce que ce dernier ne se propage pas vers le programme execute. Cette approche est naturelle pour deux raisons. Premierement, elle evite une consommation inutile de descripteurs de fichiers (normalement, le programme execute n'a nul besoin d'un descripteur de fichier associe a lui-meme). Deuxiemement, si fexecve() est utilise de maniere recursive, l'emploi du drapeau close-on-exec empeche l'epuisement des descripteurs de fichiers disponibles qui pourrait decouler du fait que chaque etape du traitement recursif provoque la transmission d'un ou plusieurs descripteurs de fichiers au nouveau programme (voir tout de meme BOGUES a ce sujet). BOGUES Si le descripteur de fichier fd est associe a un script (autrement dit un fichier texte executable dont la premiere ligne qui commence par les caracteres #! designe l'interpreteur du script), et si le drapeau close-on-exec a ete defini pour le descripteur de fichier fd, fexecve() echoue avec un code d'erreur ENOENT. Cette erreur est due au fait qu'au moment ou l'interpreteur du script s'execute, le descripteur de fichier fd a deja ete ferme a cause de la presence du drapeau close-on-exec. C'est pourquoi le drapeau close-on-exec ne peut pas etre defini pour le descripteur de fichier fd si ce dernier est associe a un script, ce qui provoquerait les problemes decrits dans NOTES. VOIR AUSSI execve(2), execveat(2) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Lucien Gentis Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 fexecve(3)