selinux: fix error codes in cond_read_bool()
authorDan Carpenter <error27@gmail.com>
Sat, 12 Jun 2010 18:56:01 +0000 (20:56 +0200)
committerJames Morris <jmorris@namei.org>
Mon, 2 Aug 2010 05:35:04 +0000 (15:35 +1000)
The original code always returned -1 (-EPERM) on error.  The new code
returns either -ENOMEM, or -EINVAL or it propagates the error codes from
lower level functions next_entry() or hashtab_insert().

next_entry() returns -EINVAL.
hashtab_insert() returns -EINVAL, -EEXIST, or -ENOMEM.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Acked-by: Stephen D. Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
security/selinux/ss/conditional.c

index 0389263b99ce2b3a45b43328b851cbcbe20ef7ac..c91e150c3087d78127eb8ca6cc6faccf04e9cd32 100644 (file)
@@ -223,34 +223,37 @@ int cond_read_bool(struct policydb *p, struct hashtab *h, void *fp)
 
        booldatum = kzalloc(sizeof(struct cond_bool_datum), GFP_KERNEL);
        if (!booldatum)
-               return -1;
+               return -ENOMEM;
 
        rc = next_entry(buf, fp, sizeof buf);
-       if (rc < 0)
+       if (rc)
                goto err;
 
        booldatum->value = le32_to_cpu(buf[0]);
        booldatum->state = le32_to_cpu(buf[1]);
 
+       rc = -EINVAL;
        if (!bool_isvalid(booldatum))
                goto err;
 
        len = le32_to_cpu(buf[2]);
 
+       rc = -ENOMEM;
        key = kmalloc(len + 1, GFP_KERNEL);
        if (!key)
                goto err;
        rc = next_entry(key, fp, len);
-       if (rc < 0)
+       if (rc)
                goto err;
        key[len] = '\0';
-       if (hashtab_insert(h, key, booldatum))
+       rc = hashtab_insert(h, key, booldatum);
+       if (rc)
                goto err;
 
        return 0;
 err:
        cond_destroy_bool(key, booldatum, NULL);
-       return -1;
+       return rc;
 }
 
 struct cond_insertf_data {