From: NeilBrown <neilb@suse.de>
Date: Mon, 10 Jul 2006 11:44:19 +0000 (-0700)
Subject: [PATCH] md: require CAP_SYS_ADMIN for (re-)configuring md devices via sysfs
X-Git-Tag: firefly_0821_release~34333
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=67463acb646904d76a8e237cc31eaa87872f30cc;p=firefly-linux-kernel-4.4.55.git

[PATCH] md: require CAP_SYS_ADMIN for (re-)configuring md devices via sysfs

The ioctl requires CAP_SYS_ADMIN, so sysfs should too.  Note that we don't
require CAP_SYS_ADMIN for reading attributes even though the ioctl does.
There is no reason to limit the read access, and much of the information is
already available via /proc/mdstat

Cc: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---

diff --git a/drivers/md/md.c b/drivers/md/md.c
index c0da5eedc245..a5286beddcf5 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1926,6 +1926,8 @@ rdev_attr_store(struct kobject *kobj, struct attribute *attr,
 
 	if (!entry->store)
 		return -EIO;
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
 	return entry->store(rdev, page, length);
 }
 
@@ -2859,6 +2861,8 @@ md_attr_store(struct kobject *kobj, struct attribute *attr,
 
 	if (!entry->store)
 		return -EIO;
+	if (!capable(CAP_SYS_ADMIN))
+		return -EACCES;
 	rv = mddev_lock(mddev);
 	if (!rv) {
 		rv = entry->store(mddev, page, length);