Lines Matching refs:nsset
296 static void put_nsset(struct nsset *nsset) in put_nsset() argument
298 unsigned flags = nsset->flags; in put_nsset()
301 put_cred(nsset_cred(nsset)); in put_nsset()
306 if (nsset->fs && (flags & CLONE_NEWNS) && (flags & ~CLONE_NEWNS)) in put_nsset()
307 free_fs_struct(nsset->fs); in put_nsset()
308 if (nsset->nsproxy) in put_nsset()
309 free_nsproxy(nsset->nsproxy); in put_nsset()
312 static int prepare_nsset(unsigned flags, struct nsset *nsset) in prepare_nsset() argument
316 nsset->nsproxy = create_new_namespaces(0, me, current_user_ns(), me->fs); in prepare_nsset()
317 if (IS_ERR(nsset->nsproxy)) in prepare_nsset()
318 return PTR_ERR(nsset->nsproxy); in prepare_nsset()
321 nsset->cred = prepare_creds(); in prepare_nsset()
323 nsset->cred = current_cred(); in prepare_nsset()
324 if (!nsset->cred) in prepare_nsset()
329 nsset->fs = me->fs; in prepare_nsset()
331 nsset->fs = copy_fs_struct(me->fs); in prepare_nsset()
332 if (!nsset->fs) in prepare_nsset()
336 nsset->flags = flags; in prepare_nsset()
340 put_nsset(nsset); in prepare_nsset()
344 static inline int validate_ns(struct nsset *nsset, struct ns_common *ns) in validate_ns() argument
346 return ns->ops->install(nsset, ns); in validate_ns()
356 static int validate_nsset(struct nsset *nsset, struct pid *pid) in validate_nsset() argument
359 unsigned flags = nsset->flags; in validate_nsset()
414 ret = validate_ns(nsset, &user_ns->ns); in validate_nsset()
421 ret = validate_ns(nsset, from_mnt_ns(nsp->mnt_ns)); in validate_nsset()
428 ret = validate_ns(nsset, &nsp->uts_ns->ns); in validate_nsset()
436 ret = validate_ns(nsset, &nsp->ipc_ns->ns); in validate_nsset()
444 ret = validate_ns(nsset, &pid_ns->ns); in validate_nsset()
452 ret = validate_ns(nsset, &nsp->cgroup_ns->ns); in validate_nsset()
460 ret = validate_ns(nsset, &nsp->net_ns->ns); in validate_nsset()
468 ret = validate_ns(nsset, &nsp->time_ns->ns); in validate_nsset()
493 static void commit_nsset(struct nsset *nsset) in commit_nsset() argument
495 unsigned flags = nsset->flags; in commit_nsset()
501 commit_creds(nsset_cred(nsset)); in commit_nsset()
502 nsset->cred = NULL; in commit_nsset()
508 set_fs_root(me->fs, &nsset->fs->root); in commit_nsset()
509 set_fs_pwd(me->fs, &nsset->fs->pwd); in commit_nsset()
519 timens_commit(me, nsset->nsproxy->time_ns); in commit_nsset()
523 switch_task_namespaces(me, nsset->nsproxy); in commit_nsset()
524 nsset->nsproxy = NULL; in commit_nsset()
531 struct nsset nsset = {}; in SYSCALL_DEFINE2() local
551 err = prepare_nsset(flags, &nsset); in SYSCALL_DEFINE2()
556 err = validate_ns(&nsset, ns); in SYSCALL_DEFINE2()
558 err = validate_nsset(&nsset, file->private_data); in SYSCALL_DEFINE2()
560 commit_nsset(&nsset); in SYSCALL_DEFINE2()
563 put_nsset(&nsset); in SYSCALL_DEFINE2()