Smack: fix: invalid length set for the result of /smack/access
[cascardo/linux.git] / security / smack / smackfs.c
index 76e520b..381eecf 100644 (file)
@@ -104,9 +104,6 @@ const char *smack_cipso_option = SMACK_CIPSO_OPTION;
 
 
 #define        SEQ_READ_FINISHED       ((loff_t)-1)
-/*
-#define        SEQ_READ_FINISHED       1
-*/
 
 /*
  * Values for parsing cipso rules
@@ -475,10 +472,6 @@ static ssize_t smk_write_load(struct file *file, const char __user *buf,
        if (!capable(CAP_MAC_ADMIN))
                return -EPERM;
 
-/*
-       return smk_write_load_list(file, buf, count, ppos, &smack_rule_list,
-                                       &smack_list_lock);
-*/
        return smk_write_load_list(file, buf, count, ppos, NULL, NULL);
 }
 
@@ -1504,6 +1497,7 @@ static ssize_t smk_write_access(struct file *file, const char __user *buf,
 {
        struct smack_rule rule;
        char *data;
+       int res;
 
        if (!capable(CAP_MAC_ADMIN))
                return -EPERM;
@@ -1515,10 +1509,12 @@ static ssize_t smk_write_access(struct file *file, const char __user *buf,
        if (count < SMK_LOADLEN || smk_parse_rule(data, &rule))
                return -EINVAL;
 
-       data[0] = smk_access(rule.smk_subject, rule.smk_object,
-                            rule.smk_access, NULL) == 0;
+       res = smk_access(rule.smk_subject, rule.smk_object, rule.smk_access,
+                         NULL);
+       data[0] = res == 0 ? '1' : '0';
+       data[1] = '\0';
 
-       simple_transaction_set(file, 1);
+       simple_transaction_set(file, 2);
        return SMK_LOADLEN;
 }