#include <linux/init.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/bitops.h>
#include <linux/key.h>
#include <linux/sched/user.h>
#include <linux/interrupt.h>
#include <linux/export.h>
#include <linux/user_namespace.h>
#include <linux/binfmts.h>
#include <linux/proc_ns.h>
#if IS_ENABLED(CONFIG_BINFMT_MISC)
struct binfmt_misc init_binfmt_misc = …;
EXPORT_SYMBOL_GPL(…);
#endif
struct user_namespace init_user_ns = …;
EXPORT_SYMBOL_GPL(…);
#define UIDHASH_BITS …
#define UIDHASH_SZ …
#define UIDHASH_MASK …
#define __uidhashfn(uid) …
#define uidhashentry(uid) …
static struct kmem_cache *uid_cachep;
static struct hlist_head uidhash_table[UIDHASH_SZ];
static DEFINE_SPINLOCK(uidhash_lock);
struct user_struct root_user = …;
static void uid_hash_insert(struct user_struct *up, struct hlist_head *hashent)
{ … }
static void uid_hash_remove(struct user_struct *up)
{ … }
static struct user_struct *uid_hash_find(kuid_t uid, struct hlist_head *hashent)
{ … }
static int user_epoll_alloc(struct user_struct *up)
{ … }
static void user_epoll_free(struct user_struct *up)
{ … }
static void free_user(struct user_struct *up, unsigned long flags)
__releases(&uidhash_lock)
{ … }
struct user_struct *find_user(kuid_t uid)
{ … }
void free_uid(struct user_struct *up)
{ … }
EXPORT_SYMBOL_GPL(…);
struct user_struct *alloc_uid(kuid_t uid)
{ … }
static int __init uid_cache_init(void)
{ … }
subsys_initcall(uid_cache_init);