Pavel Emelyanov e9720acd72 [NET]: Make /proc/net a symlink on /proc/self/net (v3)
Current /proc/net is done with so called "shadows", but current
implementation is broken and has little chances to get fixed.

The problem is that dentries subtree of /proc/net directory has
fancy revalidation rules to make processes living in different
net namespaces see different entries in /proc/net subtree, but
currently, tasks see in the /proc/net subdir the contents of any
other namespace, depending on who opened the file first.

The proposed fix is to turn /proc/net into a symlink, which points
to /proc/self/net, which in turn shows what previously was in
/proc/net - the network-related info, from the net namespace the
appropriate task lives in.

# ls -l /proc/net
lrwxrwxrwx  1 root root 8 Mar  5 15:17 /proc/net -> self/net

In other words - this behaves like /proc/mounts, but unlike
"mounts", "net" is not a file, but a directory.

Changes from v2:
* Fixed discrepancy of /proc/net nlink count and selinux labeling
  screwup pointed out by Stephen.

  To get the correct nlink count the ->getattr callback for /proc/net
  is overridden to read one from the net->proc_net entry.

  To make selinux still work the net->proc_net entry is initialized
  properly, i.e. with the "net" name and the proc_net parent.

Selinux fixes are
Acked-by:  Stephen Smalley <sds@tycho.nsa.gov>

Changes from v1:
* Fixed a task_struct leak in get_proc_task_net, pointed out by Paul.

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-03-07 11:08:40 -08:00
..
2008-02-08 09:22:39 -08:00
2008-02-08 09:22:39 -08:00
2008-02-08 09:22:40 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:40 -08:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:40 -08:00
2008-02-21 15:19:54 -06:00
2008-02-14 21:13:33 -08:00
2007-10-22 08:13:21 -07:00
2008-02-08 09:22:40 -08:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:40 -08:00
2008-02-23 17:12:13 -08:00
2008-02-14 21:13:33 -08:00
2008-02-08 09:22:40 -08:00
2008-02-08 09:22:40 -08:00
2008-02-08 09:22:40 -08:00
2007-10-18 14:37:31 -07:00
2008-02-14 21:13:33 -08:00
2008-02-13 16:21:20 -08:00
2008-02-19 10:04:00 +01:00
2008-01-30 13:31:46 +01:00
2008-02-14 21:13:33 -08:00
2008-02-05 09:44:07 -08:00
2008-02-14 21:13:33 -08:00
2007-05-21 09:18:19 -07:00
2007-05-08 11:15:01 -07:00
2008-02-14 21:13:33 -08:00
2008-02-06 10:41:07 -08:00
2007-05-08 11:15:09 -07:00
2008-02-05 14:37:15 -08:00
2008-01-30 13:31:46 +01:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00
2008-02-13 16:21:19 -08:00
2008-02-06 10:41:02 -08:00
2008-02-14 21:13:33 -08:00
2008-02-05 09:44:07 -08:00
2008-02-14 21:13:33 -08:00
2008-02-14 21:13:33 -08:00