diff options
Diffstat (limited to 'security/selinux')
| -rw-r--r-- | security/selinux/ss/policydb.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index 0ac1021734c0..f05f97a2bc3a 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
| 24 | #include <linux/sched.h> | ||
| 24 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
| 25 | #include <linux/string.h> | 26 | #include <linux/string.h> |
| 26 | #include <linux/errno.h> | 27 | #include <linux/errno.h> |
| @@ -598,6 +599,7 @@ void policydb_destroy(struct policydb *p) | |||
| 598 | struct range_trans *rt, *lrt = NULL; | 599 | struct range_trans *rt, *lrt = NULL; |
| 599 | 600 | ||
| 600 | for (i = 0; i < SYM_NUM; i++) { | 601 | for (i = 0; i < SYM_NUM; i++) { |
| 602 | cond_resched(); | ||
| 601 | hashtab_map(p->symtab[i].table, destroy_f[i], NULL); | 603 | hashtab_map(p->symtab[i].table, destroy_f[i], NULL); |
| 602 | hashtab_destroy(p->symtab[i].table); | 604 | hashtab_destroy(p->symtab[i].table); |
| 603 | } | 605 | } |
| @@ -612,6 +614,7 @@ void policydb_destroy(struct policydb *p) | |||
| 612 | avtab_destroy(&p->te_avtab); | 614 | avtab_destroy(&p->te_avtab); |
| 613 | 615 | ||
| 614 | for (i = 0; i < OCON_NUM; i++) { | 616 | for (i = 0; i < OCON_NUM; i++) { |
| 617 | cond_resched(); | ||
| 615 | c = p->ocontexts[i]; | 618 | c = p->ocontexts[i]; |
| 616 | while (c) { | 619 | while (c) { |
| 617 | ctmp = c; | 620 | ctmp = c; |
| @@ -623,6 +626,7 @@ void policydb_destroy(struct policydb *p) | |||
| 623 | 626 | ||
| 624 | g = p->genfs; | 627 | g = p->genfs; |
| 625 | while (g) { | 628 | while (g) { |
| 629 | cond_resched(); | ||
| 626 | kfree(g->fstype); | 630 | kfree(g->fstype); |
| 627 | c = g->head; | 631 | c = g->head; |
| 628 | while (c) { | 632 | while (c) { |
| @@ -639,18 +643,21 @@ void policydb_destroy(struct policydb *p) | |||
| 639 | cond_policydb_destroy(p); | 643 | cond_policydb_destroy(p); |
| 640 | 644 | ||
| 641 | for (tr = p->role_tr; tr; tr = tr->next) { | 645 | for (tr = p->role_tr; tr; tr = tr->next) { |
| 646 | cond_resched(); | ||
| 642 | kfree(ltr); | 647 | kfree(ltr); |
| 643 | ltr = tr; | 648 | ltr = tr; |
| 644 | } | 649 | } |
| 645 | kfree(ltr); | 650 | kfree(ltr); |
| 646 | 651 | ||
| 647 | for (ra = p->role_allow; ra; ra = ra -> next) { | 652 | for (ra = p->role_allow; ra; ra = ra -> next) { |
| 653 | cond_resched(); | ||
| 648 | kfree(lra); | 654 | kfree(lra); |
| 649 | lra = ra; | 655 | lra = ra; |
| 650 | } | 656 | } |
| 651 | kfree(lra); | 657 | kfree(lra); |
| 652 | 658 | ||
| 653 | for (rt = p->range_tr; rt; rt = rt -> next) { | 659 | for (rt = p->range_tr; rt; rt = rt -> next) { |
| 660 | cond_resched(); | ||
| 654 | if (lrt) { | 661 | if (lrt) { |
| 655 | ebitmap_destroy(&lrt->target_range.level[0].cat); | 662 | ebitmap_destroy(&lrt->target_range.level[0].cat); |
| 656 | ebitmap_destroy(&lrt->target_range.level[1].cat); | 663 | ebitmap_destroy(&lrt->target_range.level[1].cat); |
