2007-07-16 13:40:59 +07:00
|
|
|
#ifndef _LINUX_USER_NAMESPACE_H
|
|
|
|
#define _LINUX_USER_NAMESPACE_H
|
|
|
|
|
|
|
|
#include <linux/kref.h>
|
|
|
|
#include <linux/nsproxy.h>
|
|
|
|
#include <linux/sched.h>
|
2007-07-16 13:41:01 +07:00
|
|
|
#include <linux/err.h>
|
2007-07-16 13:40:59 +07:00
|
|
|
|
|
|
|
#define UIDHASH_BITS (CONFIG_BASE_SMALL ? 3 : 8)
|
|
|
|
#define UIDHASH_SZ (1 << UIDHASH_BITS)
|
|
|
|
|
|
|
|
struct user_namespace {
|
|
|
|
struct kref kref;
|
2007-09-19 12:46:44 +07:00
|
|
|
struct hlist_head uidhash_table[UIDHASH_SZ];
|
2008-10-16 04:38:45 +07:00
|
|
|
struct user_struct *creator;
|
2009-02-28 05:03:03 +07:00
|
|
|
struct work_struct destroyer;
|
2007-07-16 13:40:59 +07:00
|
|
|
};
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2008-10-16 04:38:45 +07:00
|
|
|
extern int create_user_ns(struct cred *new);
|
2007-07-16 13:40:59 +07:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
|
|
|
{
|
|
|
|
return &init_user_ns;
|
|
|
|
}
|
|
|
|
|
2008-10-16 04:38:45 +07:00
|
|
|
static inline int create_user_ns(struct cred *new)
|
2007-07-16 13:40:59 +07:00
|
|
|
{
|
2008-10-16 04:38:45 +07:00
|
|
|
return -EINVAL;
|
2007-07-16 13:40:59 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
static inline void put_user_ns(struct user_namespace *ns)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _LINUX_USER_H */
|