On Tue, Oct 07, 2014 at 02:24:36PM +0100, Al Viro wrote: > On Tue, Oct 07, 2014 at 04:00:12PM +0400, Andrey Vagin wrote: > > This patch fixes a bug, which is triggered by following code: > > while (1) { > > if (umount2("/", MNT_DETACH) || > > setns(fd, CLONE_NEWNS)) > > return break; > > } > > Excuse me, but that makes no sense whatsoever (not to mention that > reproducer won't compile - return break; alone is enough to make > sure of that). > > Could you post the real reproducer? #define _GNU_SOURCE #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sched.h> #include <unistd.h> #include <sys/mount.h> int main(int argc, char **argv) { int fd; fd = open("/proc/self/ns/mnt", O_RDONLY); if (fd < 0) return 1; while (1) { if (umount2("/", MNT_DETACH) || setns(fd, CLONE_NEWNS)) break; } return 0; } root@ubuntu:/home/avagin# gcc -Wall nsenter.c -o nsenter root@ubuntu:/home/avagin# strace ./nsenter execve("./nsenter", ["./nsenter"], [/* 22 vars */]) = 0 ... open("/proc/self/ns/mnt", O_RDONLY) = 3 umount("/", MNT_DETACH) = 0 setns(3, 131072) = 0 umount("/", MNT_DETACH -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html