Thread (1 message) 1 message, 1 author, 2008-09-17

Re: [Bug #11500] /proc/net bug related to selinux

From: Eric W. Biederman <hidden>
Date: 2008-09-17 22:05:27
Also in: lkml

Andrew Morton [off-list ref] writes:
On Mon, 15 Sep 2008 09:05:26 -0400
Stephen Smalley [off-list ref] wrote:
quoted
On Sat, 2008-09-13 at 12:37 -0700, Andrew Morton wrote:
However, the most likely explanation is simply that when /proc/net was
changed from being a directory to being a symlink to /proc/self/net,
that introduced an additional permission check on accesses
of /proc/net/<whatever>, namely the read check on the symlink itself.
And since that check wasn't happening on /proc/net accesses with older
kernels, older policies didn't allow it.
quoted
As to why others haven't reported it, I expect that they have updated
their policies to newer ones that allow the necessary access.  The fact
that legacy distros wouldn't have such updated policies isn't surprising
- they don't push updates to those distros for new kernels.  FC5 and FC6
are both EOL'd, right?

In any event, we didn't change anything in SELinux - the change was
elsewhere (in the proc/net implementation).  Don't blame the messenger
please.
Vanilla FC5 broke and vanilla FC6 broke.  Did vanilla FC7, 8 or 9 break?

http://smolt.fedoraproject.org/static/stats/stats.html shows 11,000-odd
people running FC5 and FC6.  It would be incautious to assume that all
those people have updated their selinux rules.

And _requiring_ people to update their selinux rules to fix a
kernel-caused regression is a pretty big deal for some people, I
expect.
Then again, given that this regression has been out there since 2.6.25,
I guess not too many people are hurting from it.  But we suck.
Looking at this discussion closely from what I see selinux is designed
to work on the principle of least privilege.  If you make a user space
visible but compatible change, selinux will keep the system until
you update selinux.  Is selinux exposing too much to user space?
    
selinux was taken into consideration when the change was made.
The patch was even updated with feedback from Stephen Smiley.
commit e9720acd728a46cb40daa52c99a979f7c4ff195c
Author: Pavel Emelyanov [off-list ref]
Date:   Fri Mar 7 11:08:40 2008 -0800

    [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 [off-list ref]
    
    Changes from v1:
    * Fixed a task_struct leak in get_proc_task_net, pointed out by Paul.
    
    Signed-off-by: Pavel Emelyanov [off-list ref]
    Acked-by: "Eric W. Biederman" [off-list ref]
    Signed-off-by: David S. Miller [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help