linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] debugfs: debugfs_create_* shouldn't be checking permissions
@ 2015-03-30 14:23 J. Bruce Fields
       [not found] ` <20150330142310.GB6901-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
  2015-03-30 15:16 ` Greg Kroah-Hartman
  0 siblings, 2 replies; 6+ messages in thread
From: J. Bruce Fields @ 2015-03-30 14:23 UTC (permalink / raw)
  To: Greg Kroah-Hartman
  Cc: linux-fsdevel-u79uwXL29TY76Z2rM5mHXA,
	linux-nfs-u79uwXL29TY76Z2rM5mHXA

From: "J. Bruce Fields" <bfields-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

Subject: [PATCH] debugfs: debugfs_create_* shouldn't be checking permissions

Debugfs files and and directories are created by kernel subsystems not
directly by users, so we shouldn't be using lookup_one_len, which checks
permissions.

This was causing krb5 mounts to fail to Fedora servers using gss-proxy
if selinux was enabled, on kernels since 388f0c776781 "sunrpc: add a
debugfs rpc_xprt directory with an info file in it", which creates a new
debugfs directory for each new rpc client.

Reported-by: Anthony Messina <amessina-jVqiHVlHlyFWk0Htik3J/w@public.gmane.org>
Reported-by: Jason Tibbits <tibbs-6Fsk2Ie8wHGVc3sceRu5cw@public.gmane.org>
Cc: Jeff Layton <jlayton-7I+n7zu2hftEKMMhf/gKZA@public.gmane.org>
Signed-off-by: J. Bruce Fields <bfields-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
 fs/debugfs/inode.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

I swiped this code fragment from net/sunrpc/rpc_pipe.c, and it's gotten
only minimal testing.  (It does fix krb5 mounts, though.)

diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
index 96400ab42d13..75e5daa6a63f 100644
--- a/fs/debugfs/inode.c
+++ b/fs/debugfs/inode.c
@@ -251,6 +251,7 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
 {
 	struct dentry *dentry;
 	int error;
+	struct qstr q = QSTR_INIT(name, strlen(name));
 
 	pr_debug("debugfs: creating file '%s'\n",name);
 
@@ -268,11 +269,19 @@ static struct dentry *start_creating(const char *name, struct dentry *parent)
 		parent = debugfs_mount->mnt_root;
 
 	mutex_lock(&parent->d_inode->i_mutex);
-	dentry = lookup_one_len(name, parent, strlen(name));
-	if (!IS_ERR(dentry) && dentry->d_inode) {
+	dentry = d_hash_and_lookup(parent, &q);
+	if (!dentry) {
+		dentry = d_alloc(parent, &q);
+		if (!dentry) {
+			dentry = ERR_PTR(-ENOMEM);
+			goto out;
+		}
+	}
+	if (dentry->d_inode) {
 		dput(dentry);
 		dentry = ERR_PTR(-EEXIST);
 	}
+out:
 	if (IS_ERR(dentry))
 		mutex_unlock(&parent->d_inode->i_mutex);
 	return dentry;
@@ -340,7 +349,7 @@ struct dentry *debugfs_create_file(const char *name, umode_t mode,
 	inode->i_mode = mode;
 	inode->i_fop = fops ? fops : &debugfs_file_operations;
 	inode->i_private = data;
-	d_instantiate(dentry, inode);
+	d_add(dentry, inode);
 	fsnotify_create(dentry->d_parent->d_inode, dentry);
 	return end_creating(dentry);
 }
@@ -422,7 +431,7 @@ struct dentry *debugfs_create_dir(const char *name, struct dentry *parent)
 
 	/* directory inodes start off with i_nlink == 2 (for "." entry) */
 	inc_nlink(inode);
-	d_instantiate(dentry, inode);
+	d_add(dentry, inode);
 	inc_nlink(dentry->d_parent->d_inode);
 	fsnotify_mkdir(dentry->d_parent->d_inode, dentry);
 	return end_creating(dentry);
-- 
1.9.3

--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-03-30 15:37 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-30 14:23 [PATCH] debugfs: debugfs_create_* shouldn't be checking permissions J. Bruce Fields
     [not found] ` <20150330142310.GB6901-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2015-03-30 14:38   ` Greg Kroah-Hartman
2015-03-30 15:27     ` J. Bruce Fields
     [not found]       ` <20150330152725.GC6901-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2015-03-30 15:37         ` Jeff Layton
2015-03-30 15:16 ` Greg Kroah-Hartman
2015-03-30 15:28   ` J. Bruce Fields

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).