.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1995 Michael Chastain (mec@duracef.shout.net), 22 July 1995. .\" Copyright (c) 2015 Andrew Lutomirski .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH modify_ldt 2 "10 novembre 2022" "Pages du manuel de Linux 6.03" .SH NOM modify_ldt \- Lire/écrire une entrée de LDT par processus .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP /* Définition de \fBstruct user_desc\fP */ \fB#include \fP /* Definition des constantes \fBSYS_*\fP */ \fB#include \fP .PP \fBint syscall(SYS_modify_ldt, int \fP\fIfunc\fP\fB, void \fP\fIptr\fP\fB[.\fP\fIbytecount\fP\fB],\fP \fB unsigned long \fP\fIbytecount\fP\fB);\fP .fi .PP \fINote\fP\ : la glibc ne fournit pas d'enveloppe autour de \fBmodify_ldt\fP(), nécessitant l'utilisation de \fBsyscall\fP(2). .SH DESCRIPTION \fBmodify_ldt\fP() lit ou écrit la table des descripteurs locaux (Local Descriptor Table –\ Table Locale des Descripteurs) du processus. La LDT est une table de descripteurs de segments auxquels peut se référer le code utilisateur. Linux permet aux processus de configurer une LDT par processus (par mm). Pour plus d'informations sur la LDT, voir le manuel du développeur d'Intel ou le manuel de programmation de l'architecture AMD. .PP Quand \fIfunc\fP vaut \fB0\fP, \fBmodify_ldt\fP() lit la LDT dans la mémoire vers laquelle pointe \fIptr\fP. Le nombre d'octets lus est le minimum entre \fIbytecount\fP et la vraie taille de la LDT, bien que le noyau puisse agir comme si la LDT était complétée par des octets zéro supplémentaires. En cas de succès, \fBmodify_ldt\fP() renverra le nombre d'octets lus. .PP Quand \fIfunc\fP vaut \fB1\fP ou \fB0x11\fP, \fBmodify_ldt\fP() modifie l’entrée de la LDT indiquée par \fIptr\->entry_number\fP. \fIptr\fP pointe sur une structure \fIuser_desc\fP et \fIbytecount\fP doit être égal à la taille de cette structure. .PP La structure \fIuser_desc\fP est déclarée dans \fI\fP comme suit\ : .PP .in +4n .EX struct user_desc { unsigned int entry_number; unsigned int base_addr; unsigned int limit; unsigned int seg_32bit:1; unsigned int contents:2; unsigned int read_exec_only:1; unsigned int limit_in_pages:1; unsigned int seg_not_present:1; unsigned int useable:1; }; .EE .in .PP Sous Linux 2.4 et les versions précédentes, cette structure s'appelait \fImodify_ldt_ldt_s\fP. .PP Le champ \fIcontents\fP est le type de segment (données, données allongées, code non conforme ou code conforme). Les autres champs correspondent à leur description dans le manuel du processeur, bien que \fBmodify_ldt\fP() ne puisse pas positionner le bit «\ access\ » défini par le matériel et décrit dans le manuel du processeur. .PP Une structure \fIuser_desc\fP est considérée comme «\ empty\ » si \fIread_exec_only\fP et \fIseg_not_present\fP sont positionnés sur \fB1\fP et tous les autres champs valent \fB0\fP. Une entrée de LDT peut être effacée en la positionnant sur une structure \fIuser_desc\fP «\ empty\ » ou, si \fIfunc\fP vaut \fB1\fP, en positionnant à la fois \fIbase\fP et \fIlimit\fP sur \fB0\fP. .PP Un segment de code conforme (c'est\-à\-dire avec \fIcontents==3\fP) sera rejeté si \fIfunc\fP vaut \fB1\fP ou si \fIseg_not_present\fP vaut \fB0\fP. .PP Quand \fIfunc\fP vaut \fB2\fP, \fBmodify_ldt\fP() lira des zéros. Cela semble être un reliquat de Linux 2.4. .SH "VALEUR RENVOYÉE" S'il réussit \fBmodify_ldt\fP() renvoie soit le nombre d'octets lus soit \fB0\fP (écriture). En cas d'échec \fB\-1\fP est renvoyé et \fIerrno\fP contient le code d'erreur. .SH ERREURS .TP \fBEFAULT\fP \fIptr\fP pointe en dehors de l'espace d'adressage accessible. .TP \fBEINVAL\fP \fIptr\fP vaut \fB0\fP ou \fIfunc\fP vaut \fB1\fP et \fIbytecount\fP n'est pas égal à la taille de la structure \fIuser_desc\fP, ou bien \fIfunc\fP vaut \fB1\fP ou \fB0x11\fP et la nouvelle entrée de la LDT a des valeurs illégales. .TP \fBENOSYS\fP \fIfunc\fP ne vaut ni \fB0\fP, ni \fB1\fP, ni \fB2\fP, ni \fB0x11\fP. .SH STANDARDS Cet appel système est spécifique à Linux et ne doit pas être employé dans des programmes destinés à être portables. .SH NOTES \fBmodify_ldt\fP() ne doit pas être utilisé pour une mémoire locale de thread, car il ralentit les changements de contexte et ne prend en charge qu'un nombre limité de threads. Les bibliothèques de segmentation de processus (threading)) devraient plutôt utiliser \fBset_thread_area\fP(2) ou \fBarch_prctl\fP(2), sauf sur des noyaux très anciens qui ne gèrent pas ces appels système. .PP L'utilisation normale de \fBmodify_ldt\fP() est d'exécuter du code 16 bits basique ou 32 bits segmenté. Cependant, tous les noyaux ne permettent pas à des segments 16\ bits d'être installés. .PP Même sur les noyaux 64 bits, \fBmodify_ldt\fP() ne peut pas être utilisé pour créer un segment de code en mode long (c'est\-à\-dire 64 bits). Le champ «\ lm\ » non documenté dans \fIuser_desc\fP n'est pas utile et, malgré son nom, n'aboutit pas à un segment en mode long. .SH BOGUES .\" commit e30ab185c490e9a9381385529e0fd32f0a399495 Sur les noyaux 64 bits antérieurs à Linux 3.19, le positionnement du bit «\ lm\ » dans \fIuser_desc\fP empêche le descripteur d'être considéré comme vide. Garder en tête que le bit «\ lm\ » n'existe pas dans les en\-têtes 32\ bits mais ces noyaux bogués verront encore ce bit même s'il est positionné dans un processus 32 bits. .SH "VOIR AUSSI" \fBarch_prctl\fP(2), \fBset_thread_area\fP(2), \fBvm86\fP(2) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .