Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 58be2825 authored by Al Viro's avatar Al Viro
Browse files

make mntns ->get()/->put()/->install()/->inum() work with &mnt_ns->ns

parent 435d5f4b
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -1582,6 +1582,11 @@ static bool is_mnt_ns_file(struct dentry *dentry)
	return true;
}

struct mnt_namespace *to_mnt_ns(struct ns_common *ns)
{
	return container_of(ns, struct mnt_namespace, ns);
}

static bool mnt_ns_loop(struct dentry *dentry)
{
	/* Could bind mounting the mount namespace inode cause a
@@ -1591,7 +1596,7 @@ static bool mnt_ns_loop(struct dentry *dentry)
	if (!is_mnt_ns_file(dentry))
		return false;

	mnt_ns = get_proc_ns(dentry->d_inode)->ns;
	mnt_ns = to_mnt_ns(get_proc_ns(dentry->d_inode)->ns);
	return current->nsproxy->mnt_ns->seq >= mnt_ns->seq;
}

@@ -3146,14 +3151,14 @@ bool fs_fully_visible(struct file_system_type *type)

static void *mntns_get(struct task_struct *task)
{
	struct mnt_namespace *ns = NULL;
	struct ns_common *ns = NULL;
	struct nsproxy *nsproxy;

	task_lock(task);
	nsproxy = task->nsproxy;
	if (nsproxy) {
		ns = nsproxy->mnt_ns;
		get_mnt_ns(ns);
		ns = &nsproxy->mnt_ns->ns;
		get_mnt_ns(to_mnt_ns(ns));
	}
	task_unlock(task);

@@ -3162,13 +3167,13 @@ static void *mntns_get(struct task_struct *task)

static void mntns_put(void *ns)
{
	put_mnt_ns(ns);
	put_mnt_ns(to_mnt_ns(ns));
}

static int mntns_install(struct nsproxy *nsproxy, void *ns)
{
	struct fs_struct *fs = current->fs;
	struct mnt_namespace *mnt_ns = ns;
	struct mnt_namespace *mnt_ns = to_mnt_ns(ns);
	struct path root;

	if (!ns_capable(mnt_ns->user_ns, CAP_SYS_ADMIN) ||
@@ -3200,8 +3205,8 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns)

static unsigned int mntns_inum(void *ns)
{
	struct mnt_namespace *mnt_ns = ns;
	return mnt_ns->ns.inum;
	struct ns_common *p = ns;
	return p->inum;
}

const struct proc_ns_operations mntns_operations = {