diff options
Diffstat (limited to 'kernel/nsproxy.c')
| -rw-r--r-- | kernel/nsproxy.c | 16 | 
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index f5b9ee6f6bb..7b05bce75cd 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c @@ -117,7 +117,7 @@ int copy_namespaces(int flags, struct task_struct *tsk)  		goto out_pid;  out: -	put_nsproxy(old_ns); +	put_and_finalize_nsproxy(old_ns);  	return err;  out_pid: @@ -135,6 +135,20 @@ out_ns:  	goto out;  } +struct nsproxy *put_nsproxy(struct nsproxy *ns) +{ +	if (ns) { +		if (atomic_dec_and_test(&ns->count)) { +			if (ns->mnt_ns) { +				put_mnt_ns(ns->mnt_ns); +				ns->mnt_ns = NULL; +			} +			return ns; +		} +	} +	return NULL; +} +  void free_nsproxy(struct nsproxy *ns)  {  	if (ns->mnt_ns)  | 
