Man page - vdso(7)
Packages contains this manual
- shm_overview(7)
- nss(5)
- proc_mtrr(5)
- intro(7)
- tcp(7)
- iso_8859-9(7)
- armscii-8(7)
- proc_kpagecount(5)
- initrd(4)
- mouse(4)
- proc_stat(5)
- x25(7)
- proc_interrupts(5)
- fifo(7)
- repertoiremap(5)
- icmp(7)
- futex(7)
- feature_test_macros(7)
- lp(4)
- bpf-helpers(7)
- epoll(7)
- proc_sys_dev(5)
- namespaces(7)
- proc_sysrq-trigger(5)
- proc_bus(5)
- cp1251(7)
- proc_pid_maps(5)
- proc_sys_vm(5)
- proc_pid_projid_map(5)
- st(4)
- proc_pid(5)
- issue(5)
- pid_namespaces(7)
- unicode(7)
- inode(7)
- hosts.equiv(5)
- iso-8859-13(7)
- proc_fb(5)
- proc_modules(5)
- proc_pid_autogroup(5)
- keyrings(7)
- sysvipc(7)
- proc_kmsg(5)
- cgroups(7)
- latin6(7)
- proc_pid_uid_map(5)
- unix(7)
- proc_pid_io(5)
- pts(4)
- packet(7)
- ld-linux.so(8)
- tzselect(8)
- iconv(1)
- proc_pid_syscall(5)
- proc_pid_net(5)
- proc_pid_pagemap(5)
- tty(4)
- proc_profile(5)
- standards(7)
- proc_pid_mounts(5)
- filesystems(5)
- iso-8859-15(7)
- locale(5)
- iso_8859_3(7)
- xattr(7)
- iso-8859-2(7)
- proc_uptime(5)
- persistent-keyring(7)
- credentials(7)
- proc_pid_timers(5)
- utmpx(5)
- vcsa(4)
- proc_pid_exe(5)
- proc_net(5)
- proc_timer_stats(5)
- ip(7)
- proc_pid_fd(5)
- ptmx(4)
- user_namespaces(7)
- resolv.conf(5)
- url(7)
- iso_8859_5(7)
- iso_8859-8(7)
- urn(7)
- process-keyring(7)
- proc_pid_auxv(5)
- proc_ksyms(5)
- proc_ide(5)
- veth(4)
- ldd(1)
- proc_swaps(5)
- landlock(7)
- proc_vmstat(5)
- system_data_types(7)
- cp1252(7)
- lirc(4)
- proc_kpageflags(5)
- random(7)
- precedence(7)
- cpuset(7)
- proc_pid_ns(5)
- acct(5)
- latin4(7)
- proc_pid_cgroup(5)
- proc_cpuinfo(5)
- iso_8859-2(7)
- proc_keys(5)
- charsets(7)
- pldd(1)
- proc_pid_stat(5)
- rtnetlink(7)
- netlink(7)
- ram(4)
- mem(4)
- iso-8859-6(7)
- proc_key-users(5)
- iso_8859_15(7)
- fanotify(7)
- proc_sys_net(5)
- sysfs(5)
- math_error(7)
- latin1(7)
- proc_pid_root(5)
- nptl(7)
- proc_cgroups(5)
- proc_iomem(5)
- proc_pid_statm(5)
- sem_overview(7)
- hier(7)
- full(4)
- proc_pid_status(5)
- proc_pid_cwd(5)
- proc_pid_cpuset(5)
- proc_scsi(5)
- uri(7)
- proc_diskstats(5)
- iso_8859_6(7)
- latin2(7)
- latin5(7)
- man-pages(7)
- ld.so(8)
- uts_namespaces(7)
- proc_pid_mountstats(5)
- intro(3)
- proc_pid_seccomp(5)
- proc_pid_wchan(5)
- attributes(7)
- symlink(7)
- mount_namespaces(7)
- charmap(5)
- tis-620(7)
- iso-8859-10(7)
- getent(1)
- proc_buddyinfo(5)
- ttytype(5)
- rtc(4)
- proc_malloc(5)
- suffixes(7)
- sln(8)
- signal(7)
- proc_sys_abi(5)
- signal-safety(7)
- time_namespaces(7)
- proc_pid_comm(5)
- raw(7)
- gai.conf(5)
- proc_crypto(5)
- locale(1)
- iso-8859-3(7)
- motd(5)
- proc_meminfo(5)
- iso-8859-8(7)
- protocols(5)
- proc_pid_map_files(5)
- pthreads(7)
- null(4)
- proc(5)
- zdump(8)
- socket(7)
- proc_sys_kernel(5)
- ddp(7)
- memusagestat(1)
- hd(4)
- iso-8859-14(7)
- shells(5)
- pipe(7)
- glob(7)
- proc_self(5)
- network_namespaces(7)
- utmp(5)
- proc_kcore(5)
- nsswitch.conf(5)
- sd(4)
- iso-8859-5(7)
- iso_8859_16(7)
- man(7)
- iso_8859-6(7)
- dir_colors(5)
- mq_overview(7)
- vsock(7)
- ascii(7)
- thread-keyring(7)
- fs(5)
- proc_pid_attr(5)
- proc_sys_debug(5)
- proc_sys(5)
- proc_pid_cmdline(5)
- pty(7)
- services(5)
- cgroup_namespaces(7)
- securetty(5)
- netdevice(7)
- iso_8859_13(7)
- host.conf(5)
- proc_pid_setgroups(5)
- proc_slabinfo(5)
- sock_diag(7)
- iso_8859-14(7)
- iso-8859-11(7)
- iso_8859_11(7)
- operator(7)
- regex(7)
- wavelan(4)
- proc_sys_fs(5)
- nologin(5)
- proc_pci(5)
- koi8-r(7)
- erofs(5)
- intro(2)
- utf8(7)
- proc_kallsyms(5)
- proc_sysvipc(5)
- queue(7)
- proc_sys_sunrpc(5)
- intro(5)
- latin8(7)
- mtrace(1)
- ipc_namespaces(7)
- dsp56k(4)
- iso_8859_4(7)
- proc_pid_smaps(5)
- proc_cmdline(5)
- rpc(5)
- proc_tty(5)
- proc_version(5)
- smartpqi(4)
- proc_pid_timerslack_ns(5)
- aio(7)
- session-keyring(7)
- resolver(5)
- slabinfo(5)
- wtmp(5)
- iso_8859_9(7)
- proc_locks(5)
- mailaddr(7)
- proc_pid_oom_score(5)
- kmem(4)
- iconvconfig(8)
- iso_8859-7(7)
- glibc(7)
- hostname(7)
- proc_thread-self(5)
- ipv6(7)
- iso_8859_7(7)
- proc_kpagecgroup(5)
- core(5)
- time(7)
- units(7)
- proc_dma(5)
- loop(4)
- address_families(7)
- zero(4)
- intro(4)
- procfs(5)
- iso_8859-4(7)
- vdso(7)
- tmpfs(5)
- iso-8859-16(7)
- iso_8859_10(7)
- user-session-keyring(7)
- libc(7)
- proc_fs(5)
- koi8-u(7)
- latin3(7)
- proc_tid_children(5)
- proc_pid_limits(5)
- proc_pid_coredump_filter(5)
- iso_8859-15(7)
- arp(7)
- urandom(4)
- iso_8859-10(7)
- hpsa(4)
- proc_pid_environ(5)
- boot(7)
- ftm(7)
- ld-linux(8)
- proc_driver(5)
- loop-control(4)
- iso_8859-16(7)
- proc_filesystems(5)
- tzfile(5)
- sprof(1)
- proc_pid_task(5)
- proc_pid_oom_score_adj(5)
- proc_mounts(5)
- iso-8859-4(7)
- iso_8859-1(7)
- utf-8(7)
- iso_8859-13(7)
- intro(6)
- proc_timer_list(5)
- rtld-audit(7)
- iso_8859-3(7)
- group(5)
- sched(7)
- proc_pid_clear_refs(5)
- hosts(5)
- iso_8859-11(7)
- numa(7)
- iso_8859_2(7)
- locale(7)
- iso-8859-1(7)
- fuse(4)
- proc_tid(5)
- proc_execdomains(5)
- proc_pid_mountinfo(5)
- intro(8)
- iso_8859_8(7)
- proc_loadavg(5)
- proc_pid_oom_adj(5)
- re_format(7)
- iso_8859_14(7)
- zic(8)
- bootparam(7)
- inotify(7)
- posixoptions(7)
- proc_partitions(5)
- iso-8859-9(7)
- proc_pid_mem(5)
- networks(5)
- proc_sys_user(5)
- udp(7)
- proc_zoneinfo(5)
- latin10(7)
- proc_pid_fdinfo(5)
- proc_pid_stack(5)
- memusage(1)
- spufs(7)
- pkeys(7)
- path_resolution(7)
- proc_ioports(5)
- intro(1)
- ldconfig(8)
- msr(4)
- svipc(7)
- port(4)
- proc_pid_personality(5)
- cciss(4)
- latin9(7)
- capabilities(7)
- localedef(1)
- vcs(4)
- iso_8859-5(7)
- elf(5)
- proc_sys_proc(5)
- console_codes(4)
- random(4)
- iso-8859-7(7)
- termcap(5)
- cpuid(4)
- environ(7)
- string_copying(7)
- proc_pid_gid_map(5)
- queue(3)
- termio(7)
- user-keyring(7)
- complex(7)
- latin7(7)
- proc_config.gz(5)
- udplite(7)
- kernel_lockdown(7)
- proc_devices(5)
- proc_apm(5)
- iso_8859_1(7)
- proc_pid_numa_maps(5)
apt-get install manpages
Available languages:
en fr ja ruManual
vDSO
NOMSYNOPSIS
DESCRIPTION
Contexte exemple
Trouver le vDSO
Format de fichier
NOTES
Source
Noms vDSO
strace(1), seccomp(2) et le vDSO
NOTES SPĂCIFIQUES AUX ARCHITECTURES
Fonctions ARM
Fonctions aarch64
Fonctions bfin (Blackfin) (portage supprimé dans Linux 4.17)
Fonctions mips
Fonctions ia64 (Itanium)
Fonctions parisc (hppa)
Fonctions ppc/32
Fonctions ppc/64
Fonctions riscv
Fonctions s390
Fonctions s390x
Fonctions sh (SuperH)
Fonctions i386
Fonctions x86-64
Fonctions x86/x32
Historique
VOIR AUSSI
TRADUCTION
NOM
vdso â PrĂ©sentation de lâobjet partagĂ© dynamique ELF virtuel
SYNOPSIS
#include <sys/auxv.h>
void *vdso = (uintptr_t) getauxval(AT_SYSINFO_EHDR);
DESCRIPTION
Le « vDSO » (objet partagĂ© dynamique virtuel, « virtual dynamic shared object ») est une petite bibliothĂšque partagĂ©e que le noyau projette automatiquement dans lâespace dâadresses de toutes les applications en espace utilisateur. Les applications nâont normalement pas besoin de sâoccuper elles-mĂȘmes de ces dĂ©tails puisque le vDSO est dâhabitude appelĂ© par la bibliothĂšque C. Ainsi, vous pouvez Ă©crire du code normalement en utilisant les fonctions standards et la bibliothĂšque C sâoccupera dâutiliser toutes les fonctionnalitĂ©s disponibles par lâintermĂ©diaire du vDSO.
Pourquoi le vDSO existe ? Certains appels systĂšme fournis par le noyau finissent par ĂȘtre utilisĂ©s frĂ©quemment par le code en espace utilisateur, au point que ces appels peuvent avoir une emprise excessive sur les performances. Câest Ă la fois dĂ» Ă la frĂ©quence des appels quâaux nombreux changements de contexte Ă force de sortir de lâespace utilisateur pour entrer dans le noyau.
La suite de cette documentation est orientĂ©e pour les curieux et les auteurs de la bibliothĂšque C plutĂŽt que pour les dĂ©veloppeurs gĂ©nĂ©raux. Si vous essayez dâappeler le vDSO dans vos propres applications plutĂŽt que dâutiliser la bibliothĂšque C, vous faites sans doute fausse route.
Contexte exemple
RĂ©aliser des appels systĂšme peut ĂȘtre lent. Dans les systĂšmes 32 bits x86, vous pouvez dĂ©clencher une interruption logicielle ( int $0x80 ) pour indiquer au noyau que vous voulez faire un appel systĂšme. Cependant, cette instruction est coĂ»teuse : elle passe par tous les chemins complets de traitement des interruptions dans le microcode du processeur ainsi que dans le noyau. Les nouveaux processeurs ont des instructions plus rapides (mais non rĂ©trocompatibles) pour initier les appels systĂšme. PlutĂŽt que forcer la bibliothĂšque C Ă vĂ©rifier si cette fonctionnalitĂ© est disponible au moment de lâexĂ©cution, la bibliothĂšque C peut utiliser les fonctions fournies par le noyau dans le vDSO.
Remarquez que cette terminologie peut ĂȘtre source de confusion. Sur les systĂšmes x86, la fonction vDSO utilisĂ©e pour dĂ©terminer la mĂ©thode prĂ©fĂ©rĂ©e pour rĂ©aliser un appel systĂšme est appelĂ©e « __kernel_vsyscall » alors que sous x86_64, le terme « vsyscall » se rĂ©fĂšre aussi Ă une façon obsolĂšte de demander au noyau lâheure ou le processeur sur lequel est lâappelant.
Un appel systĂšme frĂ©quemment utilisĂ© est gettimeofday (2). Cet appel systĂšme est appelĂ© Ă la fois directement par les applications en espace utilisateur et indirectement par la bibliothĂšque C. Remarquez que les horodatages, boucles temporelles ou scrutations â ont tous frĂ©quemment besoin de savoir lâheure exacte. Ce nâest pas non plus un secret â nâimporte quelle application dans nâimporte quel mode (superutilisateur ou utilisateur normal) aura la mĂȘme rĂ©ponse. Alors le noyau sâarrange pour que les informations nĂ©cessaires pour rĂ©pondre Ă cette question soient placĂ©es dans la mĂ©moire accessible au processus. Ainsi un appel de gettimeofday (2) est transformĂ© dâun appel systĂšme en un appel normal de fonction, avec peu dâaccĂšs mĂ©moire.
Trouver le vDSO
Lâadresse de base du vDSO (sâil existe) est passĂ©e par le noyau Ă tous les programmes dans le vecteur auxiliaire initial (consultez getauxval (3)) Ă lâaide de lâindicateur AT_SYSINFO_EHDR .
Vous ne devez pas supposer que le vDSO est projetĂ© Ă un endroit particulier de la projection en mĂ©moire de lâutilisateur. Lâadresse de base sera normalement alĂ©atoire au moment de lâexĂ©cution Ă chaque fois quâune nouvelle image de processus est créée (au moment de execve (2)). Câest ainsi pour des raisons de sĂ©curitĂ©, afin dâĂ©viter les attaques de « retour vers libc ».
Pour certaines architectures, un indicateur AT_SYSINFO est aussi prĂ©sent. Il nâest utilisĂ© que pour localiser le point dâentrĂ©e vsyscall et est souvent omis ou dĂ©fini Ă 0 (signifiant quâil nâest pas disponible). Cet indicateur est un rappel du fonctionnement initial de vDSO (consultez Historique ci-dessous) et son utilisation devrait ĂȘtre Ă©vitĂ©e.
Format de fichier
Puisque le vDSO est une image ELF complĂšte, vous pouvez y rechercher des symboles. Cela permet dâajouter de nouveaux symboles avec les versions de noyau plus rĂ©centes et permet Ă la bibliothĂšque C de dĂ©tecter les fonctionnalitĂ©s disponibles au moment de lâexĂ©cution lors de lâexĂ©cution sous diffĂ©rentes versions de noyau. Dâhabitude, la bibliothĂšque C fera la dĂ©tection lors du premier appel puis mettra en cache le rĂ©sultat pour les appels suivants.
Tous les appels sont aussi versionnĂ©s (en utilisant le format de version GNU). Cela permet au noyau de mettre Ă jour la signature de fonction sans casser la rĂ©trocompatibilitĂ©. Cela signifie modifier les arguments acceptĂ©s par la fonction et la valeur de retour. Ainsi, lors de la recherche de symboles dans le vDSO, vous devez toujours inclure la version pour correspondre Ă lâABI attendue.
Typiquement, le vDSO suit la convention de nommage de préfixer tous les symboles par « __vdso_ » ou « __kernel_ » afin de les distinguer des autres symboles standards. Par exemple, la fonction « gettimeofday » est nommée « __vdso_gettimeofday ».
Utilisez les conventions dâappel C standard pour appeler nâimporte laquelle de ces fonctions. Pas la peine de vous embĂȘter avec les registres bizarres ou les comportements de pile.
NOTES
Source
Lors de la compilation du noyau, le code vDSO est compilĂ© et liĂ© automatiquement. Il se trouve souvent dans le rĂ©pertoire spĂ©cifique Ă lâarchitecture :
find arch/$ARCH/ -name '*vdso*.so*' -o -name '*gate*.so*'
Noms vDSO
|
Le nom du vDSO dépend des architectures. Il est souvent visible dans des endroits comme la sortie de ldd (1) de la glibc. Le nom exact ne devrait affecter aucun code, donc pas la peine de le coder en dur. |
strace(1), seccomp(2) et le vDSO
Lors du suivi des appels systĂšme avec strace (1), les symboles (appels systĂšme) qui sont exportĂ©s par le vDSO nâ apparaĂźtront pas dans la sortie du suivi. De mĂȘme, ces appels systĂšme ne seront pas visibles par les filtres seccomp (2).
NOTES SPĂCIFIQUES AUX ARCHITECTURES
Les sous-sections suivantes fournissent des notes spécifiques aux architectures sur le vDSO.
Remarquez que le vDSO utilisĂ© est basĂ© sur lâABI du code en espace utilisateur et non sur lâABI du noyau. Ainsi, par exemple, si vous exĂ©cutez un binaire ELF 32 bits i386, vous obtiendrez le mĂȘme vDSO que vous lâexĂ©cutiez avec un noyau 32 bits i386 ou avec un noyau 64 bits x86_64. Par consĂ©quent, le nom de lâABI en espace utilisateur devrait ĂȘtre utilisĂ© pour dĂ©terminer la section suivante adĂ©quate.
Fonctions ARM
|
Le tableau suivant indique les symboles exportés par le vDSO. |
De plus, le portage ARM a une page de code pleine de fonctions utilitaires. Puisque ce nâest quâune page de code brut, aucune information ELF nâexiste pour faire la recherche de symboles ou le versionnage. Elle fournit cependant une prise en charge pour plusieurs versions.
Pour des renseignements sur cette page de code, mieux vaut consulter la documentation du noyau puisquâelle est extrĂȘmement dĂ©taillĂ©e et couvre tous ce que vous devez savoir : Documentation/arm/kernel_user_helpers.rst .
Fonctions aarch64
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions bfin (Blackfin) (portage supprimé dans Linux 4.17)
Comme ce processeur nâa pas dâunitĂ© de gestion mĂ©moire (MMU), il ne dĂ©finit pas de vDSO au sens usuel. Ă la place, il projette au dĂ©marrage quelques fonctions brutes Ă un endroit spĂ©cifique de la mĂ©moire. Les applications en espace utilisateur appellent ensuite directement dans cette zone. Aucune mesure de rĂ©trocompatibilitĂ© nâest prise Ă part en sniffant les codes opĂ©ratoires bruts, mais comme il sâagit dâun processeur embarquĂ©, il peut sâen sortir impunĂ©ment â certains formats dâobjet quâil exĂ©cute ne sont mĂȘme pas basĂ©s sur ELF (ils sont bFLT/FLAT).
Pour des
renseignements sur cette page de code, mieux vaut consulter
la documentation publique :
http://docs.blackfin.uclinux.org/doku.php?id=linux-kernel:fixed-code
Fonctions mips
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions ia64 (Itanium)
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Le portage Itanium est un peu pĂ©rilleux. En plus du vDSO ci-dessus, il a aussi des « appels systĂšme lĂ©gers » (aussi appelĂ©s « appels systĂšme rapides » ou « fsys »). Ils peuvent ĂȘtre appelĂ©s Ă lâaide de lâassistant vDSO __kernel_syscall_via_epc . Les appels systĂšme indiquĂ©s ici ont la mĂȘme sĂ©mantique que si vous les appeliez directement Ă lâaide de syscall (2), donc consultez la documentation adĂ©quate pour chacun dâentre eux. Le tableau suivant indique les fonctions disponibles par ce mĂ©canisme.
Fonctions parisc (hppa)
Le portage parisc Ă une page de code pleine de fonctions utilitaires appelĂ©e une page passerelle. PlutĂŽt que dâutiliser lâapproche classique du vecteur auxiliaire ELF, il passe lâadresse de la page au processus Ă lâaide du registre SR2. Les permissions sur la page sont telles quâexĂ©cuter simplement ces adresses sâexĂ©cute automatiquement avec les droits du noyau et pas en espace utilisateur. Câest ainsi afin de correspondre au mode de fonctionnement HP-UX.
Puisque ce nâest quâune page de code brut, aucune information ELF nâexiste pour faire la recherche de symboles ou le versionnage. Appelez simplement lâadresse adĂ©quate Ă lâaide de lâinstruction de branche, par exemple :
ble <offset>(%sr2, %r0)
Fonctions ppc/32
|
Le tableau suivant indique les symboles exportés par le vDSO. Les fonctions marquées avec un * ne sont disponibles que si le noyau est PowerPC64 (64 bits). |
Avant Linux 5.6, les horloges CLOCK_REALTIME_COARSE et CLOCK_MONOTONIC_COARSE ne sont pas prises en charge par les interfaces __kernel_clock_getres et __kernel_clock_gettime . Le noyau a recours Ă lâappel systĂšme rĂ©el.
Fonctions ppc/64
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Avant Linux 4.16, les horloges CLOCK_REALTIME_COARSE et CLOCK_MONOTONIC_COARSE ne sont pas prises en charge par les interfaces __kernel_clock_getres et __kernel_clock_gettime . Le noyau a recours Ă lâappel systĂšme rĂ©el.
Fonctions riscv
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions s390
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions s390x
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions sh (SuperH)
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions i386
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Fonctions x86-64
|
Le tableau suivant indique les symboles exportés par le vDSO. Tous ces symboles sont aussi disponibles sans le préfixe « __vdso_ », mais vous devriez les ignorer et vous cantonner aux noms suivants. |
Fonctions x86/x32
|
Le tableau suivant indique les symboles exportés par le vDSO. |
Historique
Le vDSO nâĂ©tait Ă lâorigine quâune seule fonction â le vsyscall. Dans les anciens noyaux, ce nom pourrait ĂȘtre vu dans une projection en mĂ©moire de processus Ă la place de « vdso ». Le temps passant, les gens ont rĂ©alisĂ© que ce mĂ©canisme Ă©tait un excellent moyen pour passer plus de fonctionnalitĂ©s Ă lâespace utilisateur, il a donc Ă©tĂ© reconçu en tant que vDSO au format actuel.
VOIR AUSSI
syscalls (2), getauxval (3), proc (5)
Les documents, exemples et le code source dans lâarborescence du code source de Linux :
Documentation/ABI/stable/vdso
Documentation/ia64/fsys.rst
Documentation/vDSO/* (contient des exemples
dâutilisation du vDSO)
find arch/ -iname '*vdso*' -o -iname '*gate*'
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
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 à debian-l10n-french@lists.debian.org .