diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/nsproxy.c | 15 | ||||
| -rw-r--r-- | kernel/utsname.c | 6 |
2 files changed, 7 insertions, 14 deletions
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index 8e7811086b82..ef42d0ab3115 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c | |||
| @@ -204,20 +204,13 @@ void switch_task_namespaces(struct task_struct *p, struct nsproxy *new) | |||
| 204 | 204 | ||
| 205 | might_sleep(); | 205 | might_sleep(); |
| 206 | 206 | ||
| 207 | task_lock(p); | ||
| 207 | ns = p->nsproxy; | 208 | ns = p->nsproxy; |
| 209 | p->nsproxy = new; | ||
| 210 | task_unlock(p); | ||
| 208 | 211 | ||
| 209 | rcu_assign_pointer(p->nsproxy, new); | 212 | if (ns && atomic_dec_and_test(&ns->count)) |
| 210 | |||
| 211 | if (ns && atomic_dec_and_test(&ns->count)) { | ||
| 212 | /* | ||
| 213 | * wait for others to get what they want from this nsproxy. | ||
| 214 | * | ||
| 215 | * cannot release this nsproxy via the call_rcu() since | ||
| 216 | * put_mnt_ns() will want to sleep | ||
| 217 | */ | ||
| 218 | synchronize_rcu(); | ||
| 219 | free_nsproxy(ns); | 213 | free_nsproxy(ns); |
| 220 | } | ||
| 221 | } | 214 | } |
| 222 | 215 | ||
| 223 | void exit_task_namespaces(struct task_struct *p) | 216 | void exit_task_namespaces(struct task_struct *p) |
diff --git a/kernel/utsname.c b/kernel/utsname.c index fd393124e507..883aaaa7de8a 100644 --- a/kernel/utsname.c +++ b/kernel/utsname.c | |||
| @@ -93,13 +93,13 @@ static void *utsns_get(struct task_struct *task) | |||
| 93 | struct uts_namespace *ns = NULL; | 93 | struct uts_namespace *ns = NULL; |
| 94 | struct nsproxy *nsproxy; | 94 | struct nsproxy *nsproxy; |
| 95 | 95 | ||
| 96 | rcu_read_lock(); | 96 | task_lock(task); |
| 97 | nsproxy = task_nsproxy(task); | 97 | nsproxy = task->nsproxy; |
| 98 | if (nsproxy) { | 98 | if (nsproxy) { |
| 99 | ns = nsproxy->uts_ns; | 99 | ns = nsproxy->uts_ns; |
| 100 | get_uts_ns(ns); | 100 | get_uts_ns(ns); |
| 101 | } | 101 | } |
| 102 | rcu_read_unlock(); | 102 | task_unlock(task); |
| 103 | 103 | ||
| 104 | return ns; | 104 | return ns; |
| 105 | } | 105 | } |
