Maison > développement back-end > Golang > Pourquoi l'appel de setns depuis Go renvoie-t-il EINVAL pour les espaces de noms mnt ?

Pourquoi l'appel de setns depuis Go renvoie-t-il EINVAL pour les espaces de noms mnt ?

Mary-Kate Olsen
Libérer: 2024-11-03 14:30:03
original
755 Les gens l'ont consulté

Why Does Calling setns from Go Return EINVAL for mnt Namespaces?

L'appel de setns depuis Go renvoie EINVAL pour l'espace de noms mnt

Problème :

Le code Go ne parvient pas à entrer dans l'espace de noms mnt avec l'appel setns, ce qui entraîne une erreur EINVAL. Malgré des appels identiques dans le code C, l'implémentation Go produit l'erreur cohérente.

Enquête :

  • Confirmation que les codes C et Go appellent les paramètres dans la libc de manière identique .
  • Réduire le problème à un exemple de code simplifié pour isoler le problème.

Solution :

En Go, les setns doivent être exécutés dans un contexte à thread unique avant le démarrage des threads d'exécution Go. En effet, setns agit sur le thread appelant, en le joignant à l'espace de noms.

Solution alternative utilisant l'astuce du constructeur CGO :

Ajoutez la macro __attribute__((constructeur)) à une fonction C pour qu'elle s'exécute avant l'initialisation de Go. Cela permet de saisir un espace de noms avant le démarrage des threads Go, résolvant ainsi le problème.

Mise à jour :

Une conversation sur la liste de diffusion du noyau Linux confirme la restriction selon laquelle les processus multithread ne peuvent pas être réassocié à un nouvel espace de noms de montage. Cela nécessite les capacités CAP_SYS_CHROOT et CAP_SYS_ADMIN dans l'espace de noms de l'appelant et CAP_SYS_ADMIN dans l'espace de noms cible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal