linux/include/linux/user_namespace.h
<<
>>
Prefs
   1#ifndef _LINUX_USER_NAMESPACE_H
   2#define _LINUX_USER_NAMESPACE_H
   3
   4#include <linux/kref.h>
   5#include <linux/nsproxy.h>
   6#include <linux/sched.h>
   7#include <linux/err.h>
   8
   9#define UID_GID_MAP_MAX_EXTENTS 5
  10
  11struct uid_gid_map {    /* 64 bytes -- 1 cache line */
  12        u32 nr_extents;
  13        struct uid_gid_extent {
  14                u32 first;
  15                u32 lower_first;
  16                u32 count;
  17        } extent[UID_GID_MAP_MAX_EXTENTS];
  18};
  19
  20struct user_namespace {
  21        struct uid_gid_map      uid_map;
  22        struct uid_gid_map      gid_map;
  23        struct uid_gid_map      projid_map;
  24        struct kref             kref;
  25        struct user_namespace   *parent;
  26        kuid_t                  owner;
  27        kgid_t                  group;
  28};
  29
  30extern struct user_namespace init_user_ns;
  31
  32#ifdef CONFIG_USER_NS
  33
  34static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
  35{
  36        if (ns)
  37                kref_get(&ns->kref);
  38        return ns;
  39}
  40
  41extern int create_user_ns(struct cred *new);
  42extern void free_user_ns(struct kref *kref);
  43
  44static inline void put_user_ns(struct user_namespace *ns)
  45{
  46        if (ns)
  47                kref_put(&ns->kref, free_user_ns);
  48}
  49
  50struct seq_operations;
  51extern struct seq_operations proc_uid_seq_operations;
  52extern struct seq_operations proc_gid_seq_operations;
  53extern struct seq_operations proc_projid_seq_operations;
  54extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *);
  55extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *);
  56extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *);
  57#else
  58
  59static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
  60{
  61        return &init_user_ns;
  62}
  63
  64static inline int create_user_ns(struct cred *new)
  65{
  66        return -EINVAL;
  67}
  68
  69static inline void put_user_ns(struct user_namespace *ns)
  70{
  71}
  72
  73#endif
  74
  75#endif /* _LINUX_USER_H */
  76