selinux: dynamic class/perm discovery
[safe/jmp/linux-2.6] / security / selinux / ss / policydb.c
1 /*
2  * Implementation of the policy database.
3  *
4  * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
5  */
6
7 /*
8  * Updated: Trusted Computer Solutions, Inc. <dgoeddel@trustedcs.com>
9  *
10  *      Support for enhanced MLS infrastructure.
11  *
12  * Updated: Frank Mayer <mayerf@tresys.com> and Karl MacMillan <kmacmillan@tresys.com>
13  *
14  *      Added conditional policy language extensions
15  *
16  * Updated: Hewlett-Packard <paul.moore@hp.com>
17  *
18  *      Added support for the policy capability bitmap
19  *
20  * Copyright (C) 2007 Hewlett-Packard Development Company, L.P.
21  * Copyright (C) 2004-2005 Trusted Computer Solutions, Inc.
22  * Copyright (C) 2003 - 2004 Tresys Technology, LLC
23  *      This program is free software; you can redistribute it and/or modify
24  *      it under the terms of the GNU General Public License as published by
25  *      the Free Software Foundation, version 2.
26  */
27
28 #include <linux/kernel.h>
29 #include <linux/sched.h>
30 #include <linux/slab.h>
31 #include <linux/string.h>
32 #include <linux/errno.h>
33 #include <linux/audit.h>
34 #include "security.h"
35
36 #include "policydb.h"
37 #include "conditional.h"
38 #include "mls.h"
39
40 #define _DEBUG_HASHES
41
42 #ifdef DEBUG_HASHES
43 static char *symtab_name[SYM_NUM] = {
44         "common prefixes",
45         "classes",
46         "roles",
47         "types",
48         "users",
49         "bools",
50         "levels",
51         "categories",
52 };
53 #endif
54
55 int selinux_mls_enabled;
56
57 static unsigned int symtab_sizes[SYM_NUM] = {
58         2,
59         32,
60         16,
61         512,
62         128,
63         16,
64         16,
65         16,
66 };
67
68 struct policydb_compat_info {
69         int version;
70         int sym_num;
71         int ocon_num;
72 };
73
74 /* These need to be updated if SYM_NUM or OCON_NUM changes */
75 static struct policydb_compat_info policydb_compat[] = {
76         {
77                 .version        = POLICYDB_VERSION_BASE,
78                 .sym_num        = SYM_NUM - 3,
79                 .ocon_num       = OCON_NUM - 1,
80         },
81         {
82                 .version        = POLICYDB_VERSION_BOOL,
83                 .sym_num        = SYM_NUM - 2,
84                 .ocon_num       = OCON_NUM - 1,
85         },
86         {
87                 .version        = POLICYDB_VERSION_IPV6,
88                 .sym_num        = SYM_NUM - 2,
89                 .ocon_num       = OCON_NUM,
90         },
91         {
92                 .version        = POLICYDB_VERSION_NLCLASS,
93                 .sym_num        = SYM_NUM - 2,
94                 .ocon_num       = OCON_NUM,
95         },
96         {
97                 .version        = POLICYDB_VERSION_MLS,
98                 .sym_num        = SYM_NUM,
99                 .ocon_num       = OCON_NUM,
100         },
101         {
102                 .version        = POLICYDB_VERSION_AVTAB,
103                 .sym_num        = SYM_NUM,
104                 .ocon_num       = OCON_NUM,
105         },
106         {
107                 .version        = POLICYDB_VERSION_RANGETRANS,
108                 .sym_num        = SYM_NUM,
109                 .ocon_num       = OCON_NUM,
110         },
111         {
112                 .version        = POLICYDB_VERSION_POLCAP,
113                 .sym_num        = SYM_NUM,
114                 .ocon_num       = OCON_NUM,
115         },
116         {
117                 .version        = POLICYDB_VERSION_PERMISSIVE,
118                 .sym_num        = SYM_NUM,
119                 .ocon_num       = OCON_NUM,
120         },
121         {
122                 .version        = POLICYDB_VERSION_BOUNDARY,
123                 .sym_num        = SYM_NUM,
124                 .ocon_num       = OCON_NUM,
125         },
126 };
127
128 static struct policydb_compat_info *policydb_lookup_compat(int version)
129 {
130         int i;
131         struct policydb_compat_info *info = NULL;
132
133         for (i = 0; i < ARRAY_SIZE(policydb_compat); i++) {
134                 if (policydb_compat[i].version == version) {
135                         info = &policydb_compat[i];
136                         break;
137                 }
138         }
139         return info;
140 }
141
142 /*
143  * Initialize the role table.
144  */
145 static int roles_init(struct policydb *p)
146 {
147         char *key = NULL;
148         int rc;
149         struct role_datum *role;
150
151         role = kzalloc(sizeof(*role), GFP_KERNEL);
152         if (!role) {
153                 rc = -ENOMEM;
154                 goto out;
155         }
156         role->value = ++p->p_roles.nprim;
157         if (role->value != OBJECT_R_VAL) {
158                 rc = -EINVAL;
159                 goto out_free_role;
160         }
161         key = kmalloc(strlen(OBJECT_R)+1, GFP_KERNEL);
162         if (!key) {
163                 rc = -ENOMEM;
164                 goto out_free_role;
165         }
166         strcpy(key, OBJECT_R);
167         rc = hashtab_insert(p->p_roles.table, key, role);
168         if (rc)
169                 goto out_free_key;
170 out:
171         return rc;
172
173 out_free_key:
174         kfree(key);
175 out_free_role:
176         kfree(role);
177         goto out;
178 }
179
180 /*
181  * Initialize a policy database structure.
182  */
183 static int policydb_init(struct policydb *p)
184 {
185         int i, rc;
186
187         memset(p, 0, sizeof(*p));
188
189         for (i = 0; i < SYM_NUM; i++) {
190                 rc = symtab_init(&p->symtab[i], symtab_sizes[i]);
191                 if (rc)
192                         goto out_free_symtab;
193         }
194
195         rc = avtab_init(&p->te_avtab);
196         if (rc)
197                 goto out_free_symtab;
198
199         rc = roles_init(p);
200         if (rc)
201                 goto out_free_symtab;
202
203         rc = cond_policydb_init(p);
204         if (rc)
205                 goto out_free_symtab;
206
207         ebitmap_init(&p->policycaps);
208         ebitmap_init(&p->permissive_map);
209
210 out:
211         return rc;
212
213 out_free_symtab:
214         for (i = 0; i < SYM_NUM; i++)
215                 hashtab_destroy(p->symtab[i].table);
216         goto out;
217 }
218
219 /*
220  * The following *_index functions are used to
221  * define the val_to_name and val_to_struct arrays
222  * in a policy database structure.  The val_to_name
223  * arrays are used when converting security context
224  * structures into string representations.  The
225  * val_to_struct arrays are used when the attributes
226  * of a class, role, or user are needed.
227  */
228
229 static int common_index(void *key, void *datum, void *datap)
230 {
231         struct policydb *p;
232         struct common_datum *comdatum;
233
234         comdatum = datum;
235         p = datap;
236         if (!comdatum->value || comdatum->value > p->p_commons.nprim)
237                 return -EINVAL;
238         p->p_common_val_to_name[comdatum->value - 1] = key;
239         return 0;
240 }
241
242 static int class_index(void *key, void *datum, void *datap)
243 {
244         struct policydb *p;
245         struct class_datum *cladatum;
246
247         cladatum = datum;
248         p = datap;
249         if (!cladatum->value || cladatum->value > p->p_classes.nprim)
250                 return -EINVAL;
251         p->p_class_val_to_name[cladatum->value - 1] = key;
252         p->class_val_to_struct[cladatum->value - 1] = cladatum;
253         return 0;
254 }
255
256 static int role_index(void *key, void *datum, void *datap)
257 {
258         struct policydb *p;
259         struct role_datum *role;
260
261         role = datum;
262         p = datap;
263         if (!role->value
264             || role->value > p->p_roles.nprim
265             || role->bounds > p->p_roles.nprim)
266                 return -EINVAL;
267         p->p_role_val_to_name[role->value - 1] = key;
268         p->role_val_to_struct[role->value - 1] = role;
269         return 0;
270 }
271
272 static int type_index(void *key, void *datum, void *datap)
273 {
274         struct policydb *p;
275         struct type_datum *typdatum;
276
277         typdatum = datum;
278         p = datap;
279
280         if (typdatum->primary) {
281                 if (!typdatum->value
282                     || typdatum->value > p->p_types.nprim
283                     || typdatum->bounds > p->p_types.nprim)
284                         return -EINVAL;
285                 p->p_type_val_to_name[typdatum->value - 1] = key;
286                 p->type_val_to_struct[typdatum->value - 1] = typdatum;
287         }
288
289         return 0;
290 }
291
292 static int user_index(void *key, void *datum, void *datap)
293 {
294         struct policydb *p;
295         struct user_datum *usrdatum;
296
297         usrdatum = datum;
298         p = datap;
299         if (!usrdatum->value
300             || usrdatum->value > p->p_users.nprim
301             || usrdatum->bounds > p->p_users.nprim)
302                 return -EINVAL;
303         p->p_user_val_to_name[usrdatum->value - 1] = key;
304         p->user_val_to_struct[usrdatum->value - 1] = usrdatum;
305         return 0;
306 }
307
308 static int sens_index(void *key, void *datum, void *datap)
309 {
310         struct policydb *p;
311         struct level_datum *levdatum;
312
313         levdatum = datum;
314         p = datap;
315
316         if (!levdatum->isalias) {
317                 if (!levdatum->level->sens ||
318                     levdatum->level->sens > p->p_levels.nprim)
319                         return -EINVAL;
320                 p->p_sens_val_to_name[levdatum->level->sens - 1] = key;
321         }
322
323         return 0;
324 }
325
326 static int cat_index(void *key, void *datum, void *datap)
327 {
328         struct policydb *p;
329         struct cat_datum *catdatum;
330
331         catdatum = datum;
332         p = datap;
333
334         if (!catdatum->isalias) {
335                 if (!catdatum->value || catdatum->value > p->p_cats.nprim)
336                         return -EINVAL;
337                 p->p_cat_val_to_name[catdatum->value - 1] = key;
338         }
339
340         return 0;
341 }
342
343 static int (*index_f[SYM_NUM]) (void *key, void *datum, void *datap) =
344 {
345         common_index,
346         class_index,
347         role_index,
348         type_index,
349         user_index,
350         cond_index_bool,
351         sens_index,
352         cat_index,
353 };
354
355 /*
356  * Define the common val_to_name array and the class
357  * val_to_name and val_to_struct arrays in a policy
358  * database structure.
359  *
360  * Caller must clean up upon failure.
361  */
362 static int policydb_index_classes(struct policydb *p)
363 {
364         int rc;
365
366         p->p_common_val_to_name =
367                 kmalloc(p->p_commons.nprim * sizeof(char *), GFP_KERNEL);
368         if (!p->p_common_val_to_name) {
369                 rc = -ENOMEM;
370                 goto out;
371         }
372
373         rc = hashtab_map(p->p_commons.table, common_index, p);
374         if (rc)
375                 goto out;
376
377         p->class_val_to_struct =
378                 kmalloc(p->p_classes.nprim * sizeof(*(p->class_val_to_struct)), GFP_KERNEL);
379         if (!p->class_val_to_struct) {
380                 rc = -ENOMEM;
381                 goto out;
382         }
383
384         p->p_class_val_to_name =
385                 kmalloc(p->p_classes.nprim * sizeof(char *), GFP_KERNEL);
386         if (!p->p_class_val_to_name) {
387                 rc = -ENOMEM;
388                 goto out;
389         }
390
391         rc = hashtab_map(p->p_classes.table, class_index, p);
392 out:
393         return rc;
394 }
395
396 #ifdef DEBUG_HASHES
397 static void symtab_hash_eval(struct symtab *s)
398 {
399         int i;
400
401         for (i = 0; i < SYM_NUM; i++) {
402                 struct hashtab *h = s[i].table;
403                 struct hashtab_info info;
404
405                 hashtab_stat(h, &info);
406                 printk(KERN_DEBUG "SELinux: %s:  %d entries and %d/%d buckets used, "
407                        "longest chain length %d\n", symtab_name[i], h->nel,
408                        info.slots_used, h->size, info.max_chain_len);
409         }
410 }
411 #endif
412
413 /*
414  * Define the other val_to_name and val_to_struct arrays
415  * in a policy database structure.
416  *
417  * Caller must clean up on failure.
418  */
419 static int policydb_index_others(struct policydb *p)
420 {
421         int i, rc = 0;
422
423         printk(KERN_DEBUG "SELinux:  %d users, %d roles, %d types, %d bools",
424                p->p_users.nprim, p->p_roles.nprim, p->p_types.nprim, p->p_bools.nprim);
425         if (selinux_mls_enabled)
426                 printk(", %d sens, %d cats", p->p_levels.nprim,
427                        p->p_cats.nprim);
428         printk("\n");
429
430         printk(KERN_DEBUG "SELinux:  %d classes, %d rules\n",
431                p->p_classes.nprim, p->te_avtab.nel);
432
433 #ifdef DEBUG_HASHES
434         avtab_hash_eval(&p->te_avtab, "rules");
435         symtab_hash_eval(p->symtab);
436 #endif
437
438         p->role_val_to_struct =
439                 kmalloc(p->p_roles.nprim * sizeof(*(p->role_val_to_struct)),
440                         GFP_KERNEL);
441         if (!p->role_val_to_struct) {
442                 rc = -ENOMEM;
443                 goto out;
444         }
445
446         p->user_val_to_struct =
447                 kmalloc(p->p_users.nprim * sizeof(*(p->user_val_to_struct)),
448                         GFP_KERNEL);
449         if (!p->user_val_to_struct) {
450                 rc = -ENOMEM;
451                 goto out;
452         }
453
454         p->type_val_to_struct =
455                 kmalloc(p->p_types.nprim * sizeof(*(p->type_val_to_struct)),
456                         GFP_KERNEL);
457         if (!p->type_val_to_struct) {
458                 rc = -ENOMEM;
459                 goto out;
460         }
461
462         if (cond_init_bool_indexes(p)) {
463                 rc = -ENOMEM;
464                 goto out;
465         }
466
467         for (i = SYM_ROLES; i < SYM_NUM; i++) {
468                 p->sym_val_to_name[i] =
469                         kmalloc(p->symtab[i].nprim * sizeof(char *), GFP_KERNEL);
470                 if (!p->sym_val_to_name[i]) {
471                         rc = -ENOMEM;
472                         goto out;
473                 }
474                 rc = hashtab_map(p->symtab[i].table, index_f[i], p);
475                 if (rc)
476                         goto out;
477         }
478
479 out:
480         return rc;
481 }
482
483 /*
484  * The following *_destroy functions are used to
485  * free any memory allocated for each kind of
486  * symbol data in the policy database.
487  */
488
489 static int perm_destroy(void *key, void *datum, void *p)
490 {
491         kfree(key);
492         kfree(datum);
493         return 0;
494 }
495
496 static int common_destroy(void *key, void *datum, void *p)
497 {
498         struct common_datum *comdatum;
499
500         kfree(key);
501         comdatum = datum;
502         hashtab_map(comdatum->permissions.table, perm_destroy, NULL);
503         hashtab_destroy(comdatum->permissions.table);
504         kfree(datum);
505         return 0;
506 }
507
508 static int cls_destroy(void *key, void *datum, void *p)
509 {
510         struct class_datum *cladatum;
511         struct constraint_node *constraint, *ctemp;
512         struct constraint_expr *e, *etmp;
513
514         kfree(key);
515         cladatum = datum;
516         hashtab_map(cladatum->permissions.table, perm_destroy, NULL);
517         hashtab_destroy(cladatum->permissions.table);
518         constraint = cladatum->constraints;
519         while (constraint) {
520                 e = constraint->expr;
521                 while (e) {
522                         ebitmap_destroy(&e->names);
523                         etmp = e;
524                         e = e->next;
525                         kfree(etmp);
526                 }
527                 ctemp = constraint;
528                 constraint = constraint->next;
529                 kfree(ctemp);
530         }
531
532         constraint = cladatum->validatetrans;
533         while (constraint) {
534                 e = constraint->expr;
535                 while (e) {
536                         ebitmap_destroy(&e->names);
537                         etmp = e;
538                         e = e->next;
539                         kfree(etmp);
540                 }
541                 ctemp = constraint;
542                 constraint = constraint->next;
543                 kfree(ctemp);
544         }
545
546         kfree(cladatum->comkey);
547         kfree(datum);
548         return 0;
549 }
550
551 static int role_destroy(void *key, void *datum, void *p)
552 {
553         struct role_datum *role;
554
555         kfree(key);
556         role = datum;
557         ebitmap_destroy(&role->dominates);
558         ebitmap_destroy(&role->types);
559         kfree(datum);
560         return 0;
561 }
562
563 static int type_destroy(void *key, void *datum, void *p)
564 {
565         kfree(key);
566         kfree(datum);
567         return 0;
568 }
569
570 static int user_destroy(void *key, void *datum, void *p)
571 {
572         struct user_datum *usrdatum;
573
574         kfree(key);
575         usrdatum = datum;
576         ebitmap_destroy(&usrdatum->roles);
577         ebitmap_destroy(&usrdatum->range.level[0].cat);
578         ebitmap_destroy(&usrdatum->range.level[1].cat);
579         ebitmap_destroy(&usrdatum->dfltlevel.cat);
580         kfree(datum);
581         return 0;
582 }
583
584 static int sens_destroy(void *key, void *datum, void *p)
585 {
586         struct level_datum *levdatum;
587
588         kfree(key);
589         levdatum = datum;
590         ebitmap_destroy(&levdatum->level->cat);
591         kfree(levdatum->level);
592         kfree(datum);
593         return 0;
594 }
595
596 static int cat_destroy(void *key, void *datum, void *p)
597 {
598         kfree(key);
599         kfree(datum);
600         return 0;
601 }
602
603 static int (*destroy_f[SYM_NUM]) (void *key, void *datum, void *datap) =
604 {
605         common_destroy,
606         cls_destroy,
607         role_destroy,
608         type_destroy,
609         user_destroy,
610         cond_destroy_bool,
611         sens_destroy,
612         cat_destroy,
613 };
614
615 static void ocontext_destroy(struct ocontext *c, int i)
616 {
617         context_destroy(&c->context[0]);
618         context_destroy(&c->context[1]);
619         if (i == OCON_ISID || i == OCON_FS ||
620             i == OCON_NETIF || i == OCON_FSUSE)
621                 kfree(c->u.name);
622         kfree(c);
623 }
624
625 /*
626  * Free any memory allocated by a policy database structure.
627  */
628 void policydb_destroy(struct policydb *p)
629 {
630         struct ocontext *c, *ctmp;
631         struct genfs *g, *gtmp;
632         int i;
633         struct role_allow *ra, *lra = NULL;
634         struct role_trans *tr, *ltr = NULL;
635         struct range_trans *rt, *lrt = NULL;
636
637         for (i = 0; i < SYM_NUM; i++) {
638                 cond_resched();
639                 hashtab_map(p->symtab[i].table, destroy_f[i], NULL);
640                 hashtab_destroy(p->symtab[i].table);
641         }
642
643         for (i = 0; i < SYM_NUM; i++)
644                 kfree(p->sym_val_to_name[i]);
645
646         kfree(p->class_val_to_struct);
647         kfree(p->role_val_to_struct);
648         kfree(p->user_val_to_struct);
649         kfree(p->type_val_to_struct);
650
651         avtab_destroy(&p->te_avtab);
652
653         for (i = 0; i < OCON_NUM; i++) {
654                 cond_resched();
655                 c = p->ocontexts[i];
656                 while (c) {
657                         ctmp = c;
658                         c = c->next;
659                         ocontext_destroy(ctmp, i);
660                 }
661                 p->ocontexts[i] = NULL;
662         }
663
664         g = p->genfs;
665         while (g) {
666                 cond_resched();
667                 kfree(g->fstype);
668                 c = g->head;
669                 while (c) {
670                         ctmp = c;
671                         c = c->next;
672                         ocontext_destroy(ctmp, OCON_FSUSE);
673                 }
674                 gtmp = g;
675                 g = g->next;
676                 kfree(gtmp);
677         }
678         p->genfs = NULL;
679
680         cond_policydb_destroy(p);
681
682         for (tr = p->role_tr; tr; tr = tr->next) {
683                 cond_resched();
684                 kfree(ltr);
685                 ltr = tr;
686         }
687         kfree(ltr);
688
689         for (ra = p->role_allow; ra; ra = ra->next) {
690                 cond_resched();
691                 kfree(lra);
692                 lra = ra;
693         }
694         kfree(lra);
695
696         for (rt = p->range_tr; rt; rt = rt->next) {
697                 cond_resched();
698                 if (lrt) {
699                         ebitmap_destroy(&lrt->target_range.level[0].cat);
700                         ebitmap_destroy(&lrt->target_range.level[1].cat);
701                         kfree(lrt);
702                 }
703                 lrt = rt;
704         }
705         if (lrt) {
706                 ebitmap_destroy(&lrt->target_range.level[0].cat);
707                 ebitmap_destroy(&lrt->target_range.level[1].cat);
708                 kfree(lrt);
709         }
710
711         if (p->type_attr_map) {
712                 for (i = 0; i < p->p_types.nprim; i++)
713                         ebitmap_destroy(&p->type_attr_map[i]);
714         }
715         kfree(p->type_attr_map);
716         ebitmap_destroy(&p->policycaps);
717         ebitmap_destroy(&p->permissive_map);
718
719         return;
720 }
721
722 /*
723  * Load the initial SIDs specified in a policy database
724  * structure into a SID table.
725  */
726 int policydb_load_isids(struct policydb *p, struct sidtab *s)
727 {
728         struct ocontext *head, *c;
729         int rc;
730
731         rc = sidtab_init(s);
732         if (rc) {
733                 printk(KERN_ERR "SELinux:  out of memory on SID table init\n");
734                 goto out;
735         }
736
737         head = p->ocontexts[OCON_ISID];
738         for (c = head; c; c = c->next) {
739                 if (!c->context[0].user) {
740                         printk(KERN_ERR "SELinux:  SID %s was never "
741                                "defined.\n", c->u.name);
742                         rc = -EINVAL;
743                         goto out;
744                 }
745                 if (sidtab_insert(s, c->sid[0], &c->context[0])) {
746                         printk(KERN_ERR "SELinux:  unable to load initial "
747                                "SID %s.\n", c->u.name);
748                         rc = -EINVAL;
749                         goto out;
750                 }
751         }
752 out:
753         return rc;
754 }
755
756 int policydb_class_isvalid(struct policydb *p, unsigned int class)
757 {
758         if (!class || class > p->p_classes.nprim)
759                 return 0;
760         return 1;
761 }
762
763 int policydb_role_isvalid(struct policydb *p, unsigned int role)
764 {
765         if (!role || role > p->p_roles.nprim)
766                 return 0;
767         return 1;
768 }
769
770 int policydb_type_isvalid(struct policydb *p, unsigned int type)
771 {
772         if (!type || type > p->p_types.nprim)
773                 return 0;
774         return 1;
775 }
776
777 /*
778  * Return 1 if the fields in the security context
779  * structure `c' are valid.  Return 0 otherwise.
780  */
781 int policydb_context_isvalid(struct policydb *p, struct context *c)
782 {
783         struct role_datum *role;
784         struct user_datum *usrdatum;
785
786         if (!c->role || c->role > p->p_roles.nprim)
787                 return 0;
788
789         if (!c->user || c->user > p->p_users.nprim)
790                 return 0;
791
792         if (!c->type || c->type > p->p_types.nprim)
793                 return 0;
794
795         if (c->role != OBJECT_R_VAL) {
796                 /*
797                  * Role must be authorized for the type.
798                  */
799                 role = p->role_val_to_struct[c->role - 1];
800                 if (!ebitmap_get_bit(&role->types,
801                                      c->type - 1))
802                         /* role may not be associated with type */
803                         return 0;
804
805                 /*
806                  * User must be authorized for the role.
807                  */
808                 usrdatum = p->user_val_to_struct[c->user - 1];
809                 if (!usrdatum)
810                         return 0;
811
812                 if (!ebitmap_get_bit(&usrdatum->roles,
813                                      c->role - 1))
814                         /* user may not be associated with role */
815                         return 0;
816         }
817
818         if (!mls_context_isvalid(p, c))
819                 return 0;
820
821         return 1;
822 }
823
824 /*
825  * Read a MLS range structure from a policydb binary
826  * representation file.
827  */
828 static int mls_read_range_helper(struct mls_range *r, void *fp)
829 {
830         __le32 buf[2];
831         u32 items;
832         int rc;
833
834         rc = next_entry(buf, fp, sizeof(u32));
835         if (rc < 0)
836                 goto out;
837
838         items = le32_to_cpu(buf[0]);
839         if (items > ARRAY_SIZE(buf)) {
840                 printk(KERN_ERR "SELinux: mls:  range overflow\n");
841                 rc = -EINVAL;
842                 goto out;
843         }
844         rc = next_entry(buf, fp, sizeof(u32) * items);
845         if (rc < 0) {
846                 printk(KERN_ERR "SELinux: mls:  truncated range\n");
847                 goto out;
848         }
849         r->level[0].sens = le32_to_cpu(buf[0]);
850         if (items > 1)
851                 r->level[1].sens = le32_to_cpu(buf[1]);
852         else
853                 r->level[1].sens = r->level[0].sens;
854
855         rc = ebitmap_read(&r->level[0].cat, fp);
856         if (rc) {
857                 printk(KERN_ERR "SELinux: mls:  error reading low "
858                        "categories\n");
859                 goto out;
860         }
861         if (items > 1) {
862                 rc = ebitmap_read(&r->level[1].cat, fp);
863                 if (rc) {
864                         printk(KERN_ERR "SELinux: mls:  error reading high "
865                                "categories\n");
866                         goto bad_high;
867                 }
868         } else {
869                 rc = ebitmap_cpy(&r->level[1].cat, &r->level[0].cat);
870                 if (rc) {
871                         printk(KERN_ERR "SELinux: mls:  out of memory\n");
872                         goto bad_high;
873                 }
874         }
875
876         rc = 0;
877 out:
878         return rc;
879 bad_high:
880         ebitmap_destroy(&r->level[0].cat);
881         goto out;
882 }
883
884 /*
885  * Read and validate a security context structure
886  * from a policydb binary representation file.
887  */
888 static int context_read_and_validate(struct context *c,
889                                      struct policydb *p,
890                                      void *fp)
891 {
892         __le32 buf[3];
893         int rc;
894
895         rc = next_entry(buf, fp, sizeof buf);
896         if (rc < 0) {
897                 printk(KERN_ERR "SELinux: context truncated\n");
898                 goto out;
899         }
900         c->user = le32_to_cpu(buf[0]);
901         c->role = le32_to_cpu(buf[1]);
902         c->type = le32_to_cpu(buf[2]);
903         if (p->policyvers >= POLICYDB_VERSION_MLS) {
904                 if (mls_read_range_helper(&c->range, fp)) {
905                         printk(KERN_ERR "SELinux: error reading MLS range of "
906                                "context\n");
907                         rc = -EINVAL;
908                         goto out;
909                 }
910         }
911
912         if (!policydb_context_isvalid(p, c)) {
913                 printk(KERN_ERR "SELinux:  invalid security context\n");
914                 context_destroy(c);
915                 rc = -EINVAL;
916         }
917 out:
918         return rc;
919 }
920
921 /*
922  * The following *_read functions are used to
923  * read the symbol data from a policy database
924  * binary representation file.
925  */
926
927 static int perm_read(struct policydb *p, struct hashtab *h, void *fp)
928 {
929         char *key = NULL;
930         struct perm_datum *perdatum;
931         int rc;
932         __le32 buf[2];
933         u32 len;
934
935         perdatum = kzalloc(sizeof(*perdatum), GFP_KERNEL);
936         if (!perdatum) {
937                 rc = -ENOMEM;
938                 goto out;
939         }
940
941         rc = next_entry(buf, fp, sizeof buf);
942         if (rc < 0)
943                 goto bad;
944
945         len = le32_to_cpu(buf[0]);
946         perdatum->value = le32_to_cpu(buf[1]);
947
948         key = kmalloc(len + 1, GFP_KERNEL);
949         if (!key) {
950                 rc = -ENOMEM;
951                 goto bad;
952         }
953         rc = next_entry(key, fp, len);
954         if (rc < 0)
955                 goto bad;
956         key[len] = '\0';
957
958         rc = hashtab_insert(h, key, perdatum);
959         if (rc)
960                 goto bad;
961 out:
962         return rc;
963 bad:
964         perm_destroy(key, perdatum, NULL);
965         goto out;
966 }
967
968 static int common_read(struct policydb *p, struct hashtab *h, void *fp)
969 {
970         char *key = NULL;
971         struct common_datum *comdatum;
972         __le32 buf[4];
973         u32 len, nel;
974         int i, rc;
975
976         comdatum = kzalloc(sizeof(*comdatum), GFP_KERNEL);
977         if (!comdatum) {
978                 rc = -ENOMEM;
979                 goto out;
980         }
981
982         rc = next_entry(buf, fp, sizeof buf);
983         if (rc < 0)
984                 goto bad;
985
986         len = le32_to_cpu(buf[0]);
987         comdatum->value = le32_to_cpu(buf[1]);
988
989         rc = symtab_init(&comdatum->permissions, PERM_SYMTAB_SIZE);
990         if (rc)
991                 goto bad;
992         comdatum->permissions.nprim = le32_to_cpu(buf[2]);
993         nel = le32_to_cpu(buf[3]);
994
995         key = kmalloc(len + 1, GFP_KERNEL);
996         if (!key) {
997                 rc = -ENOMEM;
998                 goto bad;
999         }
1000         rc = next_entry(key, fp, len);
1001         if (rc < 0)
1002                 goto bad;
1003         key[len] = '\0';
1004
1005         for (i = 0; i < nel; i++) {
1006                 rc = perm_read(p, comdatum->permissions.table, fp);
1007                 if (rc)
1008                         goto bad;
1009         }
1010
1011         rc = hashtab_insert(h, key, comdatum);
1012         if (rc)
1013                 goto bad;
1014 out:
1015         return rc;
1016 bad:
1017         common_destroy(key, comdatum, NULL);
1018         goto out;
1019 }
1020
1021 static int read_cons_helper(struct constraint_node **nodep, int ncons,
1022                             int allowxtarget, void *fp)
1023 {
1024         struct constraint_node *c, *lc;
1025         struct constraint_expr *e, *le;
1026         __le32 buf[3];
1027         u32 nexpr;
1028         int rc, i, j, depth;
1029
1030         lc = NULL;
1031         for (i = 0; i < ncons; i++) {
1032                 c = kzalloc(sizeof(*c), GFP_KERNEL);
1033                 if (!c)
1034                         return -ENOMEM;
1035
1036                 if (lc)
1037                         lc->next = c;
1038                 else
1039                         *nodep = c;
1040
1041                 rc = next_entry(buf, fp, (sizeof(u32) * 2));
1042                 if (rc < 0)
1043                         return rc;
1044                 c->permissions = le32_to_cpu(buf[0]);
1045                 nexpr = le32_to_cpu(buf[1]);
1046                 le = NULL;
1047                 depth = -1;
1048                 for (j = 0; j < nexpr; j++) {
1049                         e = kzalloc(sizeof(*e), GFP_KERNEL);
1050                         if (!e)
1051                                 return -ENOMEM;
1052
1053                         if (le)
1054                                 le->next = e;
1055                         else
1056                                 c->expr = e;
1057
1058                         rc = next_entry(buf, fp, (sizeof(u32) * 3));
1059                         if (rc < 0)
1060                                 return rc;
1061                         e->expr_type = le32_to_cpu(buf[0]);
1062                         e->attr = le32_to_cpu(buf[1]);
1063                         e->op = le32_to_cpu(buf[2]);
1064
1065                         switch (e->expr_type) {
1066                         case CEXPR_NOT:
1067                                 if (depth < 0)
1068                                         return -EINVAL;
1069                                 break;
1070                         case CEXPR_AND:
1071                         case CEXPR_OR:
1072                                 if (depth < 1)
1073                                         return -EINVAL;
1074                                 depth--;
1075                                 break;
1076                         case CEXPR_ATTR:
1077                                 if (depth == (CEXPR_MAXDEPTH - 1))
1078                                         return -EINVAL;
1079                                 depth++;
1080                                 break;
1081                         case CEXPR_NAMES:
1082                                 if (!allowxtarget && (e->attr & CEXPR_XTARGET))
1083                                         return -EINVAL;
1084                                 if (depth == (CEXPR_MAXDEPTH - 1))
1085                                         return -EINVAL;
1086                                 depth++;
1087                                 if (ebitmap_read(&e->names, fp))
1088                                         return -EINVAL;
1089                                 break;
1090                         default:
1091                                 return -EINVAL;
1092                         }
1093                         le = e;
1094                 }
1095                 if (depth != 0)
1096                         return -EINVAL;
1097                 lc = c;
1098         }
1099
1100         return 0;
1101 }
1102
1103 static int class_read(struct policydb *p, struct hashtab *h, void *fp)
1104 {
1105         char *key = NULL;
1106         struct class_datum *cladatum;
1107         __le32 buf[6];
1108         u32 len, len2, ncons, nel;
1109         int i, rc;
1110
1111         cladatum = kzalloc(sizeof(*cladatum), GFP_KERNEL);
1112         if (!cladatum) {
1113                 rc = -ENOMEM;
1114                 goto out;
1115         }
1116
1117         rc = next_entry(buf, fp, sizeof(u32)*6);
1118         if (rc < 0)
1119                 goto bad;
1120
1121         len = le32_to_cpu(buf[0]);
1122         len2 = le32_to_cpu(buf[1]);
1123         cladatum->value = le32_to_cpu(buf[2]);
1124
1125         rc = symtab_init(&cladatum->permissions, PERM_SYMTAB_SIZE);
1126         if (rc)
1127                 goto bad;
1128         cladatum->permissions.nprim = le32_to_cpu(buf[3]);
1129         nel = le32_to_cpu(buf[4]);
1130
1131         ncons = le32_to_cpu(buf[5]);
1132
1133         key = kmalloc(len + 1, GFP_KERNEL);
1134         if (!key) {
1135                 rc = -ENOMEM;
1136                 goto bad;
1137         }
1138         rc = next_entry(key, fp, len);
1139         if (rc < 0)
1140                 goto bad;
1141         key[len] = '\0';
1142
1143         if (len2) {
1144                 cladatum->comkey = kmalloc(len2 + 1, GFP_KERNEL);
1145                 if (!cladatum->comkey) {
1146                         rc = -ENOMEM;
1147                         goto bad;
1148                 }
1149                 rc = next_entry(cladatum->comkey, fp, len2);
1150                 if (rc < 0)
1151                         goto bad;
1152                 cladatum->comkey[len2] = '\0';
1153
1154                 cladatum->comdatum = hashtab_search(p->p_commons.table,
1155                                                     cladatum->comkey);
1156                 if (!cladatum->comdatum) {
1157                         printk(KERN_ERR "SELinux:  unknown common %s\n",
1158                                cladatum->comkey);
1159                         rc = -EINVAL;
1160                         goto bad;
1161                 }
1162         }
1163         for (i = 0; i < nel; i++) {
1164                 rc = perm_read(p, cladatum->permissions.table, fp);
1165                 if (rc)
1166                         goto bad;
1167         }
1168
1169         rc = read_cons_helper(&cladatum->constraints, ncons, 0, fp);
1170         if (rc)
1171                 goto bad;
1172
1173         if (p->policyvers >= POLICYDB_VERSION_VALIDATETRANS) {
1174                 /* grab the validatetrans rules */
1175                 rc = next_entry(buf, fp, sizeof(u32));
1176                 if (rc < 0)
1177                         goto bad;
1178                 ncons = le32_to_cpu(buf[0]);
1179                 rc = read_cons_helper(&cladatum->validatetrans, ncons, 1, fp);
1180                 if (rc)
1181                         goto bad;
1182         }
1183
1184         rc = hashtab_insert(h, key, cladatum);
1185         if (rc)
1186                 goto bad;
1187
1188         rc = 0;
1189 out:
1190         return rc;
1191 bad:
1192         cls_destroy(key, cladatum, NULL);
1193         goto out;
1194 }
1195
1196 static int role_read(struct policydb *p, struct hashtab *h, void *fp)
1197 {
1198         char *key = NULL;
1199         struct role_datum *role;
1200         int rc, to_read = 2;
1201         __le32 buf[3];
1202         u32 len;
1203
1204         role = kzalloc(sizeof(*role), GFP_KERNEL);
1205         if (!role) {
1206                 rc = -ENOMEM;
1207                 goto out;
1208         }
1209
1210         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY)
1211                 to_read = 3;
1212
1213         rc = next_entry(buf, fp, sizeof(buf[0]) * to_read);
1214         if (rc < 0)
1215                 goto bad;
1216
1217         len = le32_to_cpu(buf[0]);
1218         role->value = le32_to_cpu(buf[1]);
1219         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY)
1220                 role->bounds = le32_to_cpu(buf[2]);
1221
1222         key = kmalloc(len + 1, GFP_KERNEL);
1223         if (!key) {
1224                 rc = -ENOMEM;
1225                 goto bad;
1226         }
1227         rc = next_entry(key, fp, len);
1228         if (rc < 0)
1229                 goto bad;
1230         key[len] = '\0';
1231
1232         rc = ebitmap_read(&role->dominates, fp);
1233         if (rc)
1234                 goto bad;
1235
1236         rc = ebitmap_read(&role->types, fp);
1237         if (rc)
1238                 goto bad;
1239
1240         if (strcmp(key, OBJECT_R) == 0) {
1241                 if (role->value != OBJECT_R_VAL) {
1242                         printk(KERN_ERR "SELinux: Role %s has wrong value %d\n",
1243                                OBJECT_R, role->value);
1244                         rc = -EINVAL;
1245                         goto bad;
1246                 }
1247                 rc = 0;
1248                 goto bad;
1249         }
1250
1251         rc = hashtab_insert(h, key, role);
1252         if (rc)
1253                 goto bad;
1254 out:
1255         return rc;
1256 bad:
1257         role_destroy(key, role, NULL);
1258         goto out;
1259 }
1260
1261 static int type_read(struct policydb *p, struct hashtab *h, void *fp)
1262 {
1263         char *key = NULL;
1264         struct type_datum *typdatum;
1265         int rc, to_read = 3;
1266         __le32 buf[4];
1267         u32 len;
1268
1269         typdatum = kzalloc(sizeof(*typdatum), GFP_KERNEL);
1270         if (!typdatum) {
1271                 rc = -ENOMEM;
1272                 return rc;
1273         }
1274
1275         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY)
1276                 to_read = 4;
1277
1278         rc = next_entry(buf, fp, sizeof(buf[0]) * to_read);
1279         if (rc < 0)
1280                 goto bad;
1281
1282         len = le32_to_cpu(buf[0]);
1283         typdatum->value = le32_to_cpu(buf[1]);
1284         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY) {
1285                 u32 prop = le32_to_cpu(buf[2]);
1286
1287                 if (prop & TYPEDATUM_PROPERTY_PRIMARY)
1288                         typdatum->primary = 1;
1289                 if (prop & TYPEDATUM_PROPERTY_ATTRIBUTE)
1290                         typdatum->attribute = 1;
1291
1292                 typdatum->bounds = le32_to_cpu(buf[3]);
1293         } else {
1294                 typdatum->primary = le32_to_cpu(buf[2]);
1295         }
1296
1297         key = kmalloc(len + 1, GFP_KERNEL);
1298         if (!key) {
1299                 rc = -ENOMEM;
1300                 goto bad;
1301         }
1302         rc = next_entry(key, fp, len);
1303         if (rc < 0)
1304                 goto bad;
1305         key[len] = '\0';
1306
1307         rc = hashtab_insert(h, key, typdatum);
1308         if (rc)
1309                 goto bad;
1310 out:
1311         return rc;
1312 bad:
1313         type_destroy(key, typdatum, NULL);
1314         goto out;
1315 }
1316
1317
1318 /*
1319  * Read a MLS level structure from a policydb binary
1320  * representation file.
1321  */
1322 static int mls_read_level(struct mls_level *lp, void *fp)
1323 {
1324         __le32 buf[1];
1325         int rc;
1326
1327         memset(lp, 0, sizeof(*lp));
1328
1329         rc = next_entry(buf, fp, sizeof buf);
1330         if (rc < 0) {
1331                 printk(KERN_ERR "SELinux: mls: truncated level\n");
1332                 goto bad;
1333         }
1334         lp->sens = le32_to_cpu(buf[0]);
1335
1336         if (ebitmap_read(&lp->cat, fp)) {
1337                 printk(KERN_ERR "SELinux: mls:  error reading level "
1338                        "categories\n");
1339                 goto bad;
1340         }
1341
1342         return 0;
1343
1344 bad:
1345         return -EINVAL;
1346 }
1347
1348 static int user_read(struct policydb *p, struct hashtab *h, void *fp)
1349 {
1350         char *key = NULL;
1351         struct user_datum *usrdatum;
1352         int rc, to_read = 2;
1353         __le32 buf[3];
1354         u32 len;
1355
1356         usrdatum = kzalloc(sizeof(*usrdatum), GFP_KERNEL);
1357         if (!usrdatum) {
1358                 rc = -ENOMEM;
1359                 goto out;
1360         }
1361
1362         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY)
1363                 to_read = 3;
1364
1365         rc = next_entry(buf, fp, sizeof(buf[0]) * to_read);
1366         if (rc < 0)
1367                 goto bad;
1368
1369         len = le32_to_cpu(buf[0]);
1370         usrdatum->value = le32_to_cpu(buf[1]);
1371         if (p->policyvers >= POLICYDB_VERSION_BOUNDARY)
1372                 usrdatum->bounds = le32_to_cpu(buf[2]);
1373
1374         key = kmalloc(len + 1, GFP_KERNEL);
1375         if (!key) {
1376                 rc = -ENOMEM;
1377                 goto bad;
1378         }
1379         rc = next_entry(key, fp, len);
1380         if (rc < 0)
1381                 goto bad;
1382         key[len] = '\0';
1383
1384         rc = ebitmap_read(&usrdatum->roles, fp);
1385         if (rc)
1386                 goto bad;
1387
1388         if (p->policyvers >= POLICYDB_VERSION_MLS) {
1389                 rc = mls_read_range_helper(&usrdatum->range, fp);
1390                 if (rc)
1391                         goto bad;
1392                 rc = mls_read_level(&usrdatum->dfltlevel, fp);
1393                 if (rc)
1394                         goto bad;
1395         }
1396
1397         rc = hashtab_insert(h, key, usrdatum);
1398         if (rc)
1399                 goto bad;
1400 out:
1401         return rc;
1402 bad:
1403         user_destroy(key, usrdatum, NULL);
1404         goto out;
1405 }
1406
1407 static int sens_read(struct policydb *p, struct hashtab *h, void *fp)
1408 {
1409         char *key = NULL;
1410         struct level_datum *levdatum;
1411         int rc;
1412         __le32 buf[2];
1413         u32 len;
1414
1415         levdatum = kzalloc(sizeof(*levdatum), GFP_ATOMIC);
1416         if (!levdatum) {
1417                 rc = -ENOMEM;
1418                 goto out;
1419         }
1420
1421         rc = next_entry(buf, fp, sizeof buf);
1422         if (rc < 0)
1423                 goto bad;
1424
1425         len = le32_to_cpu(buf[0]);
1426         levdatum->isalias = le32_to_cpu(buf[1]);
1427
1428         key = kmalloc(len + 1, GFP_ATOMIC);
1429         if (!key) {
1430                 rc = -ENOMEM;
1431                 goto bad;
1432         }
1433         rc = next_entry(key, fp, len);
1434         if (rc < 0)
1435                 goto bad;
1436         key[len] = '\0';
1437
1438         levdatum->level = kmalloc(sizeof(struct mls_level), GFP_ATOMIC);
1439         if (!levdatum->level) {
1440                 rc = -ENOMEM;
1441                 goto bad;
1442         }
1443         if (mls_read_level(levdatum->level, fp)) {
1444                 rc = -EINVAL;
1445                 goto bad;
1446         }
1447
1448         rc = hashtab_insert(h, key, levdatum);
1449         if (rc)
1450                 goto bad;
1451 out:
1452         return rc;
1453 bad:
1454         sens_destroy(key, levdatum, NULL);
1455         goto out;
1456 }
1457
1458 static int cat_read(struct policydb *p, struct hashtab *h, void *fp)
1459 {
1460         char *key = NULL;
1461         struct cat_datum *catdatum;
1462         int rc;
1463         __le32 buf[3];
1464         u32 len;
1465
1466         catdatum = kzalloc(sizeof(*catdatum), GFP_ATOMIC);
1467         if (!catdatum) {
1468                 rc = -ENOMEM;
1469                 goto out;
1470         }
1471
1472         rc = next_entry(buf, fp, sizeof buf);
1473         if (rc < 0)
1474                 goto bad;
1475
1476         len = le32_to_cpu(buf[0]);
1477         catdatum->value = le32_to_cpu(buf[1]);
1478         catdatum->isalias = le32_to_cpu(buf[2]);
1479
1480         key = kmalloc(len + 1, GFP_ATOMIC);
1481         if (!key) {
1482                 rc = -ENOMEM;
1483                 goto bad;
1484         }
1485         rc = next_entry(key, fp, len);
1486         if (rc < 0)
1487                 goto bad;
1488         key[len] = '\0';
1489
1490         rc = hashtab_insert(h, key, catdatum);
1491         if (rc)
1492                 goto bad;
1493 out:
1494         return rc;
1495
1496 bad:
1497         cat_destroy(key, catdatum, NULL);
1498         goto out;
1499 }
1500
1501 static int (*read_f[SYM_NUM]) (struct policydb *p, struct hashtab *h, void *fp) =
1502 {
1503         common_read,
1504         class_read,
1505         role_read,
1506         type_read,
1507         user_read,
1508         cond_read_bool,
1509         sens_read,
1510         cat_read,
1511 };
1512
1513 static int user_bounds_sanity_check(void *key, void *datum, void *datap)
1514 {
1515         struct user_datum *upper, *user;
1516         struct policydb *p = datap;
1517         int depth = 0;
1518
1519         upper = user = datum;
1520         while (upper->bounds) {
1521                 struct ebitmap_node *node;
1522                 unsigned long bit;
1523
1524                 if (++depth == POLICYDB_BOUNDS_MAXDEPTH) {
1525                         printk(KERN_ERR "SELinux: user %s: "
1526                                "too deep or looped boundary",
1527                                (char *) key);
1528                         return -EINVAL;
1529                 }
1530
1531                 upper = p->user_val_to_struct[upper->bounds - 1];
1532                 ebitmap_for_each_positive_bit(&user->roles, node, bit) {
1533                         if (ebitmap_get_bit(&upper->roles, bit))
1534                                 continue;
1535
1536                         printk(KERN_ERR
1537                                "SELinux: boundary violated policy: "
1538                                "user=%s role=%s bounds=%s\n",
1539                                p->p_user_val_to_name[user->value - 1],
1540                                p->p_role_val_to_name[bit],
1541                                p->p_user_val_to_name[upper->value - 1]);
1542
1543                         return -EINVAL;
1544                 }
1545         }
1546
1547         return 0;
1548 }
1549
1550 static int role_bounds_sanity_check(void *key, void *datum, void *datap)
1551 {
1552         struct role_datum *upper, *role;
1553         struct policydb *p = datap;
1554         int depth = 0;
1555
1556         upper = role = datum;
1557         while (upper->bounds) {
1558                 struct ebitmap_node *node;
1559                 unsigned long bit;
1560
1561                 if (++depth == POLICYDB_BOUNDS_MAXDEPTH) {
1562                         printk(KERN_ERR "SELinux: role %s: "
1563                                "too deep or looped bounds\n",
1564                                (char *) key);
1565                         return -EINVAL;
1566                 }
1567
1568                 upper = p->role_val_to_struct[upper->bounds - 1];
1569                 ebitmap_for_each_positive_bit(&role->types, node, bit) {
1570                         if (ebitmap_get_bit(&upper->types, bit))
1571                                 continue;
1572
1573                         printk(KERN_ERR
1574                                "SELinux: boundary violated policy: "
1575                                "role=%s type=%s bounds=%s\n",
1576                                p->p_role_val_to_name[role->value - 1],
1577                                p->p_type_val_to_name[bit],
1578                                p->p_role_val_to_name[upper->value - 1]);
1579
1580                         return -EINVAL;
1581                 }
1582         }
1583
1584         return 0;
1585 }
1586
1587 static int type_bounds_sanity_check(void *key, void *datum, void *datap)
1588 {
1589         struct type_datum *upper, *type;
1590         struct policydb *p = datap;
1591         int depth = 0;
1592
1593         upper = type = datum;
1594         while (upper->bounds) {
1595                 if (++depth == POLICYDB_BOUNDS_MAXDEPTH) {
1596                         printk(KERN_ERR "SELinux: type %s: "
1597                                "too deep or looped boundary\n",
1598                                (char *) key);
1599                         return -EINVAL;
1600                 }
1601
1602                 upper = p->type_val_to_struct[upper->bounds - 1];
1603                 if (upper->attribute) {
1604                         printk(KERN_ERR "SELinux: type %s: "
1605                                "bounded by attribute %s",
1606                                (char *) key,
1607                                p->p_type_val_to_name[upper->value - 1]);
1608                         return -EINVAL;
1609                 }
1610         }
1611
1612         return 0;
1613 }
1614
1615 static int policydb_bounds_sanity_check(struct policydb *p)
1616 {
1617         int rc;
1618
1619         if (p->policyvers < POLICYDB_VERSION_BOUNDARY)
1620                 return 0;
1621
1622         rc = hashtab_map(p->p_users.table,
1623                          user_bounds_sanity_check, p);
1624         if (rc)
1625                 return rc;
1626
1627         rc = hashtab_map(p->p_roles.table,
1628                          role_bounds_sanity_check, p);
1629         if (rc)
1630                 return rc;
1631
1632         rc = hashtab_map(p->p_types.table,
1633                          type_bounds_sanity_check, p);
1634         if (rc)
1635                 return rc;
1636
1637         return 0;
1638 }
1639
1640 extern int ss_initialized;
1641
1642 u16 string_to_security_class(struct policydb *p, const char *name)
1643 {
1644         struct class_datum *cladatum;
1645
1646         cladatum = hashtab_search(p->p_classes.table, name);
1647         if (!cladatum)
1648                 return 0;
1649
1650         return cladatum->value;
1651 }
1652
1653 u32 string_to_av_perm(struct policydb *p, u16 tclass, const char *name)
1654 {
1655         struct class_datum *cladatum;
1656         struct perm_datum *perdatum = NULL;
1657         struct common_datum *comdatum;
1658
1659         if (!tclass || tclass > p->p_classes.nprim)
1660                 return 0;
1661
1662         cladatum = p->class_val_to_struct[tclass-1];
1663         comdatum = cladatum->comdatum;
1664         if (comdatum)
1665                 perdatum = hashtab_search(comdatum->permissions.table,
1666                                           name);
1667         if (!perdatum)
1668                 perdatum = hashtab_search(cladatum->permissions.table,
1669                                           name);
1670         if (!perdatum)
1671                 return 0;
1672
1673         return 1U << (perdatum->value-1);
1674 }
1675
1676 /*
1677  * Read the configuration data from a policy database binary
1678  * representation file into a policy database structure.
1679  */
1680 int policydb_read(struct policydb *p, void *fp)
1681 {
1682         struct role_allow *ra, *lra;
1683         struct role_trans *tr, *ltr;
1684         struct ocontext *l, *c, *newc;
1685         struct genfs *genfs_p, *genfs, *newgenfs;
1686         int i, j, rc;
1687         __le32 buf[4];
1688         u32 nodebuf[8];
1689         u32 len, len2, config, nprim, nel, nel2;
1690         char *policydb_str;
1691         struct policydb_compat_info *info;
1692         struct range_trans *rt, *lrt;
1693
1694         config = 0;
1695
1696         rc = policydb_init(p);
1697         if (rc)
1698                 goto out;
1699
1700         /* Read the magic number and string length. */
1701         rc = next_entry(buf, fp, sizeof(u32) * 2);
1702         if (rc < 0)
1703                 goto bad;
1704
1705         if (le32_to_cpu(buf[0]) != POLICYDB_MAGIC) {
1706                 printk(KERN_ERR "SELinux:  policydb magic number 0x%x does "
1707                        "not match expected magic number 0x%x\n",
1708                        le32_to_cpu(buf[0]), POLICYDB_MAGIC);
1709                 goto bad;
1710         }
1711
1712         len = le32_to_cpu(buf[1]);
1713         if (len != strlen(POLICYDB_STRING)) {
1714                 printk(KERN_ERR "SELinux:  policydb string length %d does not "
1715                        "match expected length %Zu\n",
1716                        len, strlen(POLICYDB_STRING));
1717                 goto bad;
1718         }
1719         policydb_str = kmalloc(len + 1, GFP_KERNEL);
1720         if (!policydb_str) {
1721                 printk(KERN_ERR "SELinux:  unable to allocate memory for policydb "
1722                        "string of length %d\n", len);
1723                 rc = -ENOMEM;
1724                 goto bad;
1725         }
1726         rc = next_entry(policydb_str, fp, len);
1727         if (rc < 0) {
1728                 printk(KERN_ERR "SELinux:  truncated policydb string identifier\n");
1729                 kfree(policydb_str);
1730                 goto bad;
1731         }
1732         policydb_str[len] = '\0';
1733         if (strcmp(policydb_str, POLICYDB_STRING)) {
1734                 printk(KERN_ERR "SELinux:  policydb string %s does not match "
1735                        "my string %s\n", policydb_str, POLICYDB_STRING);
1736                 kfree(policydb_str);
1737                 goto bad;
1738         }
1739         /* Done with policydb_str. */
1740         kfree(policydb_str);
1741         policydb_str = NULL;
1742
1743         /* Read the version, config, and table sizes. */
1744         rc = next_entry(buf, fp, sizeof(u32)*4);
1745         if (rc < 0)
1746                 goto bad;
1747
1748         p->policyvers = le32_to_cpu(buf[0]);
1749         if (p->policyvers < POLICYDB_VERSION_MIN ||
1750             p->policyvers > POLICYDB_VERSION_MAX) {
1751                 printk(KERN_ERR "SELinux:  policydb version %d does not match "
1752                        "my version range %d-%d\n",
1753                        le32_to_cpu(buf[0]), POLICYDB_VERSION_MIN, POLICYDB_VERSION_MAX);
1754                 goto bad;
1755         }
1756
1757         if ((le32_to_cpu(buf[1]) & POLICYDB_CONFIG_MLS)) {
1758                 if (ss_initialized && !selinux_mls_enabled) {
1759                         printk(KERN_ERR "SELinux: Cannot switch between non-MLS"
1760                                 " and MLS policies\n");
1761                         goto bad;
1762                 }
1763                 selinux_mls_enabled = 1;
1764                 config |= POLICYDB_CONFIG_MLS;
1765
1766                 if (p->policyvers < POLICYDB_VERSION_MLS) {
1767                         printk(KERN_ERR "SELinux: security policydb version %d "
1768                                 "(MLS) not backwards compatible\n",
1769                                 p->policyvers);
1770                         goto bad;
1771                 }
1772         } else {
1773                 if (ss_initialized && selinux_mls_enabled) {
1774                         printk(KERN_ERR "SELinux: Cannot switch between MLS and"
1775                                 " non-MLS policies\n");
1776                         goto bad;
1777                 }
1778         }
1779         p->reject_unknown = !!(le32_to_cpu(buf[1]) & REJECT_UNKNOWN);
1780         p->allow_unknown = !!(le32_to_cpu(buf[1]) & ALLOW_UNKNOWN);
1781
1782         if (p->policyvers >= POLICYDB_VERSION_POLCAP &&
1783             ebitmap_read(&p->policycaps, fp) != 0)
1784                 goto bad;
1785
1786         if (p->policyvers >= POLICYDB_VERSION_PERMISSIVE &&
1787             ebitmap_read(&p->permissive_map, fp) != 0)
1788                 goto bad;
1789
1790         info = policydb_lookup_compat(p->policyvers);
1791         if (!info) {
1792                 printk(KERN_ERR "SELinux:  unable to find policy compat info "
1793                        "for version %d\n", p->policyvers);
1794                 goto bad;
1795         }
1796
1797         if (le32_to_cpu(buf[2]) != info->sym_num ||
1798                 le32_to_cpu(buf[3]) != info->ocon_num) {
1799                 printk(KERN_ERR "SELinux:  policydb table sizes (%d,%d) do "
1800                        "not match mine (%d,%d)\n", le32_to_cpu(buf[2]),
1801                         le32_to_cpu(buf[3]),
1802                        info->sym_num, info->ocon_num);
1803                 goto bad;
1804         }
1805
1806         for (i = 0; i < info->sym_num; i++) {
1807                 rc = next_entry(buf, fp, sizeof(u32)*2);
1808                 if (rc < 0)
1809                         goto bad;
1810                 nprim = le32_to_cpu(buf[0]);
1811                 nel = le32_to_cpu(buf[1]);
1812                 for (j = 0; j < nel; j++) {
1813                         rc = read_f[i](p, p->symtab[i].table, fp);
1814                         if (rc)
1815                                 goto bad;
1816                 }
1817
1818                 p->symtab[i].nprim = nprim;
1819         }
1820
1821         rc = avtab_read(&p->te_avtab, fp, p);
1822         if (rc)
1823                 goto bad;
1824
1825         if (p->policyvers >= POLICYDB_VERSION_BOOL) {
1826                 rc = cond_read_list(p, fp);
1827                 if (rc)
1828                         goto bad;
1829         }
1830
1831         rc = next_entry(buf, fp, sizeof(u32));
1832         if (rc < 0)
1833                 goto bad;
1834         nel = le32_to_cpu(buf[0]);
1835         ltr = NULL;
1836         for (i = 0; i < nel; i++) {
1837                 tr = kzalloc(sizeof(*tr), GFP_KERNEL);
1838                 if (!tr) {
1839                         rc = -ENOMEM;
1840                         goto bad;
1841                 }
1842                 if (ltr)
1843                         ltr->next = tr;
1844                 else
1845                         p->role_tr = tr;
1846                 rc = next_entry(buf, fp, sizeof(u32)*3);
1847                 if (rc < 0)
1848                         goto bad;
1849                 tr->role = le32_to_cpu(buf[0]);
1850                 tr->type = le32_to_cpu(buf[1]);
1851                 tr->new_role = le32_to_cpu(buf[2]);
1852                 if (!policydb_role_isvalid(p, tr->role) ||
1853                     !policydb_type_isvalid(p, tr->type) ||
1854                     !policydb_role_isvalid(p, tr->new_role)) {
1855                         rc = -EINVAL;
1856                         goto bad;
1857                 }
1858                 ltr = tr;
1859         }
1860
1861         rc = next_entry(buf, fp, sizeof(u32));
1862         if (rc < 0)
1863                 goto bad;
1864         nel = le32_to_cpu(buf[0]);
1865         lra = NULL;
1866         for (i = 0; i < nel; i++) {
1867                 ra = kzalloc(sizeof(*ra), GFP_KERNEL);
1868                 if (!ra) {
1869                         rc = -ENOMEM;
1870                         goto bad;
1871                 }
1872                 if (lra)
1873                         lra->next = ra;
1874                 else
1875                         p->role_allow = ra;
1876                 rc = next_entry(buf, fp, sizeof(u32)*2);
1877                 if (rc < 0)
1878                         goto bad;
1879                 ra->role = le32_to_cpu(buf[0]);
1880                 ra->new_role = le32_to_cpu(buf[1]);
1881                 if (!policydb_role_isvalid(p, ra->role) ||
1882                     !policydb_role_isvalid(p, ra->new_role)) {
1883                         rc = -EINVAL;
1884                         goto bad;
1885                 }
1886                 lra = ra;
1887         }
1888
1889         rc = policydb_index_classes(p);
1890         if (rc)
1891                 goto bad;
1892
1893         rc = policydb_index_others(p);
1894         if (rc)
1895                 goto bad;
1896
1897         p->process_class = string_to_security_class(p, "process");
1898         if (!p->process_class)
1899                 goto bad;
1900         p->process_trans_perms = string_to_av_perm(p, p->process_class,
1901                                                    "transition");
1902         p->process_trans_perms |= string_to_av_perm(p, p->process_class,
1903                                                     "dyntransition");
1904         if (!p->process_trans_perms)
1905                 goto bad;
1906
1907         for (i = 0; i < info->ocon_num; i++) {
1908                 rc = next_entry(buf, fp, sizeof(u32));
1909                 if (rc < 0)
1910                         goto bad;
1911                 nel = le32_to_cpu(buf[0]);
1912                 l = NULL;
1913                 for (j = 0; j < nel; j++) {
1914                         c = kzalloc(sizeof(*c), GFP_KERNEL);
1915                         if (!c) {
1916                                 rc = -ENOMEM;
1917                                 goto bad;
1918                         }
1919                         if (l)
1920                                 l->next = c;
1921                         else
1922                                 p->ocontexts[i] = c;
1923                         l = c;
1924                         rc = -EINVAL;
1925                         switch (i) {
1926                         case OCON_ISID:
1927                                 rc = next_entry(buf, fp, sizeof(u32));
1928                                 if (rc < 0)
1929                                         goto bad;
1930                                 c->sid[0] = le32_to_cpu(buf[0]);
1931                                 rc = context_read_and_validate(&c->context[0], p, fp);
1932                                 if (rc)
1933                                         goto bad;
1934                                 break;
1935                         case OCON_FS:
1936                         case OCON_NETIF:
1937                                 rc = next_entry(buf, fp, sizeof(u32));
1938                                 if (rc < 0)
1939                                         goto bad;
1940                                 len = le32_to_cpu(buf[0]);
1941                                 c->u.name = kmalloc(len + 1, GFP_KERNEL);
1942                                 if (!c->u.name) {
1943                                         rc = -ENOMEM;
1944                                         goto bad;
1945                                 }
1946                                 rc = next_entry(c->u.name, fp, len);
1947                                 if (rc < 0)
1948                                         goto bad;
1949                                 c->u.name[len] = 0;
1950                                 rc = context_read_and_validate(&c->context[0], p, fp);
1951                                 if (rc)
1952                                         goto bad;
1953                                 rc = context_read_and_validate(&c->context[1], p, fp);
1954                                 if (rc)
1955                                         goto bad;
1956                                 break;
1957                         case OCON_PORT:
1958                                 rc = next_entry(buf, fp, sizeof(u32)*3);
1959                                 if (rc < 0)
1960                                         goto bad;
1961                                 c->u.port.protocol = le32_to_cpu(buf[0]);
1962                                 c->u.port.low_port = le32_to_cpu(buf[1]);
1963                                 c->u.port.high_port = le32_to_cpu(buf[2]);
1964                                 rc = context_read_and_validate(&c->context[0], p, fp);
1965                                 if (rc)
1966                                         goto bad;
1967                                 break;
1968                         case OCON_NODE:
1969                                 rc = next_entry(nodebuf, fp, sizeof(u32) * 2);
1970                                 if (rc < 0)
1971                                         goto bad;
1972                                 c->u.node.addr = nodebuf[0]; /* network order */
1973                                 c->u.node.mask = nodebuf[1]; /* network order */
1974                                 rc = context_read_and_validate(&c->context[0], p, fp);
1975                                 if (rc)
1976                                         goto bad;
1977                                 break;
1978                         case OCON_FSUSE:
1979                                 rc = next_entry(buf, fp, sizeof(u32)*2);
1980                                 if (rc < 0)
1981                                         goto bad;
1982                                 c->v.behavior = le32_to_cpu(buf[0]);
1983                                 if (c->v.behavior > SECURITY_FS_USE_NONE)
1984                                         goto bad;
1985                                 len = le32_to_cpu(buf[1]);
1986                                 c->u.name = kmalloc(len + 1, GFP_KERNEL);
1987                                 if (!c->u.name) {
1988                                         rc = -ENOMEM;
1989                                         goto bad;
1990                                 }
1991                                 rc = next_entry(c->u.name, fp, len);
1992                                 if (rc < 0)
1993                                         goto bad;
1994                                 c->u.name[len] = 0;
1995                                 rc = context_read_and_validate(&c->context[0], p, fp);
1996                                 if (rc)
1997                                         goto bad;
1998                                 break;
1999                         case OCON_NODE6: {
2000                                 int k;
2001
2002                                 rc = next_entry(nodebuf, fp, sizeof(u32) * 8);
2003                                 if (rc < 0)
2004                                         goto bad;
2005                                 for (k = 0; k < 4; k++)
2006                                         c->u.node6.addr[k] = nodebuf[k];
2007                                 for (k = 0; k < 4; k++)
2008                                         c->u.node6.mask[k] = nodebuf[k+4];
2009                                 if (context_read_and_validate(&c->context[0], p, fp))
2010                                         goto bad;
2011                                 break;
2012                         }
2013                         }
2014                 }
2015         }
2016
2017         rc = next_entry(buf, fp, sizeof(u32));
2018         if (rc < 0)
2019                 goto bad;
2020         nel = le32_to_cpu(buf[0]);
2021         genfs_p = NULL;
2022         rc = -EINVAL;
2023         for (i = 0; i < nel; i++) {
2024                 rc = next_entry(buf, fp, sizeof(u32));
2025                 if (rc < 0)
2026                         goto bad;
2027                 len = le32_to_cpu(buf[0]);
2028                 newgenfs = kzalloc(sizeof(*newgenfs), GFP_KERNEL);
2029                 if (!newgenfs) {
2030                         rc = -ENOMEM;
2031                         goto bad;
2032                 }
2033
2034                 newgenfs->fstype = kmalloc(len + 1, GFP_KERNEL);
2035                 if (!newgenfs->fstype) {
2036                         rc = -ENOMEM;
2037                         kfree(newgenfs);
2038                         goto bad;
2039                 }
2040                 rc = next_entry(newgenfs->fstype, fp, len);
2041                 if (rc < 0) {
2042                         kfree(newgenfs->fstype);
2043                         kfree(newgenfs);
2044                         goto bad;
2045                 }
2046                 newgenfs->fstype[len] = 0;
2047                 for (genfs_p = NULL, genfs = p->genfs; genfs;
2048                      genfs_p = genfs, genfs = genfs->next) {
2049                         if (strcmp(newgenfs->fstype, genfs->fstype) == 0) {
2050                                 printk(KERN_ERR "SELinux:  dup genfs "
2051                                        "fstype %s\n", newgenfs->fstype);
2052                                 kfree(newgenfs->fstype);
2053                                 kfree(newgenfs);
2054                                 goto bad;
2055                         }
2056                         if (strcmp(newgenfs->fstype, genfs->fstype) < 0)
2057                                 break;
2058                 }
2059                 newgenfs->next = genfs;
2060                 if (genfs_p)
2061                         genfs_p->next = newgenfs;
2062                 else
2063                         p->genfs = newgenfs;
2064                 rc = next_entry(buf, fp, sizeof(u32));
2065                 if (rc < 0)
2066                         goto bad;
2067                 nel2 = le32_to_cpu(buf[0]);
2068                 for (j = 0; j < nel2; j++) {
2069                         rc = next_entry(buf, fp, sizeof(u32));
2070                         if (rc < 0)
2071                                 goto bad;
2072                         len = le32_to_cpu(buf[0]);
2073
2074                         newc = kzalloc(sizeof(*newc), GFP_KERNEL);
2075                         if (!newc) {
2076                                 rc = -ENOMEM;
2077                                 goto bad;
2078                         }
2079
2080                         newc->u.name = kmalloc(len + 1, GFP_KERNEL);
2081                         if (!newc->u.name) {
2082                                 rc = -ENOMEM;
2083                                 goto bad_newc;
2084                         }
2085                         rc = next_entry(newc->u.name, fp, len);
2086                         if (rc < 0)
2087                                 goto bad_newc;
2088                         newc->u.name[len] = 0;
2089                         rc = next_entry(buf, fp, sizeof(u32));
2090                         if (rc < 0)
2091                                 goto bad_newc;
2092                         newc->v.sclass = le32_to_cpu(buf[0]);
2093                         if (context_read_and_validate(&newc->context[0], p, fp))
2094                                 goto bad_newc;
2095                         for (l = NULL, c = newgenfs->head; c;
2096                              l = c, c = c->next) {
2097                                 if (!strcmp(newc->u.name, c->u.name) &&
2098                                     (!c->v.sclass || !newc->v.sclass ||
2099                                      newc->v.sclass == c->v.sclass)) {
2100                                         printk(KERN_ERR "SELinux:  dup genfs "
2101                                                "entry (%s,%s)\n",
2102                                                newgenfs->fstype, c->u.name);
2103                                         goto bad_newc;
2104                                 }
2105                                 len = strlen(newc->u.name);
2106                                 len2 = strlen(c->u.name);
2107                                 if (len > len2)
2108                                         break;
2109                         }
2110
2111                         newc->next = c;
2112                         if (l)
2113                                 l->next = newc;
2114                         else
2115                                 newgenfs->head = newc;
2116                 }
2117         }
2118
2119         if (p->policyvers >= POLICYDB_VERSION_MLS) {
2120                 int new_rangetr = p->policyvers >= POLICYDB_VERSION_RANGETRANS;
2121                 rc = next_entry(buf, fp, sizeof(u32));
2122                 if (rc < 0)
2123                         goto bad;
2124                 nel = le32_to_cpu(buf[0]);
2125                 lrt = NULL;
2126                 for (i = 0; i < nel; i++) {
2127                         rt = kzalloc(sizeof(*rt), GFP_KERNEL);
2128                         if (!rt) {
2129                                 rc = -ENOMEM;
2130                                 goto bad;
2131                         }
2132                         if (lrt)
2133                                 lrt->next = rt;
2134                         else
2135                                 p->range_tr = rt;
2136                         rc = next_entry(buf, fp, (sizeof(u32) * 2));
2137                         if (rc < 0)
2138                                 goto bad;
2139                         rt->source_type = le32_to_cpu(buf[0]);
2140                         rt->target_type = le32_to_cpu(buf[1]);
2141                         if (new_rangetr) {
2142                                 rc = next_entry(buf, fp, sizeof(u32));
2143                                 if (rc < 0)
2144                                         goto bad;
2145                                 rt->target_class = le32_to_cpu(buf[0]);
2146                         } else
2147                                 rt->target_class = p->process_class;
2148                         if (!policydb_type_isvalid(p, rt->source_type) ||
2149                             !policydb_type_isvalid(p, rt->target_type) ||
2150                             !policydb_class_isvalid(p, rt->target_class)) {
2151                                 rc = -EINVAL;
2152                                 goto bad;
2153                         }
2154                         rc = mls_read_range_helper(&rt->target_range, fp);
2155                         if (rc)
2156                                 goto bad;
2157                         if (!mls_range_isvalid(p, &rt->target_range)) {
2158                                 printk(KERN_WARNING "SELinux:  rangetrans:  invalid range\n");
2159                                 goto bad;
2160                         }
2161                         lrt = rt;
2162                 }
2163         }
2164
2165         p->type_attr_map = kmalloc(p->p_types.nprim*sizeof(struct ebitmap), GFP_KERNEL);
2166         if (!p->type_attr_map)
2167                 goto bad;
2168
2169         for (i = 0; i < p->p_types.nprim; i++) {
2170                 ebitmap_init(&p->type_attr_map[i]);
2171                 if (p->policyvers >= POLICYDB_VERSION_AVTAB) {
2172                         if (ebitmap_read(&p->type_attr_map[i], fp))
2173                                 goto bad;
2174                 }
2175                 /* add the type itself as the degenerate case */
2176                 if (ebitmap_set_bit(&p->type_attr_map[i], i, 1))
2177                                 goto bad;
2178         }
2179
2180         rc = policydb_bounds_sanity_check(p);
2181         if (rc)
2182                 goto bad;
2183
2184         rc = 0;
2185 out:
2186         return rc;
2187 bad_newc:
2188         ocontext_destroy(newc, OCON_FSUSE);
2189 bad:
2190         if (!rc)
2191                 rc = -EINVAL;
2192         policydb_destroy(p);
2193         goto out;
2194 }