Blame view

kernel/linux-imx6_3.14.28/security/selinux/ss/sidtab.h 1.46 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  /*
   * A security identifier table (sidtab) is a hash table
   * of security context structures indexed by SID value.
   *
   * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
   */
  #ifndef _SS_SIDTAB_H_
  #define _SS_SIDTAB_H_
  
  #include "context.h"
  
  struct sidtab_node {
  	u32 sid;		/* security identifier */
  	struct context context;	/* security context structure */
  	struct sidtab_node *next;
  };
  
  #define SIDTAB_HASH_BITS 7
  #define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
  #define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
  
  #define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
  
  struct sidtab {
  	struct sidtab_node **htable;
  	unsigned int nel;	/* number of elements */
  	unsigned int next_sid;	/* next SID to allocate */
  	unsigned char shutdown;
  #define SIDTAB_CACHE_LEN	3
  	struct sidtab_node *cache[SIDTAB_CACHE_LEN];
  	spinlock_t lock;
  };
  
  int sidtab_init(struct sidtab *s);
  int sidtab_insert(struct sidtab *s, u32 sid, struct context *context);
  struct context *sidtab_search(struct sidtab *s, u32 sid);
  struct context *sidtab_search_force(struct sidtab *s, u32 sid);
  
  int sidtab_map(struct sidtab *s,
  	       int (*apply) (u32 sid,
  			     struct context *context,
  			     void *args),
  	       void *args);
  
  int sidtab_context_to_sid(struct sidtab *s,
  			  struct context *context,
  			  u32 *sid);
  
  void sidtab_hash_eval(struct sidtab *h, char *tag);
  void sidtab_destroy(struct sidtab *s);
  void sidtab_set(struct sidtab *dst, struct sidtab *src);
  void sidtab_shutdown(struct sidtab *s);
  
  #endif	/* _SS_SIDTAB_H_ */