From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <gentoo-commits+bounces-980174-garchives=archives.gentoo.org@lists.gentoo.org>
Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
	(No client certificate requested)
	by finch.gentoo.org (Postfix) with ESMTPS id 691851396D9
	for <garchives@archives.gentoo.org>; Tue, 24 Oct 2017 15:43:12 +0000 (UTC)
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id BE1822BC026;
	Tue, 24 Oct 2017 15:43:11 +0000 (UTC)
Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by pigeon.gentoo.org (Postfix) with ESMTPS id 9B2492BC026
	for <gentoo-commits@lists.gentoo.org>; Tue, 24 Oct 2017 15:43:11 +0000 (UTC)
Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id 8CC8933C770
	for <gentoo-commits@lists.gentoo.org>; Tue, 24 Oct 2017 15:43:09 +0000 (UTC)
Received: from localhost.localdomain (localhost [IPv6:::1])
	by oystercatcher.gentoo.org (Postfix) with ESMTP id EE7EF31A
	for <gentoo-commits@lists.gentoo.org>; Tue, 24 Oct 2017 15:43:07 +0000 (UTC)
From: "William Hubbs" <williamh@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: 8bit
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "William Hubbs" <williamh@gentoo.org>
Message-ID: <1508859457.f5acc66db7d1a0bfad6a40eefc0240b80f52df94.williamh@OpenRC>
Subject: [gentoo-commits] proj/openrc:master commit in: src/librc/
X-VCS-Repository: proj/openrc
X-VCS-Files: src/librc/librc-daemon.c
X-VCS-Directories: src/librc/
X-VCS-Committer: williamh
X-VCS-Committer-Name: William Hubbs
X-VCS-Revision: f5acc66db7d1a0bfad6a40eefc0240b80f52df94
X-VCS-Branch: master
Date: Tue, 24 Oct 2017 15:43:07 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
X-Archives-Salt: 6b284dd7-b750-4c00-a06c-0e9015871e4c
X-Archives-Hash: 5c281b6f5d96ee39eb7909ea8bcef3b9

commit:     f5acc66db7d1a0bfad6a40eefc0240b80f52df94
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Tue Oct 24 15:37:01 2017 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Tue Oct 24 15:37:37 2017 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=f5acc66d

rc_find_pids: ignore pids that are not in our pid namespace

X-Gentoo-Bug: 634634
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=634634

 src/librc/librc-daemon.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/librc/librc-daemon.c b/src/librc/librc-daemon.c
index 56aaa91b..916cc142 100644
--- a/src/librc/librc-daemon.c
+++ b/src/librc/librc-daemon.c
@@ -80,9 +80,12 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
 	DIR *procdir;
 	struct dirent *entry;
 	FILE *fp;
+	int rc;
 	bool container_pid = false;
 	bool openvz_host = false;
 	char *line = NULL;
+	char my_ns[30];
+	char proc_ns[30];
 	size_t len = 0;
 	pid_t p;
 	char buffer[PATH_MAX];
@@ -131,6 +134,14 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
 		}
 	}
 
+	memset(my_ns, 0, sizeof(my_ns));
+	memset(proc_ns, 0, sizeof(proc_ns));
+	if (exists("/proc/self/ns/pid")) {
+		rc = readlink("/proc/self/ns/pid", my_ns, sizeof(my_ns));
+		if (rc <= 0)
+			my_ns[0] = '\0';
+	}
+
 	while ((entry = readdir(procdir)) != NULL) {
 		if (sscanf(entry->d_name, "%d", &p) != 1)
 			continue;
@@ -138,6 +149,14 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
 			continue;
 		if (pid != 0 && pid != p)
 			continue;
+		snprintf(buffer, sizeof(buffer), "/proc/%d/ns/pid", p);
+		if (exists(buffer)) {
+			rc = readlink(buffer, proc_ns, sizeof(proc_ns));
+			if (rc <= 0)
+				proc_ns[0] = '\0';
+		}
+		if (strcmp(my_ns, proc_ns))
+			continue;
 		if (uid) {
 			snprintf(buffer, sizeof(buffer), "/proc/%d", p);
 			if (stat(buffer, &sb) != 0 || sb.st_uid != uid)