Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace

Pull namespace fixes from Eric Biederman:
"This is a set of 3 regression fixes.

This fixes /proc/mounts when using "ip netns add <netns>" to display
the actual mount point.

This fixes a regression in clone that broke lxc-attach.

This fixes a regression in the permission checks for mounting /proc
that made proc unmountable if binfmt_misc was in use. Oops.

My apologies for sending this pull request so late. Al Viro gave
interesting review comments about the d_path fix that I wanted to
address in detail before I sent this pull request. Unfortunately a
bad round of colds kept from addressing that in detail until today.
The executive summary of the review was:

Al: Is patching d_path really sufficient?
The prepend_path, d_path, d_absolute_path, and __d_path family of
functions is a really mess.

Me: Yes, patching d_path is really sufficient. Yes, the code is mess.
No it is not appropriate to rewrite all of d_path for a regression
that has existed for entirely too long already, when a two line
change will do"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace:
vfs: Fix a regression in mounting proc
fork: Allow CLONE_PARENT after setns(CLONE_NEWPID)
vfs: In d_path don't call d_dname on a mount point

+8 -3
+6 -1
fs/dcache.c
··· 3061 3061 * thus don't need to be hashed. They also don't need a name until a 3062 3062 * user wants to identify the object in /proc/pid/fd/. The little hack 3063 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 3071 return path->dentry->d_op->d_dname(path->dentry, buf, buflen); 3067 3072 3068 3073 rcu_read_lock();
+1 -1
fs/namespace.c
··· 2886 2886 struct inode *inode = child->mnt_mountpoint->d_inode; 2887 2887 if (!S_ISDIR(inode->i_mode)) 2888 2888 goto next; 2889 - if (inode->i_nlink != 2) 2889 + if (inode->i_nlink > 2) 2890 2890 goto next; 2891 2891 } 2892 2892 visible = true;
+1 -1
kernel/fork.c
··· 1172 1172 * do not allow it to share a thread group or signal handlers or 1173 1173 * parent with the forking task. 1174 1174 */ 1175 - if (clone_flags & (CLONE_SIGHAND | CLONE_PARENT)) { 1175 + if (clone_flags & CLONE_SIGHAND) { 1176 1176 if ((clone_flags & (CLONE_NEWUSER | CLONE_NEWPID)) || 1177 1177 (task_active_pid_ns(current) != 1178 1178 current->nsproxy->pid_ns_for_children))