1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 #ifndef _SS_AVTAB_H_
  22 #define _SS_AVTAB_H_
  23 
  24 #include "security.h"
  25 
  26 struct avtab_key {
  27         u16 source_type;        
  28         u16 target_type;        
  29         u16 target_class;       
  30 #define AVTAB_ALLOWED           0x0001
  31 #define AVTAB_AUDITALLOW        0x0002
  32 #define AVTAB_AUDITDENY         0x0004
  33 #define AVTAB_AV                (AVTAB_ALLOWED | AVTAB_AUDITALLOW | AVTAB_AUDITDENY)
  34 #define AVTAB_TRANSITION        0x0010
  35 #define AVTAB_MEMBER            0x0020
  36 #define AVTAB_CHANGE            0x0040
  37 #define AVTAB_TYPE              (AVTAB_TRANSITION | AVTAB_MEMBER | AVTAB_CHANGE)
  38 
  39 #define AVTAB_XPERMS_ALLOWED    0x0100
  40 #define AVTAB_XPERMS_AUDITALLOW 0x0200
  41 #define AVTAB_XPERMS_DONTAUDIT  0x0400
  42 #define AVTAB_XPERMS            (AVTAB_XPERMS_ALLOWED | \
  43                                 AVTAB_XPERMS_AUDITALLOW | \
  44                                 AVTAB_XPERMS_DONTAUDIT)
  45 #define AVTAB_ENABLED_OLD   0x80000000 
  46 #define AVTAB_ENABLED           0x8000 
  47         u16 specified;  
  48 };
  49 
  50 
  51 
  52 
  53 
  54 struct avtab_extended_perms {
  55 
  56 #define AVTAB_XPERMS_IOCTLFUNCTION      0x01
  57 #define AVTAB_XPERMS_IOCTLDRIVER        0x02
  58         
  59         u8 specified; 
  60         
  61 
  62 
  63 
  64 
  65         u8 driver;
  66         
  67         struct extended_perms_data perms;
  68 };
  69 
  70 struct avtab_datum {
  71         union {
  72                 u32 data; 
  73                 struct avtab_extended_perms *xperms;
  74         } u;
  75 };
  76 
  77 struct avtab_node {
  78         struct avtab_key key;
  79         struct avtab_datum datum;
  80         struct avtab_node *next;
  81 };
  82 
  83 struct avtab {
  84         struct avtab_node **htable;
  85         u32 nel;        
  86         u32 nslot;      
  87         u32 mask;       
  88 };
  89 
  90 int avtab_init(struct avtab *);
  91 int avtab_alloc(struct avtab *, u32);
  92 struct avtab_datum *avtab_search(struct avtab *h, struct avtab_key *k);
  93 void avtab_destroy(struct avtab *h);
  94 void avtab_hash_eval(struct avtab *h, char *tag);
  95 
  96 struct policydb;
  97 int avtab_read_item(struct avtab *a, void *fp, struct policydb *pol,
  98                     int (*insert)(struct avtab *a, struct avtab_key *k,
  99                                   struct avtab_datum *d, void *p),
 100                     void *p);
 101 
 102 int avtab_read(struct avtab *a, void *fp, struct policydb *pol);
 103 int avtab_write_item(struct policydb *p, struct avtab_node *cur, void *fp);
 104 int avtab_write(struct policydb *p, struct avtab *a, void *fp);
 105 
 106 struct avtab_node *avtab_insert_nonunique(struct avtab *h, struct avtab_key *key,
 107                                           struct avtab_datum *datum);
 108 
 109 struct avtab_node *avtab_search_node(struct avtab *h, struct avtab_key *key);
 110 
 111 struct avtab_node *avtab_search_node_next(struct avtab_node *node, int specified);
 112 
 113 #define MAX_AVTAB_HASH_BITS 16
 114 #define MAX_AVTAB_HASH_BUCKETS (1 << MAX_AVTAB_HASH_BITS)
 115 
 116 #endif  
 117