aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--security/selinux/ss/policydb.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c
index 6b576e588725..daecdfb15a9c 100644
--- a/security/selinux/ss/policydb.c
+++ b/security/selinux/ss/policydb.c
@@ -828,9 +828,11 @@ void policydb_destroy(struct policydb *p)
828 hashtab_map(p->range_tr, range_tr_destroy, NULL); 828 hashtab_map(p->range_tr, range_tr_destroy, NULL);
829 hashtab_destroy(p->range_tr); 829 hashtab_destroy(p->range_tr);
830 830
831 for (i = 0; i < p->p_types.nprim; i++) 831 if (p->type_attr_map_array) {
832 ebitmap_destroy(&p->type_attr_map_array[i]); 832 for (i = 0; i < p->p_types.nprim; i++)
833 kvfree(p->type_attr_map_array); 833 ebitmap_destroy(&p->type_attr_map_array[i]);
834 kvfree(p->type_attr_map_array);
835 }
834 836
835 ebitmap_destroy(&p->filename_trans_ttypes); 837 ebitmap_destroy(&p->filename_trans_ttypes);
836 ebitmap_destroy(&p->policycaps); 838 ebitmap_destroy(&p->policycaps);
@@ -2496,10 +2498,13 @@ int policydb_read(struct policydb *p, void *fp)
2496 if (!p->type_attr_map_array) 2498 if (!p->type_attr_map_array)
2497 goto bad; 2499 goto bad;
2498 2500
2501 /* just in case ebitmap_init() becomes more than just a memset(0): */
2502 for (i = 0; i < p->p_types.nprim; i++)
2503 ebitmap_init(&p->type_attr_map_array[i]);
2504
2499 for (i = 0; i < p->p_types.nprim; i++) { 2505 for (i = 0; i < p->p_types.nprim; i++) {
2500 struct ebitmap *e = &p->type_attr_map_array[i]; 2506 struct ebitmap *e = &p->type_attr_map_array[i];
2501 2507
2502 ebitmap_init(e);
2503 if (p->policyvers >= POLICYDB_VERSION_AVTAB) { 2508 if (p->policyvers >= POLICYDB_VERSION_AVTAB) {
2504 rc = ebitmap_read(e, fp); 2509 rc = ebitmap_read(e, fp);
2505 if (rc) 2510 if (rc)