Lines Matching refs:nsset

315 static void put_nsset(struct nsset *nsset)  in put_nsset()  argument
317 unsigned flags = nsset->flags; in put_nsset()
320 put_cred(nsset_cred(nsset)); in put_nsset()
325 if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS)) in put_nsset()
326 free_fs_struct(nsset->fs); in put_nsset()
327 if (nsset->nsproxy) in put_nsset()
328 free_nsproxy(nsset->nsproxy); in put_nsset()
331 static int prepare_nsset(unsigned flags, struct nsset *nsset) in prepare_nsset() argument
335 nsset->nsproxy = create_new_namespaces(0, me, current_user_ns(), me->fs); in prepare_nsset()
336 if (IS_ERR(nsset->nsproxy)) in prepare_nsset()
337 return PTR_ERR(nsset->nsproxy); in prepare_nsset()
340 nsset->cred = prepare_creds(); in prepare_nsset()
342 nsset->cred = current_cred(); in prepare_nsset()
343 if (!nsset->cred) in prepare_nsset()
348 nsset->fs = me->fs; in prepare_nsset()
350 nsset->fs = copy_fs_struct(me->fs); in prepare_nsset()
351 if (!nsset->fs) in prepare_nsset()
355 nsset->flags = flags; in prepare_nsset()
359 put_nsset(nsset); in prepare_nsset()
363 static inline int validate_ns(struct nsset *nsset, struct ns_common *ns) in validate_ns() argument
365 return ns->ops->install(nsset, ns); in validate_ns()
375 static int validate_nsset(struct nsset *nsset, struct pid *pid) in validate_nsset() argument
378 unsigned flags = nsset->flags; in validate_nsset()
433 ret = validate_ns(nsset, &user_ns->ns); in validate_nsset()
440 ret = validate_ns(nsset, from_mnt_ns(nsp->mnt_ns)); in validate_nsset()
447 ret = validate_ns(nsset, &nsp->uts_ns->ns); in validate_nsset()
455 ret = validate_ns(nsset, &nsp->ipc_ns->ns); in validate_nsset()
463 ret = validate_ns(nsset, &pid_ns->ns); in validate_nsset()
471 ret = validate_ns(nsset, &nsp->cgroup_ns->ns); in validate_nsset()
479 ret = validate_ns(nsset, &nsp->net_ns->ns); in validate_nsset()
487 ret = validate_ns(nsset, &nsp->time_ns->ns); in validate_nsset()
512 static void commit_nsset(struct nsset *nsset) in commit_nsset() argument
514 unsigned flags = nsset->flags; in commit_nsset()
520 commit_creds(nsset_cred(nsset)); in commit_nsset()
521 nsset->cred = NULL; in commit_nsset()
527 set_fs_root(me->fs, &nsset->fs->root); in commit_nsset()
528 set_fs_pwd(me->fs, &nsset->fs->pwd); in commit_nsset()
538 timens_commit(me, nsset->nsproxy->time_ns); in commit_nsset()
542 switch_task_namespaces(me, nsset->nsproxy); in commit_nsset()
543 nsset->nsproxy = NULL; in commit_nsset()
550 struct nsset nsset = {}; in SYSCALL_DEFINE2() local
570 err = prepare_nsset(flags, &nsset); in SYSCALL_DEFINE2()
575 err = validate_ns(&nsset, ns); in SYSCALL_DEFINE2()
577 err = validate_nsset(&nsset, file->private_data); in SYSCALL_DEFINE2()
579 commit_nsset(&nsset); in SYSCALL_DEFINE2()
582 put_nsset(&nsset); in SYSCALL_DEFINE2()