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)