mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
smack: simplify write handlers of sysfs entries
Use the convenient 'kstrto{u,s}32_from_user()' to simplify write
handlers of /smack/{doi,direct,mapped,logging,ptrace} sysfs entries.
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
This commit is contained in:
parent
b2faddc131
commit
b78fede1c6
|
|
@ -1598,24 +1598,17 @@ static ssize_t smk_read_doi(struct file *filp, char __user *buf,
|
|||
static ssize_t smk_write_doi(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
char temp[80];
|
||||
unsigned long u;
|
||||
int ret;
|
||||
u32 u;
|
||||
|
||||
if (!smack_privileged(CAP_MAC_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (count >= sizeof(temp) || count == 0)
|
||||
return -EINVAL;
|
||||
ret = kstrtou32_from_user(buf, count, 10, &u);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
if (copy_from_user(temp, buf, count) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
temp[count] = '\0';
|
||||
|
||||
if (kstrtoul(temp, 10, &u))
|
||||
return -EINVAL;
|
||||
|
||||
if (u == CIPSO_V4_DOI_UNKNOWN || u > U32_MAX)
|
||||
if (u == CIPSO_V4_DOI_UNKNOWN)
|
||||
return -EINVAL;
|
||||
|
||||
return smk_cipso_doi(u, GFP_KERNEL) ? : count;
|
||||
|
|
@ -1664,22 +1657,14 @@ static ssize_t smk_write_direct(struct file *file, const char __user *buf,
|
|||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct smack_known *skp;
|
||||
char temp[80];
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
if (!smack_privileged(CAP_MAC_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (count >= sizeof(temp) || count == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(temp, buf, count) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
temp[count] = '\0';
|
||||
|
||||
if (sscanf(temp, "%d", &i) != 1)
|
||||
return -EINVAL;
|
||||
ret = kstrtos32_from_user(buf, count, 10, &i);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Don't do anything if the value hasn't actually changed.
|
||||
|
|
@ -1742,22 +1727,14 @@ static ssize_t smk_write_mapped(struct file *file, const char __user *buf,
|
|||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct smack_known *skp;
|
||||
char temp[80];
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
if (!smack_privileged(CAP_MAC_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (count >= sizeof(temp) || count == 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(temp, buf, count) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
temp[count] = '\0';
|
||||
|
||||
if (sscanf(temp, "%d", &i) != 1)
|
||||
return -EINVAL;
|
||||
ret = kstrtos32_from_user(buf, count, 10, &i);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Don't do anything if the value hasn't actually changed.
|
||||
|
|
@ -2179,22 +2156,15 @@ static ssize_t smk_read_logging(struct file *filp, char __user *buf,
|
|||
static ssize_t smk_write_logging(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
char temp[32];
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
if (!smack_privileged(CAP_MAC_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (count >= sizeof(temp) || count == 0)
|
||||
return -EINVAL;
|
||||
ret = kstrtos32_from_user(buf, count, 10, &i);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
if (copy_from_user(temp, buf, count) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
temp[count] = '\0';
|
||||
|
||||
if (sscanf(temp, "%d", &i) != 1)
|
||||
return -EINVAL;
|
||||
if (i < 0 || i > 3)
|
||||
return -EINVAL;
|
||||
log_policy = i;
|
||||
|
|
@ -2838,22 +2808,15 @@ static ssize_t smk_read_ptrace(struct file *filp, char __user *buf,
|
|||
static ssize_t smk_write_ptrace(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
char temp[32];
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
if (!smack_privileged(CAP_MAC_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (*ppos != 0 || count >= sizeof(temp) || count == 0)
|
||||
return -EINVAL;
|
||||
ret = kstrtos32_from_user(buf, count, 10, &i);
|
||||
if (unlikely(ret))
|
||||
return ret;
|
||||
|
||||
if (copy_from_user(temp, buf, count) != 0)
|
||||
return -EFAULT;
|
||||
|
||||
temp[count] = '\0';
|
||||
|
||||
if (sscanf(temp, "%d", &i) != 1)
|
||||
return -EINVAL;
|
||||
if (i < SMACK_PTRACE_DEFAULT || i > SMACK_PTRACE_MAX)
|
||||
return -EINVAL;
|
||||
smack_ptrace_rule = i;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user