From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753171AbbFAIRV (ORCPT ); Mon, 1 Jun 2015 04:17:21 -0400 Received: from mailout2.samsung.com ([203.254.224.25]:39858 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751981AbbFAIRE (ORCPT ); Mon, 1 Jun 2015 04:17:04 -0400 X-AuditID: cbfee68f-f793b6d000005f66-31-556c14fd575c Message-id: <556C14F9.8030800@samsung.com> Date: Mon, 01 Jun 2015 17:16:57 +0900 From: Kuenhwan Kwak Reply-to: kh243.kwak@samsung.com User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-version: 1.0 To: Andrew Morton Cc: Serge Hallyn , Chen Hanxiao , cpgs@samsung.com, linux-kernel@vger.kernel.org, "Eric W. Biederman" Subject: Re: [PATCH 1/1] /proc/$PID/status : show list NSpid data based on current process namespace. References: <1432868242-11843-1-git-send-email-kh243.kwak@samsung.com> <20150529152143.5d3dce7fc4986744e4f64ac8@linux-foundation.org> In-reply-to: <20150529152143.5d3dce7fc4986744e4f64ac8@linux-foundation.org> Content-type: text/plain; charset=ISO-8859-1; format=flowed Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrIIsWRmVeSWpSXmKPExsWyRsSkWPefSE6owcwpTBZz1q9hs5iw7wyr xctDmhb/t7WwW1zeNYfN4lzjcxYHNo9ZDb1sHv8PTmL2ODHjN4tH35ZVjB6fN8l5TDnUzhLA FsVlk5Kak1mWWqRvl8CV8ezub9aC/ZIVDc+3MjYwbhLpYuTkkBAwkTjTeYoJwhaTuHBvPVsX IxeHkMBSRolHNyaxwhXtbmeESExnlFg7/R4ThPOAUWLlh1ZmkCpeAS2Jm49bGEFsFgFVicsX v7GB2GwCOhJdq0+wgNhCAgoSsybfB5sqKhAhMXfiZjaIXkGJH5PvgdWICOhKrHq+ixlkAbPA TkaJvTu6wBLCAukSG2Zcg7qvnVFi65U57CAJTgFvie3rJ4BNZRawllg5aRsjhC0vsXnNW7BJ EgK32CU+nljKBHGegMS3yYeApnIAJWQlNh1ghvhTUuLgihssExjFZyE5ahaSsbOQjF3AyLyK UTS1ILmgOCm9yFivODG3uDQvXS85P3cTIzAmT/971r+D8e4B60OMAhyMSjy8Gd3ZoUKsiWXF lbmHGE2BrpjILCWanA+M/LySeENjMyMLUxNTYyNzSzMlcd6FUj+DhQTSE0tSs1NTC1KL4otK c1KLDzEycXBKNTBaZdzv/XTCNXPVnbufo7kXKTXoGR1Ta3tfvMqzPkV/zaLI5Bv905+FfVtT 3CpWfybz53xfTdM1i3P8s31bss+YFd1bJ7Clq8H7zcYd8Qfcnk059zb0Ze8Lc8dFrNc+sDne YV1q/O3jXc34UzXHV+as4pRgl5Ft3bCu8Kfl1z82e3wP7M7Zt8tUiaU4I9FQi7moOBEATFFF 48QCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrNIsWRmVeSWpSXmKPExsVy+t9jQd2/IjmhBs8vWlrMWb+GzWLCvjOs Fi8PaVr839bCbnF51xw2i3ONz1kc2DxmNfSyefw/OInZ48SM3ywefVtWMXp83iTnMeVQO0sA W1QDo01GamJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKLT4CuW2YO0BlK CmWJOaVAoYDE4mIlfTtME0JD3HQtYBojdH1DguB6jAzQQMIaxoxnd3+zFuyXrGh4vpWxgXGT SBcjJ4eEgInEmd3tjBC2mMSFe+vZuhi5OIQEpjNKrJ1+jwnCecAosfJDKzNIFa+AlsTNxy1g HSwCqhKXL35jA7HZBHQkulafYAGxhQQUJGZNvs8KYosKREjMnbiZDaJXUOLH5HtgNSICuhKr nu9iBlnALLCTUWLvji6whLBAusSGGdegzmhnlNh6ZQ47SIJTwFti+/oJYFOZBawlVk7axghh y0tsXvOWeQKj4CwkS2YhKZuFpGwBI/MqRtHUguSC4qT0XEO94sTc4tK8dL3k/NxNjOCIfya1 g3Flg8UhRgEORiUe3szu7FAh1sSy4srcQ4wSHMxKIrzNjDmhQrwpiZVVqUX58UWlOanFhxhN geExkVlKNDkfmIzySuINjU3MjCyNzA0tjIzNlcR5T+b7hAoJpCeWpGanphakFsH0MXFwSjUw umtqzlhv+yuNc4EYz6ojtSxe/nfyA6bU+QQ0ipwXzN/MYHGQvef/7uq4hukJyjJ3FOP2bols rduWK6SyyeCftxKrwP65Istfn++22OfeyqyWVZKwZ1Gdou8q5dOff2WtmvDiiviUFbaSeYuX pvdU5vgWZOhqL1e3bQ30zUtqYZ+a/4wpQFeJpTgj0VCLuag4EQD8SAz5DgMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/30/2015 07:21 AM, Andrew Morton wrote: > On Fri, 29 May 2015 11:57:21 +0900 Kuenhwan Kwak wrote: > >> This patch helps creating a pid mapping data to parent processes. >> >> Reading 'NSpid' field in '/proc/$PID/status' is currently a simple >> way to getting child pid from parent pid in userspace. But this field >> supplies only single direction mapping('parent pid' to 'child pid'). >> If parent process want to translate child pid to current namespace pid, >> there is no way to get except full searching in current procfs. >> >> This patch will helps in getting current namespace pid by reading child >> procfs file without any side effects. >> >> For example, Process id is 24771 in level 0, 435 in level 1. >> a) The output of '/proc/24771/status' in level 0 namespace. >> NSpid : 24771 435 >> >> b) The output of '/proc/435/status' in level 1 namespace. >> NSpid : 435 >> >> c) Process in level 0 mount level1 proc to '/var/child/proc' >> after setns(). The output of '/var/child/proc/435/status' is >> NSpid : 24771 435 >> >> ... >> >> --- a/fs/proc/array.c >> +++ b/fs/proc/array.c >> @@ -83,6 +83,7 @@ >> #include >> #include >> #include >> +#include >> >> #include >> #include >> @@ -149,6 +150,9 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, >> const struct cred *cred; >> pid_t ppid, tpid = 0, tgid, ngid; >> unsigned int max_fds = 0; >> +#ifdef CONFIG_PID_NS >> + struct pid_namespace *current_pid_ns = task_active_pid_ns(current); >> +#endif >> >> rcu_read_lock(); >> ppid = pid_alive(p) ? >> @@ -198,19 +202,19 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, >> >> #ifdef CONFIG_PID_NS >> seq_puts(m, "\nNStgid:"); >> - for (g = ns->level; g <= pid->level; g++) >> + for (g = current_pid_ns->level; g <= pid->level; g++) >> seq_printf(m, "\t%d", >> task_tgid_nr_ns(p, pid->numbers[g].ns)); >> seq_puts(m, "\nNSpid:"); >> - for (g = ns->level; g <= pid->level; g++) >> + for (g = current_pid_ns->level; g <= pid->level; g++) >> seq_printf(m, "\t%d", >> task_pid_nr_ns(p, pid->numbers[g].ns)); >> seq_puts(m, "\nNSpgid:"); >> - for (g = ns->level; g <= pid->level; g++) >> + for (g = current_pid_ns->level; g <= pid->level; g++) >> seq_printf(m, "\t%d", >> task_pgrp_nr_ns(p, pid->numbers[g].ns)); >> seq_puts(m, "\nNSsid:"); >> - for (g = ns->level; g <= pid->level; g++) >> + for (g = current_pid_ns->level; g <= pid->level; g++) >> seq_printf(m, "\t%d", >> task_session_nr_ns(p, pid->numbers[g].ns)); > These changes alter current behaviour, don't they? How do we know this > won't impact existing userspace code? According to proc_mount() function, 'ns' value is came from current process also. and procfs is accessed by same pid namespace processes usually. So there is no impact of using current value. This change is only effective if parent ns process access to child procfs. In that case, print out more NSpid info for parent ns process. Kuenhwan Kwak.