All of lore.kernel.org
 help / color / mirror / Atom feed
From: ebiederm@xmission.com (Eric W. Biederman)
To: Greg KH <gregkh@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	"Maciej W. Rozycki" <macro@linux-mips.org>,
	Kay Sievers <kay.sievers@vrfy.org>,
	Johannes Berg <johannes@sipsolutions.net>,
	Greg KH <greg@kroah.com>, netdev <netdev@vger.kernel.org>
Subject: [PATCH] sysfs: Don't allow the creation of symlinks we can't remove
Date: Thu, 08 Jul 2010 09:31:24 -0700	[thread overview]
Message-ID: <m1630q7x5v.fsf_-_@fess.ebiederm.org> (raw)
In-Reply-To: <20100622035631.GA3755@suse.de> (Greg KH's message of "Mon\, 21 Jun 2010 20\:56\:31 -0700")


Recently my tagged sysfs support revealed a flaw in the device core
that a few rare drivers are running into such that we don't always put
network devices in a class subdirectory named net/.

Since we are not creating the class directory the network devices wind
up in a non-tagged directory, but the symlinks to the network devices
from /sys/class/net are in a tagged directory.  All of which works
until we go to remove or rename the symlink.  When we remove or rename
a symlink we look in the namespace of the target of the symlink.
Since the target of the symlink is in a non-tagged sysfs directory we
don't have a namespace to look in, and we fail to remove the symlink.

Detect this problem up front and simply don't create symlinks we won't
be able to remove later.  This prevents symlink leakage and fails in
a much clearer and more understandable way.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
 fs/sysfs/symlink.c |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
index f71246b..44bca5f 100644
--- a/fs/sysfs/symlink.c
+++ b/fs/sysfs/symlink.c
@@ -28,6 +28,7 @@ static int sysfs_do_create_link(struct kobject *kobj, struct kobject *target,
 	struct sysfs_dirent *target_sd = NULL;
 	struct sysfs_dirent *sd = NULL;
 	struct sysfs_addrm_cxt acxt;
+	enum kobj_ns_type ns_type;
 	int error;
 
 	BUG_ON(!name);
@@ -58,16 +59,28 @@ static int sysfs_do_create_link(struct kobject *kobj, struct kobject *target,
 	if (!sd)
 		goto out_put;
 
-	if (sysfs_ns_type(parent_sd))
+	ns_type = sysfs_ns_type(parent_sd);
+	if (ns_type)
 		sd->s_ns = target->ktype->namespace(target);
 	sd->s_symlink.target_sd = target_sd;
 	target_sd = NULL;	/* reference is now owned by the symlink */
 
 	sysfs_addrm_start(&acxt, parent_sd);
-	if (warn)
-		error = sysfs_add_one(&acxt, sd);
-	else
-		error = __sysfs_add_one(&acxt, sd);
+	/* Symlinks must be between directories with the same ns_type */
+	if (ns_type == sysfs_ns_type(sd->s_symlink.target_sd->s_parent)) {
+		if (warn)
+			error = sysfs_add_one(&acxt, sd);
+		else
+			error = __sysfs_add_one(&acxt, sd);
+	} else {
+		error = -EINVAL;
+		WARN(1, KERN_WARNING
+			"sysfs: symlink across ns_types %s/%s -> %s/%s\n",
+			parent_sd->s_name,
+			sd->s_name,
+			sd->s_symlink.target_sd->s_parent->s_name,
+			sd->s_symlink.target_sd->s_name);
+	}
 	sysfs_addrm_finish(&acxt);
 
 	if (error)
-- 
1.6.5.2.143.g8cc62


  reply	other threads:[~2010-07-08 16:31 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-16257-10286@https.bugzilla.kernel.org/>
     [not found] ` <20100621150826.762ac9f2.akpm@linux-foundation.org>
2010-06-21 22:22   ` [Bugme-new] [Bug 16257] New: sysfs changes break hwsim and bnep drivers Eric W. Biederman
2010-06-21 22:29     ` Greg KH
2010-06-21 22:55       ` Eric W. Biederman
2010-06-21 23:10         ` Greg KH
2010-06-22  0:05           ` Eric W. Biederman
2010-06-22  3:56             ` Greg KH
2010-07-08 16:31               ` Eric W. Biederman [this message]
2010-07-08 16:37                 ` [RFC][PATCH] mac80211_hwsim: No parent is better than an illegimate one Eric W. Biederman
2010-07-12  6:46                   ` Johannes Berg
2010-07-12 14:23                     ` Eric W. Biederman
2010-07-12 14:29                       ` Johannes Berg
2010-07-08 21:19                 ` [PATCH] sysfs: Don't allow the creation of symlinks we can't remove Greg KH
2010-07-08 22:28                   ` Eric W. Biederman
2010-07-08 23:06                     ` Greg KH
2010-07-19 20:34                       ` Andrew Morton
2010-07-20 20:13                         ` Greg KH
2010-07-21  5:08                           ` [PATCH 0/2] Support untagged symlinks to tagged directories Eric W. Biederman
2010-07-21  5:10                             ` [PATCH 1/2] sysfs: sysfs_delete_link handle symlinks from untagged " Eric W. Biederman
2010-07-21  5:12                               ` [PATCH 2/2] sysfs: allow creating " Eric W. Biederman
2010-07-21 19:02                             ` [PATCH 0/2] Support untagged symlinks " Greg KH
2010-07-21 20:20                               ` Eric W. Biederman
2010-07-21 20:36                                 ` Greg KH
2010-07-22  9:16                             ` [PATCH] Driver-core: Fix bluetooth network device rename regression Eric W. Biederman
2010-07-22 13:38                               ` Kay Sievers
2010-07-22 14:10                                 ` Johannes Berg
2010-07-22 15:30                                   ` Kay Sievers
2010-07-22 17:18                                 ` Eric W. Biederman
2010-07-22 17:44                                   ` Kay Sievers
2010-07-22 18:20                                     ` Johannes Berg
2010-07-22 18:28                                       ` Greg KH
2010-07-22 18:36                                         ` Johannes Berg
2010-07-22 18:54                                           ` Greg KH
2010-07-23  1:31                                             ` Eric W. Biederman
2010-07-26 18:09                                               ` Greg KH
2010-07-27  9:10                                                 ` Kay Sievers
2010-07-27 13:49                                                   ` Greg KH
2010-07-27 13:59                                                     ` Johannes Berg
2010-07-27 15:09                                                       ` Greg KH
2010-07-27 15:32                                                         ` Kay Sievers
2010-07-27 18:17                                                     ` Eric W. Biederman
2010-07-27 18:24                                                       ` Kay Sievers
2010-07-27 18:36                                                         ` Greg KH
2010-07-27 18:44                                                           ` Eric W. Biederman
2010-07-27 18:54                                                             ` Kay Sievers
2010-07-27 20:53                                                               ` Eric W. Biederman
2010-07-28  4:41                                                                 ` Kay Sievers
2010-07-28  5:12                                                                   ` Eric W. Biederman
2010-07-28  5:26                                                                     ` Kay Sievers
2010-07-28  7:57                                                                       ` Eric W. Biederman
2010-07-25  5:43                                             ` [PATCH] Driver-core: Always create class directories for classses that support namespaces Eric W. Biederman
2010-07-26 18:07                                               ` Greg KH
2010-07-22 23:03                                       ` [PATCH] Driver-core: Fix bluetooth network device rename regression Kay Sievers
2010-07-10 22:30                 ` [PATCH] sysfs: Don't allow the creation of symlinks we can't remove Maciej W. Rozycki
2010-07-22  9:54                 ` Johannes Berg
2010-07-22 10:05                   ` Eric W. Biederman
2010-07-22 10:10                     ` Johannes Berg
2010-07-22 10:35                       ` Eric W. Biederman
2010-07-22 10:41                         ` Johannes Berg
2010-07-22 11:27                           ` Eric W. Biederman
2010-07-22 11:30                             ` Johannes Berg
2010-07-08 16:55               ` [Bugme-new] [Bug 16257] New: sysfs changes break hwsim and bnep drivers Eric W. Biederman

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=m1630q7x5v.fsf_-_@fess.ebiederm.org \
    --to=ebiederm@xmission.com \
    --cc=akpm@linux-foundation.org \
    --cc=greg@kroah.com \
    --cc=gregkh@suse.de \
    --cc=johannes@sipsolutions.net \
    --cc=kay.sievers@vrfy.org \
    --cc=macro@linux-mips.org \
    --cc=netdev@vger.kernel.org \
    --cc=rjw@sisk.pl \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.