[Devel] [PATCH VZ10 6/8] ve/unshare: allow CLONE_NEWVE with other namespace flags
Vasileios Almpanis
vasileios.almpanis at virtuozzo.com
Thu Apr 30 11:19:45 MSK 2026
Reviewed-by: Vasileios Almpanis <vasileios.almpanis at virtuozzo.com>
On 4/29/26 3:41 PM, Pavel Tikhomirov wrote:
> The check_unshare_flags() previously rejected CLONE_NEWVE in combination
> with anything other than CLONE_NEWUSER. The justification was that
> get_exec_env() still returned the previous ve while unshare was creating
> new mount and network namespaces, so their ->owner_ve / ve_owner links
> would point at the wrong ve. The previous patch fixes that by threading
> the freshly allocated ve_namespace from unshare_ve_namespace() down to
> copy_mnt_ns() and copy_net_ns() via unshare_nsproxy_namespaces(), so
> the guard is no longer needed.
>
> Drop it. unshare(CLONE_NEWUSER | CLONE_NEWVE | CLONE_NEWNS |
> CLONE_NEWNET | ...) now works in a single syscall and the resulting
> namespaces are owned by the new ve.
>
> https://virtuozzo.atlassian.net/browse/VSTOR-129744
> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
> Feature: ve: ve generic structures
> ---
> kernel/fork.c | 14 --------------
> 1 file changed, 14 deletions(-)
>
> diff --git a/kernel/fork.c b/kernel/fork.c
> index a1b9fec27579..dfd074a794b5 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -3237,20 +3237,6 @@ static int check_unshare_flags(unsigned long unshare_flags)
> return -EINVAL;
> }
>
> - /*
> - * Unshare creates all namespaces first and only then switches to them.
> - * So get_exec_env() yet returns previous VE while we are creating
> - * other namespaces. That leads to network and mount namespace
> - * initialized incorrectly, having ->owner_ve links set to previous VE.
> - * To avoid confusion, only allow CLONE_NEWVE together with CLONE_NEWUSER.
> - * CLONE_NEWUSER is allowed as it should own VE namespace, not vice versa.
> - */
> - if (unshare_flags & CLONE_NEWVE) {
> - unsigned long allowed_with_ve = CLONE_NEWVE | CLONE_NEWUSER;
> - if (unshare_flags & ~allowed_with_ve)
> - return -EINVAL;
> - }
> -
> return 0;
> }
>
--
Best regards, Vasileios Almpanis
Software Developer, Virtuozzo.
More information about the Devel
mailing list