pkey_alloc, pkey_free - allouer ou libérer une clé de protection
Bibliothèque C standard (
libc,
-lc)
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <sys/mman.h>
int pkey_alloc(unsigned int flags, unsigned int access_rights);
int pkey_free(int pkey);
pkey_alloc() alloue une clé de protection (pkey) et lui permet
d'être transmise à
pkey_mprotect(2).
L'
argument de
pkey_alloc() est réservé à une
utilisation future et doit toujours valoir
0 actuellement.
Le paramètre
access_rights de
pkey_alloc() peut contenir
zéro ou plusieurs opérations désactivées :
- PKEY_DISABLE_ACCESS
- Désactiver tous les accès aux données
de la mémoire gérée par la clé de protection
renvoyée.
- PKEY_DISABLE_WRITE
- Désactiver l'accès en écriture
à la mémoire gérée par la clé de
protection renvoyée.
pkey_free() libère une clé de protection et la rend
disponible pour de futures allocations. Après qu'une clé de
protection a été libérée, elle ne peut plus
être utilisée dans aucune opération de protection
liée à une clé.
Une application ne doit pas appeler
pkey_free() sur une clé de
protection qui a été affectée à une plage
d'adresses par
pkey_mprotect(2) et en cours d'utilisation. Dans ce cas,
le comportement n'est pas défini et peut aboutir à une erreur.
En cas de succès,
pkey_alloc() renvoie une valeur positive de
clé de protection. En cas de succès,
pkey_free() renvoie
zéro. En cas d'erreur,
-1 est renvoyé et
errno est
défini pour préciser l'erreur.
- EINVAL
-
pkey, flags ou access_rights n'est pas
valable.
- ENOSPC
- (pkey_alloc()) Toutes les clés de protection
disponibles pour le processus actuel ont été
allouées. Le nombre de clés disponibles est
spécifique à l'architecture et à
l'implémentation, il peut être réduit par une
utilisation interne du noyau de certaines clés. Il y a actuellement
15 clés disponibles pour les programmes de l'utilisateur sur
x86.
- Cette erreur sera aussi renvoyée si le processeur ou
le système d'exploitation ne gère pas les clés de
protection. Les applications doivent toujours être prêtes
à gérer cette erreur, puisque des facteurs hors de
contrôle de l'application peuvent réduire le nombre de
clés disponibles.
pkey_alloc() et
pkey_free() ont été ajoutés
à Linux 4.9 ; la prise en charge de la librairies a
été ajoutée dans la glibc 2.27.
Les appels système
pkey_alloc() et
pkey_free() sont
spécifiques à Linux.
Il est toujours sûr d'appeler
pkey_alloc(), que le système
d'exploitation gère ou non les clés de protection. Il peut
être utilisé à la place de tout autre mécanisme de
détection de gestion de pkey et il échouera simplement avec
l'erreur
ENOSPC si le système d'exploitation ne gère pas
pkey.
Le noyau s'assure que le contenu des registres de droits du matériel
(PKRU) ne sera conservé que pour les clés de protection
allouées. À chaque fois qu'une clé n'est plus
allouée (soit avant le premier appel renvoyant la clé à
partir de
pkey_alloc(), soit après sa libération par
pkey_free()), le noyau peut effectuer des modifications arbitraires
dans certaines parties du registre des droits concernant l'accès
à cette clé.
Consultez
pkeys(7).
pkey_mprotect(2),
pkeys(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Jean-Philippe MENGUAL <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]