Re: [PATCH] Make /proc/net a symlink on /proc/self/net (v2)
From: Eric W. Biederman <hidden>
Date: 2008-03-06 16:03:55
Also in:
lkml
Pavel Emelyanov [off-list ref] writes:
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. Fixed a task_struct leak in get_proc_task_net, pointed out by Paul. Signed-off-by: Pavel Emelyanov <redacted>
Before I forget. As a future patch we need to implement a d_revalidate rule for /proc/<pid>/task/net that will notice we have unshared a network namespace and flush all cached dentries for the old network namespace. Since unsharing happens rarely if at all this d_revalidate should be relatively cheap, and since the change is real and for everyone it will not suffer from the inconsistencies that plagued us when working with d_revalidate on /proc/net. Eric