selinux: fix error codes in cond_read_bool()
PATCH v2 6/7 selinux: fix error codes in cond_read_bool()
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 <[email protected]>
---
V2: updated the function "if (rc)" instead of "if (rc < 0)" throughout
security/selinux/ss/conditional.c +8 -5
@@ -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 {
--
This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to [email protected] with the words "unsubscribe selinux" without quotes as the message.