/*
 * 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_ */


/linux/net-next.git/'>summary</a><a href='/cgit.cgi/linux/net-next.git/refs/?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>refs</a><a class='active' href='/cgit.cgi/linux/net-next.git/log/drivers/usb/gadget'>log</a><a href='/cgit.cgi/linux/net-next.git/tree/drivers/usb/gadget?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>tree</a><a href='/cgit.cgi/linux/net-next.git/commit/drivers/usb/gadget?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>commit</a><a href='/cgit.cgi/linux/net-next.git/diff/drivers/usb/gadget?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>diff</a></td><td class='form'><form class='right' method='get' action='/cgit.cgi/linux/net-next.git/log/drivers/usb/gadget'>
<input type='hidden' name='id' value='b66a8043d0baa9818a407ed857eada5cb21cd9bb'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit.cgi/linux/net-next.git/log/?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>root</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>drivers</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>usb</a>/<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/gadget?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb'>gadget</a></div><div class='content'><table class='list nowrap'><tr class='nohover'><th class='left'>Age</th><th class='left'>Commit message (<a href='/cgit.cgi/linux/net-next.git/log/drivers/usb/gadget?id=b66a8043d0baa9818a407ed857eada5cb21cd9bb&amp;showmsg=1'>Expand</a>)</th><th class='left'>Author</th><th class='left'>Files</th><th class='left'>Lines</th></tr>
e='hidden' name='id' value='33e962c8871f015f5c8978384553dddcf5b81b22'/><table><tr><td colspan='2'/></tr><tr><td class='label'>context:</td><td class='ctrl'><select name='context' onchange='this.form.submit();'><option value='1'>1</option><option value='2'>2</option><option value='3' selected='selected'>3</option><option value='4'>4</option><option value='5'>5</option><option value='6'>6</option><option value='7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?h=nds-private-remove&amp;id=33e962c8871f015f5c8978384553dddcf5b81b22'>Diffstat</a> (limited to 'kernel/watchdog.c')</div><table summary='diffstat' class='diffstat'>