aboutsummaryrefslogtreecommitdiffstats
path: root/net/rfkill
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-07-10 15:41:39 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-07-21 12:07:37 -0400
commitf54c142725ad2ba33c3ee627873cb6966bf05447 (patch)
tree4bd86d879222e94c5ee175355242b8a04990334b /net/rfkill
parente2e414d92397c366396d13f627a98a20be92e509 (diff)
rfkill: allow toggling soft state in sysfs again
Apparently there actually _are_ tools that try to set this in sysfs even though it wasn't supposed to be used this way without claiming first. Guess what: now that I've cleaned it all up it doesn't matter and we can simply allow setting the soft-block state in sysfs. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Tested-By: Darren Salt <linux@youmustbejoking.demon.co.uk> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/rfkill')
-rw-r--r--net/rfkill/core.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/net/rfkill/core.c b/net/rfkill/core.c
index 79693fe2001e..6896c0b45b4a 100644
--- a/net/rfkill/core.c
+++ b/net/rfkill/core.c
@@ -648,15 +648,26 @@ static ssize_t rfkill_state_store(struct device *dev,
648 struct device_attribute *attr, 648 struct device_attribute *attr,
649 const char *buf, size_t count) 649 const char *buf, size_t count)
650{ 650{
651 /* 651 struct rfkill *rfkill = to_rfkill(dev);
652 * The intention was that userspace can only take control over 652 unsigned long state;
653 * a given device when/if rfkill-input doesn't control it due 653 int err;
654 * to user_claim. Since user_claim is currently unsupported, 654
655 * we never support changing the state from userspace -- this 655 if (!capable(CAP_NET_ADMIN))
656 * can be implemented again later. 656 return -EPERM;
657 */ 657
658 err = strict_strtoul(buf, 0, &state);
659 if (err)
660 return err;
661
662 if (state != RFKILL_USER_STATE_SOFT_BLOCKED &&
663 state != RFKILL_USER_STATE_UNBLOCKED)
664 return -EINVAL;
665
666 mutex_lock(&rfkill_global_mutex);
667 rfkill_set_block(rfkill, state == RFKILL_USER_STATE_SOFT_BLOCKED);
668 mutex_unlock(&rfkill_global_mutex);
658 669
659 return -EPERM; 670 return err ?: count;
660} 671}
661 672
662static ssize_t rfkill_claim_show(struct device *dev, 673static ssize_t rfkill_claim_show(struct device *dev,