linux/include/linux/sched/user.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _LINUX_SCHED_USER_H
   3#define _LINUX_SCHED_USER_H
   4
   5#include <linux/uidgid.h>
   6#include <linux/atomic.h>
   7#include <linux/refcount.h>
   8#include <linux/ratelimit.h>
   9
  10/*
  11 * Some day this will be a full-fledged user tracking system..
  12 */
  13struct user_struct {
  14        refcount_t __count;     /* reference count */
  15        atomic_t processes;     /* How many processes does this user have? */
  16        atomic_t sigpending;    /* How many pending signals does this user have? */
  17#ifdef CONFIG_FANOTIFY
  18        atomic_t fanotify_listeners;
  19#endif
  20#ifdef CONFIG_EPOLL
  21        atomic_long_t epoll_watches; /* The number of file descriptors currently watched */
  22#endif
  23#ifdef CONFIG_POSIX_MQUEUE
  24        /* protected by mq_lock */
  25        unsigned long mq_bytes; /* How many bytes can be allocated to mqueue? */
  26#endif
  27        unsigned long locked_shm; /* How many pages of mlocked shm ? */
  28        unsigned long unix_inflight;    /* How many files in flight in unix sockets */
  29        atomic_long_t pipe_bufs;  /* how many pages are allocated in pipe buffers */
  30
  31        /* Hash table maintenance information */
  32        struct hlist_node uidhash_node;
  33        kuid_t uid;
  34
  35#if defined(CONFIG_PERF_EVENTS) || defined(CONFIG_BPF_SYSCALL) || \
  36    defined(CONFIG_NET) || defined(CONFIG_IO_URING)
  37        atomic_long_t locked_vm;
  38#endif
  39
  40        /* Miscellaneous per-user rate limit */
  41        struct ratelimit_state ratelimit;
  42};
  43
  44extern int uids_sysfs_init(void);
  45
  46extern struct user_struct *find_user(kuid_t);
  47
  48extern struct user_struct root_user;
  49#define INIT_USER (&root_user)
  50
  51
  52/* per-UID process charging. */
  53extern struct user_struct * alloc_uid(kuid_t);
  54static inline struct user_struct *get_uid(struct user_struct *u)
  55{
  56        refcount_inc(&u->__count);
  57        return u;
  58}
  59extern void free_uid(struct user_struct *);
  60
  61#endif /* _LINUX_SCHED_USER_H */
  62