From bbc3e471011417598e598707486f5d8814ec9c01 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Wed, 29 Nov 2017 17:29:20 -0600 Subject: [PATCH 1/3] userns: Don't fail follow_automount based on s_user_ns When vfs_submount was added the test to limit automounts from filesystems that with s_user_ns != &init_user_ns accidentially left in follow_automount. The test was never about any security concerns and was always about how do we implement this for filesystems whose s_user_ns != &init_user_ns. At the moment this check makes no difference as there are no filesystems that both set FS_USERNS_MOUNT and implement d_automount. Remove this check now while I am thinking about it so there will not be odd booby traps for someone who does want to make this combination work. vfs_submount still needs improvements to allow this combination to work, and vfs_submount contains a check that presents a warning. The autofs4 filesystem could be modified to set FS_USERNS_MOUNT and it would need not work on this code path, as userspace performs the mounts. Fixes: 93faccbbfa95 ("fs: Better permission checking for submounts") Fixes: aeaa4a79ff6a ("fs: Call d_automount with the filesystems creds") Acked-by: Ian Kent Signed-off-by: "Eric W. Biederman" --- fs/namei.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index f0c7a7b9b6ca..f47118ed36e7 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -1142,9 +1142,6 @@ static int follow_automount(struct path *path, struct nameidata *nd, return -ENOENT; } - if (path->dentry->d_sb->s_user_ns != &init_user_ns) - return -EACCES; - nd->total_link_count++; if (nd->total_link_count >= 40) return -ELOOP; From 116ceac9741e5ab0337b0c855ba80966bfc899e2 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Wed, 29 Nov 2017 17:49:45 -0600 Subject: [PATCH 2/3] autofs4: Modify autofs_wait to use current_uid() and current_gid() The code used to do that and then I mucked with it and never quite put the code back. Today the code references current_cred()->uid and current_cred()->gid which is equivalent but more wordy, and not idiomatic. Fixes: 93faccbbfa95 ("fs: Better permission checking for submounts") Fixes: 069d5ac9ae0d ("autofs: Fix automounts by using current_real_cred()->uid") Acked-by: Ian Kent Signed-off-by: "Eric W. Biederman" --- fs/autofs4/waitq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c index 8fc41705c7cd..9908ecf7fce0 100644 --- a/fs/autofs4/waitq.c +++ b/fs/autofs4/waitq.c @@ -443,8 +443,8 @@ int autofs4_wait(struct autofs_sb_info *sbi, memcpy(&wq->name, &qstr, sizeof(struct qstr)); wq->dev = autofs4_get_dev(sbi); wq->ino = autofs4_get_ino(sbi); - wq->uid = current_cred()->uid; - wq->gid = current_cred()->gid; + wq->uid = current_uid(); + wq->gid = current_gid(); wq->pid = pid; wq->tgid = tgid; wq->status = -EINTR; /* Status return if interrupted */ From 8b2770a4e1c7a837e1889d4f00026e999da5faa0 Mon Sep 17 00:00:00 2001 From: Wolffhardt Schwabe Date: Thu, 14 Dec 2017 19:13:57 +0100 Subject: [PATCH 3/3] fix typo in assignment of fs default overflow gid The patch remains without practical effect since both macros carry identical values. Still, it might become a problem in the future if (for whatever reason) the default overflow uid and gid differ. The DEFAULT_FS_OVERFLOWGID macro was previously unused. Signed-off-by: Wolffhardt Schwabe Signed-off-by: Anatoliy Cherepantsev Signed-off-by: Eric W. Biederman --- kernel/sys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/sys.c b/kernel/sys.c index 83ffd7dccf23..f2289de20e19 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -135,7 +135,7 @@ EXPORT_SYMBOL(overflowgid); */ int fs_overflowuid = DEFAULT_FS_OVERFLOWUID; -int fs_overflowgid = DEFAULT_FS_OVERFLOWUID; +int fs_overflowgid = DEFAULT_FS_OVERFLOWGID; EXPORT_SYMBOL(fs_overflowuid); EXPORT_SYMBOL(fs_overflowgid);