diff options
| -rw-r--r-- | security/selinux/ss/conditional.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/security/selinux/ss/conditional.c b/security/selinux/ss/conditional.c index 0389263b99ce..c91e150c3087 100644 --- a/security/selinux/ss/conditional.c +++ b/security/selinux/ss/conditional.c | |||
| @@ -223,34 +223,37 @@ int cond_read_bool(struct policydb *p, struct hashtab *h, void *fp) | |||
| 223 | 223 | ||
| 224 | booldatum = kzalloc(sizeof(struct cond_bool_datum), GFP_KERNEL); | 224 | booldatum = kzalloc(sizeof(struct cond_bool_datum), GFP_KERNEL); |
| 225 | if (!booldatum) | 225 | if (!booldatum) |
| 226 | return -1; | 226 | return -ENOMEM; |
| 227 | 227 | ||
| 228 | rc = next_entry(buf, fp, sizeof buf); | 228 | rc = next_entry(buf, fp, sizeof buf); |
| 229 | if (rc < 0) | 229 | if (rc) |
| 230 | goto err; | 230 | goto err; |
| 231 | 231 | ||
| 232 | booldatum->value = le32_to_cpu(buf[0]); | 232 | booldatum->value = le32_to_cpu(buf[0]); |
| 233 | booldatum->state = le32_to_cpu(buf[1]); | 233 | booldatum->state = le32_to_cpu(buf[1]); |
| 234 | 234 | ||
| 235 | rc = -EINVAL; | ||
| 235 | if (!bool_isvalid(booldatum)) | 236 | if (!bool_isvalid(booldatum)) |
| 236 | goto err; | 237 | goto err; |
| 237 | 238 | ||
| 238 | len = le32_to_cpu(buf[2]); | 239 | len = le32_to_cpu(buf[2]); |
| 239 | 240 | ||
| 241 | rc = -ENOMEM; | ||
| 240 | key = kmalloc(len + 1, GFP_KERNEL); | 242 | key = kmalloc(len + 1, GFP_KERNEL); |
| 241 | if (!key) | 243 | if (!key) |
| 242 | goto err; | 244 | goto err; |
| 243 | rc = next_entry(key, fp, len); | 245 | rc = next_entry(key, fp, len); |
| 244 | if (rc < 0) | 246 | if (rc) |
| 245 | goto err; | 247 | goto err; |
| 246 | key[len] = '\0'; | 248 | key[len] = '\0'; |
| 247 | if (hashtab_insert(h, key, booldatum)) | 249 | rc = hashtab_insert(h, key, booldatum); |
| 250 | if (rc) | ||
| 248 | goto err; | 251 | goto err; |
| 249 | 252 | ||
| 250 | return 0; | 253 | return 0; |
| 251 | err: | 254 | err: |
| 252 | cond_destroy_bool(key, booldatum, NULL); | 255 | cond_destroy_bool(key, booldatum, NULL); |
| 253 | return -1; | 256 | return rc; |
| 254 | } | 257 | } |
| 255 | 258 | ||
| 256 | struct cond_insertf_data { | 259 | struct cond_insertf_data { |
