diff options
| -rw-r--r-- | fs/dcache.c | 7 | ||||
| -rw-r--r-- | fs/namespace.c | 2 | ||||
| -rw-r--r-- | kernel/fork.c | 2 |
3 files changed, 8 insertions, 3 deletions
diff --git a/fs/dcache.c b/fs/dcache.c index 6055d61811d3..cb4a10690868 100644 --- a/fs/dcache.c +++ b/fs/dcache.c | |||
| @@ -3061,8 +3061,13 @@ char *d_path(const struct path *path, char *buf, int buflen) | |||
| 3061 | * thus don't need to be hashed. They also don't need a name until a | 3061 | * thus don't need to be hashed. They also don't need a name until a |
| 3062 | * user wants to identify the object in /proc/pid/fd/. The little hack | 3062 | * user wants to identify the object in /proc/pid/fd/. The little hack |
| 3063 | * below allows us to generate a name for these objects on demand: | 3063 | * below allows us to generate a name for these objects on demand: |
| 3064 | * | ||
| 3065 | * Some pseudo inodes are mountable. When they are mounted | ||
| 3066 | * path->dentry == path->mnt->mnt_root. In that case don't call d_dname | ||
| 3067 | * and instead have d_path return the mounted path. | ||
| 3064 | */ | 3068 | */ |
| 3065 | if (path->dentry->d_op && path->dentry->d_op->d_dname) | 3069 | if (path->dentry->d_op && path->dentry->d_op->d_dname && |
| 3070 | (!IS_ROOT(path->dentry) || path->dentry != path->mnt->mnt_root)) | ||
| 3066 | return path->dentry->d_op->d_dname(path->dentry, buf, buflen); | 3071 | return path->dentry->d_op->d_dname(path->dentry, buf, buflen); |
| 3067 | 3072 | ||
| 3068 | rcu_read_lock(); | 3073 | rcu_read_lock(); |
diff --git a/fs/namespace.c b/fs/namespace.c index ac2ce8a766e1..be32ebccdeb1 100644 --- a/fs/namespace.c +++ b/fs/namespace.c | |||
| @@ -2886,7 +2886,7 @@ bool fs_fully_visible(struct file_system_type *type) | |||
| 2886 | struct inode *inode = child->mnt_mountpoint->d_inode; | 2886 | struct inode *inode = child->mnt_mountpoint->d_inode; |
| 2887 | if (!S_ISDIR(inode->i_mode)) | 2887 | if (!S_ISDIR(inode->i_mode)) |
| 2888 | goto next; | 2888 | goto next; |
| 2889 | if (inode->i_nlink != 2) | 2889 | if (inode->i_nlink > 2) |
| 2890 | goto next; | 2890 | goto next; |
| 2891 | } | 2891 | } |
| 2892 | visible = true; | 2892 | visible = true; |
diff --git a/kernel/fork.c b/kernel/fork.c index 5721f0e3f2da..dfa736c98d17 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -1172,7 +1172,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
| 1172 | * do not allow it to share a thread group or signal handlers or | 1172 | * do not allow it to share a thread group or signal handlers or |
| 1173 | * parent with the forking task. | 1173 | * parent with the forking task. |
| 1174 | */ | 1174 | */ |
| 1175 | if (clone_flags & (CLONE_SIGHAND | CLONE_PARENT)) { | 1175 | if (clone_flags & CLONE_SIGHAND) { |
| 1176 | if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) || | 1176 | if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) || |
| 1177 | (task_active_pid_ns(current) != | 1177 | (task_active_pid_ns(current) != |
| 1178 | current->nsproxy->pid_ns_for_children)) | 1178 | current->nsproxy->pid_ns_for_children)) |
