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>
This commit is contained in:
parent
e2e414d923
commit
f54c142725
|
@ -648,15 +648,26 @@ static ssize_t rfkill_state_store(struct device *dev,
|
||||||
struct device_attribute *attr,
|
struct device_attribute *attr,
|
||||||
const char *buf, size_t count)
|
const char *buf, size_t count)
|
||||||
{
|
{
|
||||||
/*
|
struct rfkill *rfkill = to_rfkill(dev);
|
||||||
* The intention was that userspace can only take control over
|
unsigned long state;
|
||||||
* a given device when/if rfkill-input doesn't control it due
|
int err;
|
||||||
* to user_claim. Since user_claim is currently unsupported,
|
|
||||||
* we never support changing the state from userspace -- this
|
|
||||||
* can be implemented again later.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
if (!capable(CAP_NET_ADMIN))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
|
err = strict_strtoul(buf, 0, &state);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
if (state != RFKILL_USER_STATE_SOFT_BLOCKED &&
|
||||||
|
state != RFKILL_USER_STATE_UNBLOCKED)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
mutex_lock(&rfkill_global_mutex);
|
||||||
|
rfkill_set_block(rfkill, state == RFKILL_USER_STATE_SOFT_BLOCKED);
|
||||||
|
mutex_unlock(&rfkill_global_mutex);
|
||||||
|
|
||||||
|
return err ?: count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t rfkill_claim_show(struct device *dev,
|
static ssize_t rfkill_claim_show(struct device *dev,
|
||||||
|
|
Loading…
Reference in New Issue