1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * A security identifier table (sidtab) is a hash table 41da177e4SLinus Torvalds * of security context structures indexed by SID value. 51da177e4SLinus Torvalds * 67efbb60bSStephen Smalley * Author : Stephen Smalley, <sds@tycho.nsa.gov> 71da177e4SLinus Torvalds */ 81da177e4SLinus Torvalds #ifndef _SS_SIDTAB_H_ 91da177e4SLinus Torvalds #define _SS_SIDTAB_H_ 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds #include "context.h" 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds struct sidtab_node { 141da177e4SLinus Torvalds u32 sid; /* security identifier */ 151da177e4SLinus Torvalds struct context context; /* security context structure */ 161da177e4SLinus Torvalds struct sidtab_node *next; 171da177e4SLinus Torvalds }; 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds #define SIDTAB_HASH_BITS 7 201da177e4SLinus Torvalds #define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS) 211da177e4SLinus Torvalds #define SIDTAB_HASH_MASK (SIDTAB_HASH_BUCKETS-1) 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds #define SIDTAB_SIZE SIDTAB_HASH_BUCKETS 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds struct sidtab { 261da177e4SLinus Torvalds struct sidtab_node **htable; 271da177e4SLinus Torvalds unsigned int nel; /* number of elements */ 281da177e4SLinus Torvalds unsigned int next_sid; /* next SID to allocate */ 291da177e4SLinus Torvalds unsigned char shutdown; 3073ff5fc0SEric Paris #define SIDTAB_CACHE_LEN 3 3173ff5fc0SEric Paris struct sidtab_node *cache[SIDTAB_CACHE_LEN]; 321da177e4SLinus Torvalds spinlock_t lock; 331da177e4SLinus Torvalds }; 341da177e4SLinus Torvalds 351da177e4SLinus Torvalds int sidtab_init(struct sidtab *s); 361da177e4SLinus Torvalds int sidtab_insert(struct sidtab *s, u32 sid, struct context *context); 371da177e4SLinus Torvalds struct context *sidtab_search(struct sidtab *s, u32 sid); 3812b29f34SStephen Smalley struct context *sidtab_search_force(struct sidtab *s, u32 sid); 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds int sidtab_map(struct sidtab *s, 411da177e4SLinus Torvalds int (*apply) (u32 sid, 421da177e4SLinus Torvalds struct context *context, 431da177e4SLinus Torvalds void *args), 441da177e4SLinus Torvalds void *args); 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds int sidtab_context_to_sid(struct sidtab *s, 471da177e4SLinus Torvalds struct context *context, 481da177e4SLinus Torvalds u32 *sid); 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds void sidtab_hash_eval(struct sidtab *h, char *tag); 511da177e4SLinus Torvalds void sidtab_destroy(struct sidtab *s); 521da177e4SLinus Torvalds void sidtab_set(struct sidtab *dst, struct sidtab *src); 531da177e4SLinus Torvalds void sidtab_shutdown(struct sidtab *s); 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds #endif /* _SS_SIDTAB_H_ */ 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds 58