Skip to main content

Module process

Module process 

Source
Expand description

Wrappers de la famille process.

Cf. docs/specs/layer-0/family-process.md. Couvre l’identité (getpid, gettid), la création/attente (clone3, waitid, exit_group), l’exec et la redirection (execve, execveat, dup3, fchdir, chdir), les groupes/sessions, prctl (opérations individuelles), les rlimits, les capabilities et l’affinité CPU.

Les wrappers exécutent les syscalls Linux directement via core::arch::asm! ; la libc n’est pas dans le chemin d’appel (cf. CLAUDE.md : « variantes modernes préférées, syscalls non wrappés listés dans UNSUPPORTED.md »).

Modules§

fuzz_api
API de fuzzing pure (sans syscall) de la frontière de marshalling argv/envp (CStrArray). Le harnais cargo-fuzz (fuzz/fuzz_targets/fuzz_exec_argv.rs) y délègue ; l’oracle vit ici pour accéder aux internes de CStrArray (le tableau de pointeurs) tout en restant testé et couvert. Suit le pattern de [crate::io_uring::fuzz_api].

Structs§

CStrArray
Tableau de pointeurs C terminé par NULL, pour le marshalling d’argv / envp vers execve(2) / execveat(2).

Functions§

cap_ambient_clear_all
Vide totalement l’ensemble ambient du thread.
cap_ambient_is_set
Indique si cap est dans l’ensemble ambient.
cap_ambient_lower
Retire cap de l’ensemble ambient.
cap_ambient_raise
Ajoute cap à l’ensemble ambient du thread.
capget
Lit les capabilities du thread cible.
capset
Écrit les capabilities du thread cible.
chdir
Change le répertoire de travail courant du processus pour path (chdir(2)).
chroot
Change le répertoire racine du processus vers path (chroot(2)) — descellement additif ADR-085 pour la face libc. Confinement de processus (CAP_SYS_CHROOT requis).
clone3
Crée un nouveau processus via le syscall clone3(2).
clone_thread
Crée un thread (mémoire partagée, CLONE_VM) via clone3(2).
dup3
Duplique le descripteur old vers le numéro new (dup3(2)), en fermant atomiquement new s’il était ouvert. Retourne le nouveau descripteur, possédé ([OwnedFd], fermé au Drop).
execve
Remplace l’image mémoire du processus courant par l’exécutable situé à path, avec les arguments argv et l’environnement envp.
execve_prepared
Variante d’execve sans allocation : reçoit des tableaux de pointeurs argv/envp déjà construits (CStrArray).
execveat
Variante *at d’execve (préférée par ADR-021) : résout l’exécutable relativement à dirfd, ou — avec [ExecveatFlags::EMPTY_PATH] et path == c"" — exécute directement le binaire désigné par dirfd (un fd ouvert sur l’exécutable, typiquement avec O_PATH), éliminant toute race entre l’ouverture/vérification et l’exec.
exit_group
Termine immédiatement le processus appelant (tous ses threads) avec le code status, via le syscall child_exit(2).
fchdir
Change le répertoire de travail courant du processus pour celui référencé par le descripteur dir (fchdir(2)).
get_cpu_affinity
Lit l’affinité CPU courante d’une tâche (sched_getaffinity(2)) dans cpus (buffer fourni, zéro allocation). tid = None cible la tâche appelante.
get_dumpable
Retourne le mode dumpable actuel.
get_groups
Lit la liste courante des groupes supplémentaires (getgroups) dans le buffer fourni — zéro allocation — et retourne la sous-tranche remplie.
get_keep_caps
Indique si le bit keep_caps est positionné.
get_no_new_privs
Indique si le bit no_new_privs est positionné pour le processus.
get_parent_death_signal
Retourne le signal envoyé au processus à la mort du parent. Ok(None) si la notification est désactivée.
get_resgid
Lit les trois composantes GID réelle / effective / sauvegardée (getresgid) — vérification défensive (confirmer qu’on ne peut plus revenir en arrière).
get_resuid
Lit les trois composantes UID réelle / effective / sauvegardée (getresuid) — vérification défensive.
get_thread_name
Retourne le nom du thread courant.
getcwd
Écrit le répertoire courant (chemin absolu) dans buf et retourne la tranche d’octets correspondante, sans l’octet NUL terminal (getcwd(2)).
getpgid
Retourne le process group ID de pid (ou du processus courant si None).
getpid
Retourne le PID du processus appelant.
getppid
Retourne le PID du parent du processus appelant (getppid(2)).
getrlimit
Retourne la Rlimit courante du processus pour resource.
getrusage
Renseigne les statistiques de ressources (getrusage(2)) pour la cible [RusageWho] demandée.
getsid
Retourne le session ID de pid (ou du processus courant si None).
gettid
Retourne le TID du thread appelant.
pidfd_getfd
Duplique un FD ouvert dans le processus référencé par pidfd.
pidfd_open
Ouvre un pidfd qui référence le processus identifié par pid.
pidfd_send_signal
Envoie un signal au processus référencé par pidfd.
prlimit
prlimit64 : lit et/ou modifie atomiquement la Rlimit d’un processus.
sched_yield
Cède volontairement le CPU à un autre thread prêt (sched_yield(2)).
set_cpu_affinity
Fixe l’affinité CPU d’une tâche (sched_setaffinity(2)) : la tâche ne sera ordonnancée que sur les CPU présents dans cpus. tid = None cible la tâche appelante. Débloque air-thread::cpu_affinity (couche 1).
set_dumpable
Définit le mode dumpable du processus.
set_groups
Remplace la liste des groupes supplémentaires du processus (setgroups).
set_keep_caps
Définit le bit keep_caps : si vrai, les capabilities permitted sont conservées lors d’un changement d’UID effectif vers non-zéro.
set_no_new_privs
Active le bit no_new_privs du processus.
set_parent_death_signal
Définit le signal envoyé au processus courant à la mort de son parent.
set_resgid
Fixe real + effective + saved GID en un seul appel (setresgid).
set_resuid
Fixe real + effective + saved UID en un seul appel (setresuid).
set_thread_name
Définit le nom du thread (max 15 caractères + NUL).
set_tid_address
Enregistre l’adresse clear_child_tid du thread appelant et retourne son TID (set_tid_address(2)). À la fin du thread, le kernel écrit 0 à cette adresse et émet un FUTEX_WAKE dessus — primitif de join (cf. clone_thread et la famille futex).
set_timer_slack
Définit la « timer slack » du processus (nanosecondes).
setpgid
Place pid dans le process group pgid.
setrlimit
Définit la Rlimit courante du processus pour resource.
setsid
Crée une nouvelle session avec l’appelant comme session leader, et le place dans un nouveau process group dont il est le leader. Retourne le nouveau session ID.
umask
Fixe le masque de création de fichiers du processus et retourne l’ancien (umask(2)). Opération totale (ne peut pas échouer).
waitid
Attend un événement sur un processus enfant via le syscall waitid(2).