From: ebiederm@xmission.com (Eric W. Biederman)
To: Johannes Berg <johannes@sipsolutions.net>,
"John W. Linville" <linville@tuxdriver.com>,
"David S. Miller" <davem@davemloft.net>
Cc: Benjamin Thery <benjamin.thery@bull.net>,
linux-kernel@vger.kernel.org, Tejun Heo <htejun@gmail.com>,
Al Viro <viro@ftp.linux.org.uk>,
Daniel Lezcano <dlezcano@fr.ibm.com>,
"Serge E. Hallyn" <serue@us.ibm.com>,
Pavel Emelyanov <xemul@openvz.org>,
netdev@vger.kernel.org, Greg KH <gregkh@suse.de>
Subject: [PATCH] wireless: Add missing locking to cfg80211_dev_rename
Date: Thu, 08 May 2008 14:30:18 -0700 [thread overview]
Message-ID: <m1ej8ccwlx.fsf_-_@frodo.ebiederm.org> (raw)
In-Reply-To: <20080507190838.GA4467@suse.de> (Greg KH's message of "Wed, 7 May 2008 12:08:38 -0700")
device_rename only performs useful and race free validity
checking at the optional sysfs level so depending on it
for all of the validity checking in cfg80211_dev_rename
is racy.
Instead implement all of the needed validity checking
and locking in cfg80211_dev_rename.
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---
net/wireless/core.c | 33 ++++++++++++++++++++++++++++-----
1 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 80afacd..f1da0b9 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -143,8 +143,11 @@ void cfg80211_put_dev(struct cfg80211_registered_device *drv)
int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
char *newname)
{
+ struct cfg80211_registered_device *drv;
int idx, taken = -1, result, digits;
+ mutex_lock(&cfg80211_drv_mutex);
+
/* prohibit calling the thing phy%d when %d is not its number */
sscanf(newname, PHY_NAME "%d%n", &idx, &taken);
if (taken == strlen(newname) && idx != rdev->idx) {
@@ -156,14 +159,30 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
* deny the name if it is phy<idx> where <idx> is printed
* without leading zeroes. taken == strlen(newname) here
*/
+ result = -EINVAL;
if (taken == strlen(PHY_NAME) + digits)
- return -EINVAL;
+ goto out_unlock;
+ }
+
+
+ /* Ignore nop renames */
+ result = 0;
+ if (strcmp(newname, dev_name(&rdev->wiphy.dev)) == 0)
+ goto out_unlock;
+
+ /* Ensure another device does not already have this name. */
+ list_for_each_entry(drv, &cfg80211_drv_list, list) {
+ result = -EINVAL;
+ if (strcmp(newname, dev_name(&drv->wiphy.dev)) == 0)
+ goto out_unlock;
}
- /* this will check for collisions */
+ /* this will only check for collisions in sysfs
+ * which is not even always compiled in.
+ */
result = device_rename(&rdev->wiphy.dev, newname);
if (result)
- return result;
+ goto out_unlock;
if (!debugfs_rename(rdev->wiphy.debugfsdir->d_parent,
rdev->wiphy.debugfsdir,
@@ -172,9 +191,13 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
printk(KERN_ERR "cfg80211: failed to rename debugfs dir to %s!\n",
newname);
- nl80211_notify_dev_rename(rdev);
+ result = 0;
+out_unlock:
+ mutex_unlock(&cfg80211_drv_mutex);
+ if (result == 0)
+ nl80211_notify_dev_rename(rdev);
- return 0;
+ return result;
}
/* exported functions */
--
1.5.3.rc6.17.g1911
next prev parent reply other threads:[~2008-05-08 21:40 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-06 17:30 [RESEND][PATCH 00/11] sysfs tagged directories Benjamin Thery
2008-05-06 17:30 ` [PATCH 01/11] sysfs: Support for preventing unmounts Benjamin Thery
2008-05-06 17:30 ` [PATCH 02/11] sysfs: sysfs_get_dentry add a sb parameter Benjamin Thery
2008-05-06 17:31 ` [PATCH 03/11] sysfs: Implement __sysfs_get_dentry Benjamin Thery
2008-05-06 17:31 ` [PATCH 04/11] sysfs: Rename Support multiple superblocks Benjamin Thery
2008-05-06 17:31 ` [PATCH 05/11] sysfs: sysfs_chmod_file handle " Benjamin Thery
2008-05-06 17:31 ` [PATCH 06/11] sysfs: Implement sysfs tagged directory support Benjamin Thery
2008-05-06 17:31 ` [PATCH 07/11] sysfs: Implement sysfs_delete_link and sysfs_rename_link Benjamin Thery
2008-05-06 17:31 ` [PATCH 08/11] driver core: Implement tagged directory support for device classes Benjamin Thery
2008-05-06 17:32 ` [PATCH 09/11] netns: Enable tagging for net_class directories in sysfs Benjamin Thery
2008-05-06 17:32 ` [PATCH 10/11] avoid kobject name conflict with different namespaces Benjamin Thery
2008-05-07 18:49 ` Eric W. Biederman
2008-05-07 19:08 ` Greg KH
2008-05-07 20:54 ` Eric W. Biederman
2008-05-08 8:28 ` Cornelia Huck
2008-05-08 19:28 ` Eric W. Biederman
2008-05-09 5:35 ` Cornelia Huck
2008-05-09 18:16 ` Eric W. Biederman
2008-05-08 19:25 ` Eric W. Biederman
2008-05-08 21:30 ` Eric W. Biederman [this message]
2008-05-08 22:12 ` [PATCH] wireless: Add missing locking to cfg80211_dev_rename Serge E. Hallyn
2008-05-08 22:18 ` Johannes Berg
2008-05-08 21:41 ` [PATCH] Fix kobject_rename and !CONFIG_SYSFS Eric W. Biederman
2008-05-12 22:02 ` kobject: " Greg KH
2008-05-13 7:00 ` Eric W. Biederman
2008-05-13 14:25 ` Benjamin Thery
2008-05-13 16:44 ` Greg KH
2008-05-13 17:55 ` [PATCH] Fix kobject_rename and !CONFIG_SYSFS v2 Eric W. Biederman
2008-05-13 18:23 ` Randy.Dunlap
2008-05-13 20:43 ` Eric W. Biederman
2008-05-13 20:16 ` Greg KH
2008-05-13 20:45 ` [PATCH] Fix kobject_rename and !CONFIG_SYSFS v3 Eric W. Biederman
2008-05-13 21:18 ` Randy Dunlap
2008-05-14 4:39 ` [PATCH] Fix kobject_rename and !CONFIG_SYSFS v4 Eric W. Biederman
2008-05-14 5:03 ` Andrew Morton
2008-05-14 9:01 ` Eric W. Biederman
2008-05-14 9:20 ` Andrew Morton
2008-05-14 9:51 ` Benjamin Thery
2008-05-14 9:56 ` Andrew Morton
2008-05-13 19:33 ` kobject: Fix kobject_rename and !CONFIG_SYSFS Benjamin Thery
2008-05-13 20:42 ` Eric W. Biederman
2008-05-06 17:32 ` [PATCH 11/11] sysfs: user namespaces: add ns to user_struct Benjamin Thery
2008-05-06 19:03 ` Serge E. Hallyn
2008-05-06 17:53 ` [RESEND][PATCH 00/11] sysfs tagged directories Greg KH
2008-05-06 18:41 ` Benjamin Thery
2008-05-07 13:19 ` Daniel Lezcano
2008-05-07 13:47 ` Benjamin Thery
2008-05-14 15:07 ` Benjamin Thery
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=m1ej8ccwlx.fsf_-_@frodo.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=benjamin.thery@bull.net \
--cc=davem@davemloft.net \
--cc=dlezcano@fr.ibm.com \
--cc=gregkh@suse.de \
--cc=htejun@gmail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=netdev@vger.kernel.org \
--cc=serue@us.ibm.com \
--cc=viro@ftp.linux.org.uk \
--cc=xemul@openvz.org \
/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.