Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4865ecf1 authored by Serge E. Hallyn's avatar Serge E. Hallyn Committed by Linus Torvalds
Browse files

[PATCH] namespaces: utsname: implement utsname namespaces



This patch defines the uts namespace and some manipulators.
Adds the uts namespace to task_struct, and initializes a
system-wide init namespace.

It leaves a #define for system_utsname so sysctl will compile.
This define will be removed in a separate patch.

[akpm@osdl.org: build fix, cleanup]
Signed-off-by: default avatarSerge Hallyn <serue@us.ibm.com>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Andrey Savochkin <saw@sw.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 96b644bd
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@
#include <linux/file.h>
#include <linux/rcupdate.h>
#include <linux/irqflags.h>
#include <linux/utsname.h>
#include <linux/lockdep.h>

#define INIT_FDTABLE \
@@ -72,6 +73,7 @@ extern struct nsproxy init_nsproxy;
#define INIT_NSPROXY(nsproxy) {						\
	.count		= ATOMIC_INIT(1),				\
	.nslock		= SPIN_LOCK_UNLOCKED,				\
	.uts_ns		= &init_uts_ns,					\
	.namespace	= NULL,						\
}

+2 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
#include <linux/sched.h>

struct namespace;
struct uts_namespace;

/*
 * A structure to contain pointers to all per-process
@@ -21,6 +22,7 @@ struct namespace;
struct nsproxy {
	atomic_t count;
	spinlock_t nslock;
	struct uts_namespace *uts_ns;
	struct namespace *namespace;
};
extern struct nsproxy init_nsproxy;
+1 −0
Original line number Diff line number Diff line
@@ -753,6 +753,7 @@ static inline void prefetch_stack(struct task_struct *t) { }
struct audit_context;		/* See audit.c */
struct mempolicy;
struct pipe_inode_info;
struct uts_namespace;

enum sleep_type {
	SLEEP_NORMAL,
+37 −3
Original line number Diff line number Diff line
#ifndef _LINUX_UTSNAME_H
#define _LINUX_UTSNAME_H

#include <linux/sched.h>
#include <linux/kref.h>
#include <linux/nsproxy.h>
#include <asm/atomic.h>

#define __OLD_UTS_LEN 8

struct oldold_utsname {
@@ -30,17 +35,46 @@ struct new_utsname {
	char domainname[65];
};

extern struct new_utsname system_utsname;
struct uts_namespace {
	struct kref kref;
	struct new_utsname name;
};
extern struct uts_namespace init_uts_ns;

static inline void get_uts_ns(struct uts_namespace *ns)
{
	kref_get(&ns->kref);
}

#ifdef CONFIG_UTS_NS
extern int copy_utsname(int flags, struct task_struct *tsk);
extern void free_uts_ns(struct kref *kref);

static inline void put_uts_ns(struct uts_namespace *ns)
{
	kref_put(&ns->kref, free_uts_ns);
}
#else
static inline int copy_utsname(int flags, struct task_struct *tsk)
{
	return 0;
}
static inline void put_uts_ns(struct uts_namespace *ns)
{
}
#endif

static inline struct new_utsname *utsname(void)
{
	return &system_utsname;
	return &current->nsproxy->uts_ns->name;
}

static inline struct new_utsname *init_utsname(void)
{
	return &system_utsname;
	return &init_uts_ns.name;
}

#define system_utsname init_uts_ns.name

extern struct rw_semaphore uts_sem;
#endif
+8 −0
Original line number Diff line number Diff line
@@ -182,6 +182,14 @@ config TASK_DELAY_ACCT

	  Say N if unsure.

config UTS_NS
	bool "UTS Namespaces"
	default n
	help
	  Support uts namespaces.  This allows containers, i.e.
	  vservers, to use uts namespaces to provide different
	  uts info for different servers.  If unsure, say N.

config AUDIT
	bool "Auditing support"
	depends on NET
Loading