diff options
| author | Dan Carpenter <error27@gmail.com> | 2010-06-12 14:52:19 -0400 |
|---|---|---|
| committer | James Morris <jmorris@namei.org> | 2010-08-02 01:35:02 -0400 |
| commit | 9d623b17a740d5a85c12108cdc71c64fb15484fc (patch) | |
| tree | 15434839a75f9c46c53a201520c6c859fad3c74b /security | |
| parent | 5241c1074f6e2f2276d45d857eb5d19fbdc2e4b2 (diff) | |
selinux: fix error codes in cond_read_av_list()
After this patch cond_read_av_list() no longer returns -1 for any
errors. It just propagates error code back from lower levels. Those can
either be -EINVAL or -ENOMEM.
I also modified cond_insertf() since cond_read_av_list() passes that as a
function pointer to avtab_read_item(). It isn't used anywhere else.
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>
Diffstat (limited to 'security')
| -rw-r--r-- | security/selinux/ss/conditional.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/security/selinux/ss/conditional.c b/security/selinux/ss/conditional.c index 775418aa0a8e..aac40c7ff28c 100644 --- a/security/selinux/ss/conditional.c +++ b/security/selinux/ss/conditional.c | |||
| @@ -263,7 +263,7 @@ static int cond_insertf(struct avtab *a, struct avtab_key *k, struct avtab_datum | |||
| 263 | struct cond_av_list *other = data->other, *list, *cur; | 263 | struct cond_av_list *other = data->other, *list, *cur; |
| 264 | struct avtab_node *node_ptr; | 264 | struct avtab_node *node_ptr; |
| 265 | u8 found; | 265 | u8 found; |
| 266 | 266 | int rc = -EINVAL; | |
| 267 | 267 | ||
| 268 | /* | 268 | /* |
| 269 | * For type rules we have to make certain there aren't any | 269 | * For type rules we have to make certain there aren't any |
| @@ -313,12 +313,15 @@ static int cond_insertf(struct avtab *a, struct avtab_key *k, struct avtab_datum | |||
| 313 | node_ptr = avtab_insert_nonunique(&p->te_cond_avtab, k, d); | 313 | node_ptr = avtab_insert_nonunique(&p->te_cond_avtab, k, d); |
| 314 | if (!node_ptr) { | 314 | if (!node_ptr) { |
| 315 | printk(KERN_ERR "SELinux: could not insert rule.\n"); | 315 | printk(KERN_ERR "SELinux: could not insert rule.\n"); |
| 316 | rc = -ENOMEM; | ||
| 316 | goto err; | 317 | goto err; |
| 317 | } | 318 | } |
| 318 | 319 | ||
| 319 | list = kzalloc(sizeof(struct cond_av_list), GFP_KERNEL); | 320 | list = kzalloc(sizeof(struct cond_av_list), GFP_KERNEL); |
| 320 | if (!list) | 321 | if (!list) { |
| 322 | rc = -ENOMEM; | ||
| 321 | goto err; | 323 | goto err; |
| 324 | } | ||
| 322 | 325 | ||
| 323 | list->node = node_ptr; | 326 | list->node = node_ptr; |
| 324 | if (!data->head) | 327 | if (!data->head) |
| @@ -331,7 +334,7 @@ static int cond_insertf(struct avtab *a, struct avtab_key *k, struct avtab_datum | |||
| 331 | err: | 334 | err: |
| 332 | cond_av_list_destroy(data->head); | 335 | cond_av_list_destroy(data->head); |
| 333 | data->head = NULL; | 336 | data->head = NULL; |
| 334 | return -1; | 337 | return rc; |
| 335 | } | 338 | } |
| 336 | 339 | ||
| 337 | static int cond_read_av_list(struct policydb *p, void *fp, struct cond_av_list **ret_list, struct cond_av_list *other) | 340 | static int cond_read_av_list(struct policydb *p, void *fp, struct cond_av_list **ret_list, struct cond_av_list *other) |
| @@ -345,8 +348,8 @@ static int cond_read_av_list(struct policydb *p, void *fp, struct cond_av_list * | |||
| 345 | 348 | ||
| 346 | len = 0; | 349 | len = 0; |
| 347 | rc = next_entry(buf, fp, sizeof(u32)); | 350 | rc = next_entry(buf, fp, sizeof(u32)); |
| 348 | if (rc < 0) | 351 | if (rc) |
| 349 | return -1; | 352 | return rc; |
| 350 | 353 | ||
| 351 | len = le32_to_cpu(buf[0]); | 354 | len = le32_to_cpu(buf[0]); |
| 352 | if (len == 0) | 355 | if (len == 0) |
| @@ -361,7 +364,6 @@ static int cond_read_av_list(struct policydb *p, void *fp, struct cond_av_list * | |||
| 361 | &data); | 364 | &data); |
| 362 | if (rc) | 365 | if (rc) |
| 363 | return rc; | 366 | return rc; |
| 364 | |||
| 365 | } | 367 | } |
| 366 | 368 | ||
| 367 | *ret_list = data.head; | 369 | *ret_list = data.head; |
