Lines Matching refs:nsset

301 static void put_nsset(struct nsset *nsset)  in put_nsset()  argument
303 unsigned flags = nsset->flags; in put_nsset()
306 put_cred(nsset_cred(nsset)); in put_nsset()
311 if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS)) in put_nsset()
312 free_fs_struct(nsset->fs); in put_nsset()
313 if (nsset->nsproxy) in put_nsset()
314 free_nsproxy(nsset->nsproxy); in put_nsset()
317 static int prepare_nsset(unsigned flags, struct nsset *nsset) in prepare_nsset() argument
321 nsset->nsproxy = create_new_namespaces(0, me, current_user_ns(), me->fs); in prepare_nsset()
322 if (IS_ERR(nsset->nsproxy)) in prepare_nsset()
323 return PTR_ERR(nsset->nsproxy); in prepare_nsset()
326 nsset->cred = prepare_creds(); in prepare_nsset()
328 nsset->cred = current_cred(); in prepare_nsset()
329 if (!nsset->cred) in prepare_nsset()
334 nsset->fs = me->fs; in prepare_nsset()
336 nsset->fs = copy_fs_struct(me->fs); in prepare_nsset()
337 if (!nsset->fs) in prepare_nsset()
341 nsset->flags = flags; in prepare_nsset()
345 put_nsset(nsset); in prepare_nsset()
349 static inline int validate_ns(struct nsset *nsset, struct ns_common *ns) in validate_ns() argument
351 return ns->ops->install(nsset, ns); in validate_ns()
361 static int validate_nsset(struct nsset *nsset, struct pid *pid) in validate_nsset() argument
364 unsigned flags = nsset->flags; in validate_nsset()
419 ret = validate_ns(nsset, &user_ns->ns); in validate_nsset()
426 ret = validate_ns(nsset, from_mnt_ns(nsp->mnt_ns)); in validate_nsset()
433 ret = validate_ns(nsset, &nsp->uts_ns->ns); in validate_nsset()
441 ret = validate_ns(nsset, &nsp->ipc_ns->ns); in validate_nsset()
449 ret = validate_ns(nsset, &pid_ns->ns); in validate_nsset()
457 ret = validate_ns(nsset, &nsp->cgroup_ns->ns); in validate_nsset()
465 ret = validate_ns(nsset, &nsp->net_ns->ns); in validate_nsset()
473 ret = validate_ns(nsset, &nsp->time_ns->ns); in validate_nsset()
498 static void commit_nsset(struct nsset *nsset) in commit_nsset() argument
500 unsigned flags = nsset->flags; in commit_nsset()
506 commit_creds(nsset_cred(nsset)); in commit_nsset()
507 nsset->cred = NULL; in commit_nsset()
513 set_fs_root(me->fs, &nsset->fs->root); in commit_nsset()
514 set_fs_pwd(me->fs, &nsset->fs->pwd); in commit_nsset()
524 timens_commit(me, nsset->nsproxy->time_ns); in commit_nsset()
528 switch_task_namespaces(me, nsset->nsproxy); in commit_nsset()
529 nsset->nsproxy = NULL; in commit_nsset()
536 struct nsset nsset = {}; in SYSCALL_DEFINE2() local
556 err = prepare_nsset(flags, &nsset); in SYSCALL_DEFINE2()
561 err = validate_ns(&nsset, ns); in SYSCALL_DEFINE2()
563 err = validate_nsset(&nsset, file->private_data); in SYSCALL_DEFINE2()
565 commit_nsset(&nsset); in SYSCALL_DEFINE2()
568 put_nsset(&nsset); in SYSCALL_DEFINE2()