Merge "Remove dead minijail_disable_ptrace() declaration."
diff --git a/libminijail.c b/libminijail.c
index be6da23..2927b62 100644
--- a/libminijail.c
+++ b/libminijail.c
@@ -1092,7 +1092,7 @@
 
 	/*
 	 * Keep the fd for both old and new root.
-	 * It will be used in fchdir later.
+	 * It will be used in fchdir(2) later.
 	 */
 	oldroot = open("/", O_DIRECTORY | O_RDONLY | O_CLOEXEC);
 	if (oldroot < 0)
@@ -1102,7 +1102,7 @@
 		pdie("failed to open %s for fchdir", j->chrootdir);
 
 	/*
-	 * To ensure chrootdir is the root of a file system,
+	 * To ensure j->chrootdir is the root of a filesystem,
 	 * do a self bind mount.
 	 */
 	if (mount(j->chrootdir, j->chrootdir, "bind", MS_BIND | MS_REC, ""))
@@ -1113,11 +1113,23 @@
 		pdie("pivot_root");
 
 	/*
-	 * Now the old root is mounted on top of the new root. Use fchdir to
+	 * Now the old root is mounted on top of the new root. Use fchdir(2) to
 	 * change to the old root and unmount it.
 	 */
 	if (fchdir(oldroot))
 		pdie("failed to fchdir to old /");
+
+	/*
+	 * If j->flags.skip_remount_private was enabled for minijail_enter(), there
+	 * could be a shared mount point under |oldroot|. In that case, mounts
+	 * under this shared mount point will be unmounted below, and this
+	 * unmounting will propagate to the original mount namespace (because the
+	 * mount point is shared). To prevent this unexpected unmounting, remove
+	 * these mounts from their peer groups by recursively remounting them as
+	 * MS_PRIVATE.
+	 */
+	if (mount(NULL, ".", NULL, MS_REC | MS_PRIVATE, NULL))
+		pdie("failed to mount(/, private) before umount(/)");
 	/* The old root might be busy, so use lazy unmount. */
 	if (umount2(".", MNT_DETACH))
 		pdie("umount(/)");
diff --git a/minijail0.1 b/minijail0.1
index 8d7e188..685b6a6 100644
--- a/minijail0.1
+++ b/minijail0.1
@@ -51,6 +51,9 @@
 (Other direct numbers may be specified if minijail0 is not in sync with the
  host kernel or something like 32/64-bit compatibility issues exist.)
 .TP
+\fB-I\fR
+Run \fIprogram\fR as init (pid 1) inside a new pid namespace (implies \fB-p\fR).
+.TP
 \fB-k <src>,<dest>,<type>[,<flags>]\fR
 Mount \fIsrc\fR, a \fItype\fR filesystem, into the chroot directory at \fIdest\fR, with optional \fIflags\fR.
 .TP
@@ -63,6 +66,11 @@
 Run inside a new IPC namespace. This option makes the program's System V IPC
 namespace independent.
 .TP
+\fB-L\fR
+Report blocked syscalls to syslog when using seccomp filter. This option will
+force certain syscalls to be allowed in order to achieve this, depending on the
+system.
+.TP
 \fB-m "<uid> <loweruid> <count>[,<uid> <loweruid> <count>]"\fR
 Set the uid mapping of a user namespace (implies \fB-pU\fR). Same arguments as
 \fBnewuidmap(1)\fR. Multiple mappings should be separated by ','.
@@ -71,6 +79,10 @@
 Set the gid mapping of a user namespace (implies \fB-pU\fR). Same arguments as
 \fBnewgidmap(1)\fR. Multiple mappings should be separated by ','.
 .TP
+\fB-n\fR
+Set the process's \fIno_new_privs\fR bit. See \fBprctl(2)\fR and the kernel
+source file \fIDocumentation/prctl/no_new_privs.txt\fR for more info.
+.TP
 \fB-p\fR
 Run inside a new PID namespace. This option will make it impossible for the
 program to see or affect processes that are not its descendants. This implies
@@ -108,6 +120,9 @@
 Change users to \fIuser\fR, which may be either a user name or a numeric user
 ID.
 .TP
+\fB-U\fR
+Enter a new user namespace (implies \fB-p\fR).
+.TP
 \fB-v\fR
 Run inside a new VFS namespace. This option makes the program's mountpoints
 independent of the rest of the system's.
diff --git a/minijail0.c b/minijail0.c
index f3caeac..300e921 100644
--- a/minijail0.c
+++ b/minijail0.c
@@ -145,7 +145,7 @@
 	       "  -T <type>:  Don't access <program> before execve(2), assume <type> ELF binary.\n"
 	       "              <type> must be 'static' or 'dynamic'.\n"
 	       "  -u <user>:  Change uid to <user>.\n"
-	       "  -U          Enter new user namespace (implies -p).\n"
+	       "  -U:         Enter new user namespace (implies -p).\n"
 	       "  -v:         Enter new mount namespace.\n"
 	       "  -V <file>:  Enter specified mount namespace.\n");
 }