user_namespace.h 1.4 KB
Newer Older
1 2 3 4 5 6
#ifndef _LINUX_USER_NAMESPACE_H
#define _LINUX_USER_NAMESPACE_H

#include <linux/kref.h>
#include <linux/nsproxy.h>
#include <linux/sched.h>
S
Serge E. Hallyn 已提交
7
#include <linux/err.h>
8 9 10

struct user_namespace {
	struct kref		kref;
11
	struct user_namespace	*parent;
12
	struct user_struct	*creator;
13
	struct work_struct	destroyer;
14 15 16 17 18 19 20 21 22 23 24 25 26
};

extern struct user_namespace init_user_ns;

#ifdef CONFIG_USER_NS

static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
{
	if (ns)
		kref_get(&ns->kref);
	return ns;
}

27
extern int create_user_ns(struct cred *new);
28 29 30 31 32 33 34 35
extern void free_user_ns(struct kref *kref);

static inline void put_user_ns(struct user_namespace *ns)
{
	if (ns)
		kref_put(&ns->kref, free_user_ns);
}

36 37 38
uid_t user_ns_map_uid(struct user_namespace *to, const struct cred *cred, uid_t uid);
gid_t user_ns_map_gid(struct user_namespace *to, const struct cred *cred, gid_t gid);

39 40 41 42 43 44 45
#else

static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
{
	return &init_user_ns;
}

46
static inline int create_user_ns(struct cred *new)
47
{
48
	return -EINVAL;
49 50 51 52 53 54
}

static inline void put_user_ns(struct user_namespace *ns)
{
}

55 56 57 58 59 60 61 62 63 64 65
static inline uid_t user_ns_map_uid(struct user_namespace *to,
	const struct cred *cred, uid_t uid)
{
	return uid;
}
static inline gid_t user_ns_map_gid(struct user_namespace *to,
	const struct cred *cred, gid_t gid)
{
	return gid;
}

66 67 68
#endif

#endif /* _LINUX_USER_H */