xref: /openbmc/linux/security/selinux/ss/sidtab.h (revision 12b29f34558b9b45a2c6eabd4f3c6be939a3980f)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * A security identifier table (sidtab) is a hash table
31da177e4SLinus Torvalds  * of security context structures indexed by SID value.
41da177e4SLinus Torvalds  *
51da177e4SLinus Torvalds  * Author : Stephen Smalley, <sds@epoch.ncsc.mil>
61da177e4SLinus Torvalds  */
71da177e4SLinus Torvalds #ifndef _SS_SIDTAB_H_
81da177e4SLinus Torvalds #define _SS_SIDTAB_H_
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #include "context.h"
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds struct sidtab_node {
131da177e4SLinus Torvalds 	u32 sid;		/* security identifier */
141da177e4SLinus Torvalds 	struct context context;	/* security context structure */
151da177e4SLinus Torvalds 	struct sidtab_node *next;
161da177e4SLinus Torvalds };
171da177e4SLinus Torvalds 
181da177e4SLinus Torvalds #define SIDTAB_HASH_BITS 7
191da177e4SLinus Torvalds #define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
201da177e4SLinus Torvalds #define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1)
211da177e4SLinus Torvalds 
221da177e4SLinus Torvalds #define SIDTAB_SIZE SIDTAB_HASH_BUCKETS
231da177e4SLinus Torvalds 
241da177e4SLinus Torvalds struct sidtab {
251da177e4SLinus Torvalds 	struct sidtab_node **htable;
261da177e4SLinus Torvalds 	unsigned int nel;	/* number of elements */
271da177e4SLinus Torvalds 	unsigned int next_sid;	/* next SID to allocate */
281da177e4SLinus Torvalds 	unsigned char shutdown;
291da177e4SLinus Torvalds 	spinlock_t lock;
301da177e4SLinus Torvalds };
311da177e4SLinus Torvalds 
321da177e4SLinus Torvalds int sidtab_init(struct sidtab *s);
331da177e4SLinus Torvalds int sidtab_insert(struct sidtab *s, u32 sid, struct context *context);
341da177e4SLinus Torvalds struct context *sidtab_search(struct sidtab *s, u32 sid);
35*12b29f34SStephen Smalley struct context *sidtab_search_force(struct sidtab *s, u32 sid);
361da177e4SLinus Torvalds 
371da177e4SLinus Torvalds int sidtab_map(struct sidtab *s,
381da177e4SLinus Torvalds 	       int (*apply) (u32 sid,
391da177e4SLinus Torvalds 			     struct context *context,
401da177e4SLinus Torvalds 			     void *args),
411da177e4SLinus Torvalds 	       void *args);
421da177e4SLinus Torvalds 
431da177e4SLinus Torvalds int sidtab_context_to_sid(struct sidtab *s,
441da177e4SLinus Torvalds 			  struct context *context,
451da177e4SLinus Torvalds 			  u32 *sid);
461da177e4SLinus Torvalds 
471da177e4SLinus Torvalds void sidtab_hash_eval(struct sidtab *h, char *tag);
481da177e4SLinus Torvalds void sidtab_destroy(struct sidtab *s);
491da177e4SLinus Torvalds void sidtab_set(struct sidtab *dst, struct sidtab *src);
501da177e4SLinus Torvalds void sidtab_shutdown(struct sidtab *s);
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds #endif	/* _SS_SIDTAB_H_ */
531da177e4SLinus Torvalds 
541da177e4SLinus Torvalds 
55