| .. | .. |
|---|
| 35 | 35 | struct mnt_namespace *mnt_ns; |
|---|
| 36 | 36 | struct pid_namespace *pid_ns_for_children; |
|---|
| 37 | 37 | struct net *net_ns; |
|---|
| 38 | + struct time_namespace *time_ns; |
|---|
| 39 | + struct time_namespace *time_ns_for_children; |
|---|
| 38 | 40 | struct cgroup_namespace *cgroup_ns; |
|---|
| 39 | 41 | }; |
|---|
| 40 | 42 | extern struct nsproxy init_nsproxy; |
|---|
| 41 | 43 | |
|---|
| 42 | 44 | /* |
|---|
| 45 | + * A structure to encompass all bits needed to install |
|---|
| 46 | + * a partial or complete new set of namespaces. |
|---|
| 47 | + * |
|---|
| 48 | + * If a new user namespace is requested cred will |
|---|
| 49 | + * point to a modifiable set of credentials. If a pointer |
|---|
| 50 | + * to a modifiable set is needed nsset_cred() must be |
|---|
| 51 | + * used and tested. |
|---|
| 52 | + */ |
|---|
| 53 | +struct nsset { |
|---|
| 54 | + unsigned flags; |
|---|
| 55 | + struct nsproxy *nsproxy; |
|---|
| 56 | + struct fs_struct *fs; |
|---|
| 57 | + const struct cred *cred; |
|---|
| 58 | +}; |
|---|
| 59 | + |
|---|
| 60 | +static inline struct cred *nsset_cred(struct nsset *set) |
|---|
| 61 | +{ |
|---|
| 62 | + if (set->flags & CLONE_NEWUSER) |
|---|
| 63 | + return (struct cred *)set->cred; |
|---|
| 64 | + |
|---|
| 65 | + return NULL; |
|---|
| 66 | +} |
|---|
| 67 | + |
|---|
| 68 | +/* |
|---|
| 43 | 69 | * the namespaces access rules are: |
|---|
| 44 | 70 | * |
|---|
| 45 | 71 | * 1. only current task is allowed to change tsk->nsproxy pointer or |
|---|