Системный вызов Umount("/proc") для пространств имен монтирования Ошибка "Недопустимый аргумент"
В настоящее время я пытаюсь использовать разные пространства имен для целей тестирования. Для этого я попытался реализовать пространство имен MNT (в сочетании с пространством имен PID), чтобы программа в этом пространстве имен не могла видеть другие процессы в системе.
При попытке использовать системный вызов umount следующим образом (то же самое происходит с umount("/proc") или с umount2 и параметром Force):
if (umount2("/proc", 0)!= 0)
{
fprintf(stderr, "Error when unmounting /proc: %s\n",strerror(errno));
printf("\tKernel version might be incorrect\n");
exit(-1);
}
выполнение системного вызова заканчивается ошибкой 22 "Неверный аргумент".
Этот фрагмент кода вызывается внутри функции, которая вызывается при создании дочернего процесса с пространствами имен:
pid_t child_pid = clone(child_exec, child_stack+1024*1024, Child_Flags,&args);
(функция child_exec). Флаги устанавливаются следующим образом:
int Child_Flags = CLONE_NEWIPC | CLONE_NEWUSER | CLONE_NEWUTS | CLONE_NEWNET |CLONE_NEWPID | CLONE_NEWNS |SIGCHLD ;
С CLONE_NEWNS для нового пространства имен монтирования ( http://man7.org/linux/man-pages/man7/namespaces.7.html)
Вывод программы следующий:
Testing with Isolation
Starting Container engine
In-Child-PID: 1
Error number 22
Error when unmounting /proc: Invalid argument
Может кто-нибудь указать мне на мою ошибку, чтобы я мог размонтировать папку? заранее спасибо
0 ответов
Вы не можете размонтировать вещи, которые были смонтированы в другом пространстве имен пользователя, кроме как с помощью pivot_root
с последующим umount
размонтировать /
, Вы можете смонтировать /proc
без размонтирования старого /proc
,