aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/namespace.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index a51054f4e293..8edbad385cb7 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2758,6 +2758,30 @@ bool our_mnt(struct vfsmount *mnt)
2758 return check_mnt(real_mount(mnt)); 2758 return check_mnt(real_mount(mnt));
2759} 2759}
2760 2760
2761bool current_chrooted(void)
2762{
2763 /* Does the current process have a non-standard root */
2764 struct path ns_root;
2765 struct path fs_root;
2766 bool chrooted;
2767
2768 /* Find the namespace root */
2769 ns_root.mnt = &current->nsproxy->mnt_ns->root->mnt;
2770 ns_root.dentry = ns_root.mnt->mnt_root;
2771 path_get(&ns_root);
2772 while (d_mountpoint(ns_root.dentry) && follow_down_one(&ns_root))
2773 ;
2774
2775 get_fs_root(current->fs, &fs_root);
2776
2777 chrooted = !path_equal(&fs_root, &ns_root);
2778
2779 path_put(&fs_root);
2780 path_put(&ns_root);
2781
2782 return chrooted;
2783}
2784
2761static void *mntns_get(struct task_struct *task) 2785static void *mntns_get(struct task_struct *task)
2762{ 2786{
2763 struct mnt_namespace *ns = NULL; 2787 struct mnt_namespace *ns = NULL;