mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
[PATCH] namespaces: incorporate fs namespace into nsproxy
This moves the mount namespace into the nsproxy. The mount namespace count now refers to the number of nsproxies point to it, rather than the number of tasks. As a result, the unshare_namespace() function in kernel/fork.c no longer checks whether it is being shared. Signed-off-by: Serge Hallyn <[email protected]> Cc: Kirill Korotaev <[email protected]> Cc: "Eric W. Biederman" <[email protected]> Cc: Herbert Poetzl <[email protected]> Cc: Andrey Savochkin <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
0437eb594e
commit
1651e14e28
9 changed files with 55 additions and 39 deletions
|
|
@ -133,7 +133,7 @@ struct vfsmount *lookup_mnt(struct vfsmount *mnt, struct dentry *dentry)
|
|||
|
||||
static inline int check_mnt(struct vfsmount *mnt)
|
||||
{
|
||||
return mnt->mnt_namespace == current->namespace;
|
||||
return mnt->mnt_namespace == current->nsproxy->namespace;
|
||||
}
|
||||
|
||||
static void touch_namespace(struct namespace *ns)
|
||||
|
|
@ -830,7 +830,7 @@ static int attach_recursive_mnt(struct vfsmount *source_mnt,
|
|||
if (parent_nd) {
|
||||
detach_mnt(source_mnt, parent_nd);
|
||||
attach_mnt(source_mnt, nd);
|
||||
touch_namespace(current->namespace);
|
||||
touch_namespace(current->nsproxy->namespace);
|
||||
} else {
|
||||
mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt);
|
||||
commit_tree(source_mnt);
|
||||
|
|
@ -1441,7 +1441,7 @@ dput_out:
|
|||
*/
|
||||
struct namespace *dup_namespace(struct task_struct *tsk, struct fs_struct *fs)
|
||||
{
|
||||
struct namespace *namespace = tsk->namespace;
|
||||
struct namespace *namespace = tsk->nsproxy->namespace;
|
||||
struct namespace *new_ns;
|
||||
struct vfsmount *rootmnt = NULL, *pwdmnt = NULL, *altrootmnt = NULL;
|
||||
struct vfsmount *p, *q;
|
||||
|
|
@ -1508,7 +1508,7 @@ struct namespace *dup_namespace(struct task_struct *tsk, struct fs_struct *fs)
|
|||
|
||||
int copy_namespace(int flags, struct task_struct *tsk)
|
||||
{
|
||||
struct namespace *namespace = tsk->namespace;
|
||||
struct namespace *namespace = tsk->nsproxy->namespace;
|
||||
struct namespace *new_ns;
|
||||
int err = 0;
|
||||
|
||||
|
|
@ -1531,7 +1531,7 @@ int copy_namespace(int flags, struct task_struct *tsk)
|
|||
goto out;
|
||||
}
|
||||
|
||||
tsk->namespace = new_ns;
|
||||
tsk->nsproxy->namespace = new_ns;
|
||||
|
||||
out:
|
||||
put_namespace(namespace);
|
||||
|
|
@ -1754,7 +1754,7 @@ asmlinkage long sys_pivot_root(const char __user * new_root,
|
|||
detach_mnt(user_nd.mnt, &root_parent);
|
||||
attach_mnt(user_nd.mnt, &old_nd); /* mount old root on put_old */
|
||||
attach_mnt(new_nd.mnt, &root_parent); /* mount new_root on / */
|
||||
touch_namespace(current->namespace);
|
||||
touch_namespace(current->nsproxy->namespace);
|
||||
spin_unlock(&vfsmount_lock);
|
||||
chroot_fs_refs(&user_nd, &new_nd);
|
||||
security_sb_post_pivotroot(&user_nd, &new_nd);
|
||||
|
|
@ -1780,7 +1780,6 @@ static void __init init_mount_tree(void)
|
|||
{
|
||||
struct vfsmount *mnt;
|
||||
struct namespace *namespace;
|
||||
struct task_struct *g, *p;
|
||||
|
||||
mnt = do_kern_mount("rootfs", 0, "rootfs", NULL);
|
||||
if (IS_ERR(mnt))
|
||||
|
|
@ -1796,13 +1795,8 @@ static void __init init_mount_tree(void)
|
|||
namespace->root = mnt;
|
||||
mnt->mnt_namespace = namespace;
|
||||
|
||||
init_task.namespace = namespace;
|
||||
read_lock(&tasklist_lock);
|
||||
do_each_thread(g, p) {
|
||||
get_namespace(namespace);
|
||||
p->namespace = namespace;
|
||||
} while_each_thread(g, p);
|
||||
read_unlock(&tasklist_lock);
|
||||
init_task.nsproxy->namespace = namespace;
|
||||
get_namespace(namespace);
|
||||
|
||||
set_fs_pwd(current->fs, namespace->root, namespace->root->mnt_root);
|
||||
set_fs_root(current->fs, namespace->root, namespace->root->mnt_root);
|
||||
|
|
|
|||
Loading…
Reference in a new issue