Системный вызов Umount ("/ proc") для пространств имен монтирования Ошибка "Недопустимый аргумент" - PullRequest
0 голосов
/ 20 мая 2018

В настоящее время я пытаюсь использовать разные пространства имен для тестирования.Для этого я попытался реализовать пространство имен MNT (в сочетании с пространством имен PID), чтобы программа в этом пространстве имен не могла видеть другие процессы в системе.

При попытке использовать системный вызов umount следующим образом (то же самое происходитс помощью umount ("/ proc") или с помощью umount2 и Force-option):

  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

Может кто-нибудь указать мне на мою ошибку, чтобы я мог размонтировать папку? Заранее спасибо

1 Ответ

0 голосов
/ 08 января 2019

Вы не можете размонтировать вещи, которые были смонтированы в другом пространстве имен пользователя, кроме как с помощью pivot_root и umount для размонтирования /.Вы можете смонтировать /proc без размонтирования старого /proc.

...