• Andrei Vagin's avatar
    fs/exec: switch timens when a task gets a new mm · 2b5f9dad
    Andrei Vagin authored
    Changing a time namespace requires remapping a vvar page, so we don't want
    to allow doing that if any other tasks can use the same mm.
    
    Currently, we install a time namespace when a task is created with a new
    vm. exec() is another case when a task gets a new mm and so it can switch
    a time namespace safely, but it isn't handled now.
    
    One more issue of the current interface is that clone() with CLONE_VM isn't
    allowed if the current task has unshared a time namespace
    (timens_for_children doesn't match the current timens).
    
    Both these issues make some inconvenience for users. For example, Alexey
    and Florian reported that posix_spawn() uses vfork+exec and this pattern
    doesn't work with time namespaces due to the both described issues.
    LXC needed to workaround the exec() issue by calling setns.
    
    In the commit 133e2d3e ("fs/exec: allow to unshare a time namespace on
    vfork+exec"), we tried to fix these issues with minimal impact on UAPI. But
    it adds extra complexity and some undesirable side effects. Eric suggested
    fixing the issues properly because here are all the reasons to suppose that
    there are no users that depend on the old behavior.
    
    Cc: Alexey Izbyshev <izbyshev@ispras.ru>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Dmitry Safonov <0x7f454c46@gmail.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Florian Weimer <fweimer@redhat.com>
    Cc: Kees Cook <keescook@chromium.org>
    Suggested-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    Origin-author: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: default avatarAndrei Vagin <avagin@gmail.com>
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20220921003120.209637-1-avagin@google.com
    2b5f9dad
nsproxy.c 13.2 KB