Add minijail_run_pid() to return the pid of the jailed child process.

This is needed when sandboxing processes whose pid's are needed
by the parent process (starting with dhcpcd and shill).

BUG=None
TEST=security_Minijail0 still works.

Change-Id: I3e6c5b19b9c7e70aea8230e6c1395097fb697b4f
Reviewed-on: https://gerrit.chromium.org/gerrit/20413
Tested-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
Commit-Ready: Jorge Lucangeli Obes <jorgelo@chromium.org>
diff --git a/libminijail.c b/libminijail.c
index 07c7346..1451dcd 100644
--- a/libminijail.c
+++ b/libminijail.c
@@ -910,6 +910,12 @@
 int API minijail_run(struct minijail *j, const char *filename,
 		     char *const argv[])
 {
+	return minijail_run_pid(j, filename, argv, NULL);
+}
+
+int API minijail_run_pid(struct minijail *j, const char *filename,
+			 char *const argv[], pid_t *pchild_pid)
+{
 	unsigned int pidns = j->flags.pids ? CLONE_NEWPID : 0;
 	char *oldenv, *oldenv_copy = NULL;
 	pid_t child_pid;
@@ -956,6 +962,8 @@
 			kill(j->initpid, SIGKILL);
 			die("failed to send marshalled minijail");
 		}
+		if (pchild_pid)
+			*pchild_pid = child_pid;
 		return 0;
 	}
 	free(oldenv_copy);