mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Greg KH <greg@kroah.com>
Cc: linux-kernel@vger.kernel.org, satyam@infradead.org,
	cornelia.huck@de.ibm.com, stern@rowland.harvard.edu,
	Tejun Heo <htejun@gmail.com>,
	Linux Containers <containers@lists.osdl.org>,
	gregkh@suse.de
Subject: [PATCH 14/25] sysfs: Don't use lookup_one_len_kern
Date: Tue, 07 Aug 2007 15:23:57 -0600	[thread overview]
Message-ID: <m1hcnbhwcy.fsf_-_@ebiederm.dsl.xmission.com> (raw)
In-Reply-To: <m1lkcnhwfu.fsf_-_@ebiederm.dsl.xmission.com> (Eric W. Biederman's message of "Tue, 07 Aug 2007 15:22:13 -0600")


Upon inspection it appears that there is no looking of the
inode mutex in lookup_one_len_kern and we aren't calling
it with the inode mutex and that is wrong.

So this patch rolls our own dcache insertion function that
does exactly what we need it to do.  As it turns out this
is pretty trivial to do and it makes the code easier to
audit.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
 fs/sysfs/dir.c |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
index a9bdb12..1d53c2a 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -765,6 +765,44 @@ static struct dentry *__sysfs_get_dentry(struct super_block *sb, struct sysfs_di
 	return dentry;
 }
 
+static struct dentry *sysfs_add_dentry(struct dentry *parent, struct sysfs_dirent *sd)
+{
+	struct qstr name;
+	struct dentry *dentry;
+	struct inode *inode;
+
+	mutex_lock(&parent->d_inode->i_mutex);
+	mutex_lock(&sysfs_mutex);
+	dentry = ERR_PTR(-EINVAL);
+	if (parent->d_fsdata != sd->s_parent)
+		goto out;
+
+	name.name = sd->s_name;
+	name.len = strlen(sd->s_name);
+	dentry = d_hash_and_lookup(parent, &name);
+	if (dentry)
+		goto out;
+
+	dentry = d_alloc(parent, &name);
+	if (!dentry) {
+		dentry = ERR_PTR(-ENOMEM);
+		goto out;
+	}
+
+	inode = sysfs_get_inode(sd);
+	if (!inode) {
+		dput(dentry);
+		dentry = ERR_PTR(-ENOMEM);
+		goto out;
+	}
+	d_instantiate(dentry, inode);
+	sysfs_attach_dentry(sd, dentry);
+out:
+	mutex_unlock(&sysfs_mutex);
+	mutex_unlock(&parent->d_inode->i_mutex);
+	return dentry;
+}
+
 /**
  *	sysfs_get_dentry - get dentry for the given sysfs_dirent
  *	@sd: sysfs_dirent of interest
@@ -806,8 +844,7 @@ struct dentry *sysfs_get_dentry(struct sysfs_dirent *sd)
 
 		/* look it up */
 		parent_dentry = dentry;
-		dentry = lookup_one_len_kern(cur->s_name, parent_dentry,
-					     strlen(cur->s_name));
+		dentry = sysfs_add_dentry(parent_dentry, cur);
 		dput(parent_dentry);
 
 		if (IS_ERR(dentry))
-- 
1.5.1.1.181.g2de0


  reply	other threads:[~2007-08-07 21:53 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-02 12:38 [PATCHSET 2.6.23-rc1] sysfs: locking fix and cleanups, take #2 Tejun Heo
2007-08-02 12:38 ` [PATCH 1/5] sysfs: cosmetic changes in sysfs_lookup() Tejun Heo
2007-08-02 12:38 ` [PATCH 2/5] sysfs: simplify sysfs_rename_dir() Tejun Heo
2007-08-02 12:38 ` [PATCH 4/5] sysfs: make sysfs_add_one() automatically check for duplicate entry Tejun Heo
2007-08-02 12:38 ` [PATCH 3/5] sysfs: make sysfs_add/remove_one() call link/unlink_sibling() implictly Tejun Heo
2007-08-02 12:38 ` [PATCH 5/5] sysfs: make sysfs_addrm_finish() return void Tejun Heo
2007-08-07 21:06   ` [PATCH 0/25] Sysfs cleanups & tagged directory support Eric W. Biederman
2007-08-07 21:08     ` [PATCH 01/25] sysfs: Move all of inode initialization into sysfs_init_inode Eric W. Biederman
2007-08-07 21:08       ` [PATCH 02/25] sysfs: Remove sysfs_instantiate Eric W. Biederman
2007-08-07 21:10         ` [PATCH 03/25] sysfs: Use kill_anon_super Eric W. Biederman
2007-08-07 21:11           ` [PATCH 04/25] sysfs: Make sysfs_mount static Eric W. Biederman
2007-08-07 21:12             ` [PATCH 05/25] sysfs: In sysfs_lookup don't open code sysfs_find_dirent Eric W. Biederman
2007-08-07 21:13               ` [PATCH 06/25] sysfs: Simplify readdir Eric W. Biederman
2007-08-07 21:14                 ` [PATCH 07/25] sysfs: Rewrite sysfs_drop_dentry Eric W. Biederman
2007-08-07 21:16                   ` [PATCH 08/25] sysfs: Implement __sysfs_get_dentry Eric W. Biederman
2007-08-07 21:17                     ` [PATCH 09/25] sysfs: Move sysfs_get_dentry below __sysfs_get_dentry Eric W. Biederman
2007-08-07 21:18                       ` [PATCH 10/25] sysfs: Rewrite sysfs_get_dentry in terms of __sysfs_get_dentry Eric W. Biederman
2007-08-07 21:19                         ` [PATCH 11/25] sysfs: Remove s_dentry Eric W. Biederman
2007-08-07 21:21                           ` [PATCH 12/25] sysfs: Introduce sysfs_rename_mutex Eric W. Biederman
2007-08-07 21:22                             ` [PATCH 13/25] sysfs: Simply sysfs_get_dentry Eric W. Biederman
2007-08-07 21:23                               ` Eric W. Biederman [this message]
2007-08-07 21:25                                 ` [PATCH 15/25] vfs: Remove lookup_one_len_kern Eric W. Biederman
2007-08-07 21:26                                   ` [PATCH 16/25] sysfs: Support for preventing unmounts Eric W. Biederman
2007-08-07 21:27                                     ` [PATCH 17/25] sysfs: Rewrite rename in terms of sysfs dirents Eric W. Biederman
2007-08-07 21:28                                       ` [PATCH 18/25] sysfs: Rewrite sysfs_move_dir " Eric W. Biederman
2007-08-07 21:29                                         ` [PATCH 19/25] sysfs: sysfs_get_dentry add a sb parameter Eric W. Biederman
2007-08-07 21:31                                           ` [PATCH 20/25] sysfs: Rename Support multiple superblocks Eric W. Biederman
2007-08-07 21:32                                             ` [PATCH 21/25] sysfs: sysfs_chmod_file handle " Eric W. Biederman
2007-08-07 21:34                                               ` [PATCH 22/25] sysfs: sysfs_uptdate_file " Eric W. Biederman
2007-08-07 21:35                                                 ` [PATCH 23/25] sysfs: Implement sysfs tagged directory support Eric W. Biederman
2007-08-07 21:36                                                   ` [PATCH 24/25] sysfs: Implement sysfs_delete_link and sysfs_rename_link Eric W. Biederman
2007-08-07 21:36                                                     ` [PATCH 25/25] driver core: Implement tagged directory support for device classes Eric W. Biederman
2007-08-08 16:31                                                   ` alternative approached at tagged nodes Tejun Heo
2007-08-08  9:39                                                 ` [PATCH 22/25] sysfs: sysfs_uptdate_file handle multiple superblocks Tejun Heo
2007-08-08  9:38                                               ` [PATCH 21/25] sysfs: sysfs_chmod_file " Tejun Heo
2007-08-08  9:35                                             ` [PATCH 20/25] sysfs: Rename Support " Tejun Heo
2007-08-08 15:45                                               ` Eric W. Biederman
2007-08-08 15:50                                                 ` Tejun Heo
2007-08-08 16:35                                                   ` Eric W. Biederman
2007-08-08 16:42                                                     ` Tejun Heo
2007-08-08 16:55                                                       ` Eric W. Biederman
2007-08-08  8:57                                           ` [PATCH 19/25] sysfs: sysfs_get_dentry add a sb parameter Tejun Heo
2007-08-08 15:34                                             ` Eric W. Biederman
2007-08-08  8:53                                         ` [PATCH 18/25] sysfs: Rewrite sysfs_move_dir in terms of sysfs dirents Tejun Heo
2007-08-08  8:51                                       ` [PATCH 17/25] sysfs: Rewrite rename " Tejun Heo
2007-08-08 15:32                                         ` Eric W. Biederman
2007-08-08  8:39                                   ` [PATCH 15/25] vfs: Remove lookup_one_len_kern Tejun Heo
2007-08-08  8:38                                 ` [PATCH 14/25] sysfs: Don't use lookup_one_len_kern Tejun Heo
2007-08-08 15:26                                   ` Eric W. Biederman
2007-08-08 15:35                                     ` Tejun Heo
2007-08-08  8:24                               ` [PATCH 13/25] sysfs: Simply sysfs_get_dentry Tejun Heo
2007-08-08  8:19                             ` [PATCH 12/25] sysfs: Introduce sysfs_rename_mutex Tejun Heo
2007-08-08  8:23                               ` Tejun Heo
2007-08-08  8:28                               ` Eric W. Biederman
2007-08-08  7:46                           ` [PATCH 11/25] sysfs: Remove s_dentry Tejun Heo
2007-08-08  7:45                         ` [PATCH 10/25] sysfs: Rewrite sysfs_get_dentry in terms of __sysfs_get_dentry Tejun Heo
2007-08-08  7:45                       ` [PATCH 09/25] sysfs: Move sysfs_get_dentry below __sysfs_get_dentry Tejun Heo
2007-08-08  7:45                     ` [PATCH 08/25] sysfs: Implement __sysfs_get_dentry Tejun Heo
2007-08-08  7:35                   ` [PATCH 07/25] sysfs: Rewrite sysfs_drop_dentry Tejun Heo
2007-08-08  7:12                 ` [PATCH 06/25] sysfs: Simplify readdir Tejun Heo
2007-08-08  6:51               ` [PATCH 05/25] sysfs: In sysfs_lookup don't open code sysfs_find_dirent Tejun Heo
2007-08-08  6:51             ` [PATCH 04/25] sysfs: Make sysfs_mount static Tejun Heo
2007-08-08  6:50           ` [PATCH 03/25] sysfs: Use kill_anon_super Tejun Heo
2007-08-08  6:37         ` [PATCH 02/25] sysfs: Remove sysfs_instantiate Tejun Heo
2007-08-08  6:37       ` [PATCH 01/25] sysfs: Move all of inode initialization into sysfs_init_inode Tejun Heo
2007-08-08  7:38     ` [PATCH 0/25] Sysfs cleanups & tagged directory support Cornelia Huck
2007-08-08  7:47       ` Eric W. Biederman
2007-08-08  7:53         ` Tejun Heo
2007-08-08  7:54         ` Cornelia Huck
2007-08-08  7:57           ` Eric W. Biederman
2007-08-08  8:37             ` Cornelia Huck
2007-08-08  8:54               ` Tejun Heo
2007-08-08  9:16                 ` Cornelia Huck
2007-08-08 14:16               ` Cornelia Huck
2007-08-08 14:35                 ` Tejun Heo
2007-08-08 14:50                   ` Cornelia Huck
2007-08-08 14:55                     ` Tejun Heo
2007-08-08 15:08                       ` Eric W. Biederman
2007-08-08 15:13                         ` Tejun Heo
2007-08-08 15:16                           ` Tejun Heo
2007-08-08 15:53                             ` Eric W. Biederman
2007-08-08 16:03                               ` Tejun Heo
2007-08-08 16:37                                 ` Eric W. Biederman
2007-08-08 15:15                       ` Cornelia Huck
2007-08-08 16:35                     ` Cornelia Huck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m1hcnbhwcy.fsf_-_@ebiederm.dsl.xmission.com \
    --to=ebiederm@xmission.com \
    --cc=containers@lists.osdl.org \
    --cc=cornelia.huck@de.ibm.com \
    --cc=greg@kroah.com \
    --cc=gregkh@suse.de \
    --cc=htejun@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=satyam@infradead.org \
    --cc=stern@rowland.harvard.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®