diff options
Diffstat (limited to 'security/selinux/ss/policydb.c')
-rw-r--r-- | security/selinux/ss/policydb.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index 325551cd7fc7..6bdb0ff6a927 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c | |||
@@ -111,6 +111,11 @@ static struct policydb_compat_info policydb_compat[] = { | |||
111 | .version = POLICYDB_VERSION_POLCAP, | 111 | .version = POLICYDB_VERSION_POLCAP, |
112 | .sym_num = SYM_NUM, | 112 | .sym_num = SYM_NUM, |
113 | .ocon_num = OCON_NUM, | 113 | .ocon_num = OCON_NUM, |
114 | }, | ||
115 | { | ||
116 | .version = POLICYDB_VERSION_PERMISSIVE, | ||
117 | .sym_num = SYM_NUM, | ||
118 | .ocon_num = OCON_NUM, | ||
114 | } | 119 | } |
115 | }; | 120 | }; |
116 | 121 | ||
@@ -194,6 +199,7 @@ static int policydb_init(struct policydb *p) | |||
194 | goto out_free_symtab; | 199 | goto out_free_symtab; |
195 | 200 | ||
196 | ebitmap_init(&p->policycaps); | 201 | ebitmap_init(&p->policycaps); |
202 | ebitmap_init(&p->permissive_map); | ||
197 | 203 | ||
198 | out: | 204 | out: |
199 | return rc; | 205 | return rc; |
@@ -687,6 +693,7 @@ void policydb_destroy(struct policydb *p) | |||
687 | kfree(p->type_attr_map); | 693 | kfree(p->type_attr_map); |
688 | kfree(p->undefined_perms); | 694 | kfree(p->undefined_perms); |
689 | ebitmap_destroy(&p->policycaps); | 695 | ebitmap_destroy(&p->policycaps); |
696 | ebitmap_destroy(&p->permissive_map); | ||
690 | 697 | ||
691 | return; | 698 | return; |
692 | } | 699 | } |
@@ -1570,6 +1577,10 @@ int policydb_read(struct policydb *p, void *fp) | |||
1570 | ebitmap_read(&p->policycaps, fp) != 0) | 1577 | ebitmap_read(&p->policycaps, fp) != 0) |
1571 | goto bad; | 1578 | goto bad; |
1572 | 1579 | ||
1580 | if (p->policyvers >= POLICYDB_VERSION_PERMISSIVE && | ||
1581 | ebitmap_read(&p->permissive_map, fp) != 0) | ||
1582 | goto bad; | ||
1583 | |||
1573 | info = policydb_lookup_compat(p->policyvers); | 1584 | info = policydb_lookup_compat(p->policyvers); |
1574 | if (!info) { | 1585 | if (!info) { |
1575 | printk(KERN_ERR "SELinux: unable to find policy compat info " | 1586 | printk(KERN_ERR "SELinux: unable to find policy compat info " |