All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: David Howells <dhowells@redhat.com>,
	Karl MacMillan <kmacmill@redhat.com>,
	jmorris@namei.org, chrisw@sous-sol.org, selinux@tycho.nsa.gov,
	linux-kernel@vger.kernel.org, aviro@redhat.com
Subject: Re: Security issues with local filesystem caching
Date: Wed, 01 Nov 2006 15:34:54 +0000	[thread overview]
Message-ID: <4417.1162395294@redhat.com> (raw)
In-Reply-To: <1162387735.32614.184.camel@moss-spartans.epoch.ncsc.mil>

Stephen Smalley <sds@tycho.nsa.gov> wrote:

> >      (c) A security label that defines the context under which the module
> >          operates when accessing the cache.  This allows the module, when
> >          accessing the cache, to only operate within the bounds of the
> >          cache.
> 
> Well, only if the module is well-behaved in the first place, since a
> kernel module can naturally bypass SELinux at will.  What drives this
> approach vs. exempting the module from SELinux checking via a task flag
> that it raises and lowers around the access (vs. setting and resetting
> the sid around the access to the per-cache module context)?

Christoph objected very strongly to my bypassing of vfs_mkdir() and co, and Al
wasn't to happy about it either.  This should allow me, for example, to call
vfs_mkdir() rather than calling the inode op directly as the reason I wasn't
was that I was having to avoid the security checks it made.

Stephen Smalley <sds@tycho.nsa.gov> wrote:

> >  (*) The module will obtain label (c) by reading label (b) from the
> >      cachefilesd process when it opens the cachefiles control chardev and
> >      then passing it through security_change_sid() to ask the security
> >      policy to for label (c).
> 
> Do you mean security_transition_sid()?  security_change_sid() doesn't
> seem suited to that purpose

That's what Karl said to use.

> What would you use as the target SID and class?

I've no idea.  I tried to find out how to use this function from Karl, but he
said I should ask on the list.

> >      (3) current->security->sid will be set to label (c) so that
> >          vfs_mkdir(), vfs_create() and lookup ops will check for the
> >          correct labels.
> 
> I think you would want this to be a new ->fssid field instead, and
> adjust SELinux to use it if set for permission checking (which could
> also be leveraged by NFS later).

I could do that.  Does it actually gain anything?  Or are there good reasons
for not altering current->security->sid?  For instance, does that affect the
label seen on /proc/pid/ files?

> Or just use a task flag to disable checking on the module internal accesses.

I could do that too.

> >      Point (3) shouldn't cause a cross-thread race as it would appear that
> >      the security label can only be changed on single-threaded processes.
> >      Attempts to do so on multi-threaded processes are rejected.
> 
> I don't quite follow this.

Sorry, I meant that a process can only change its own security label if it's a
single-threaded process.  A kernel module can, of course, change the security
label at any time.

> But mutating ->sid could yield unfortunate behavior if e.g. another process
> happens to be sending that task a signal at the same time, so if you go this
> route, you want a ->fssid.

Okay... that seems like a good reason to do use the ->fssid approach.  How do I
tell if ->fssid is set?  Is zero usable as 'unset'?  Alternatively, would it be
reasonable to have ->fssid track ->sid when the latter changes?

David

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.

WARNING: multiple messages have this Message-ID (diff)
From: David Howells <dhowells@redhat.com>
To: Stephen Smalley <sds@tycho.nsa.gov>
Cc: David Howells <dhowells@redhat.com>,
	Karl MacMillan <kmacmill@redhat.com>,
	jmorris@namei.org, chrisw@sous-sol.org, selinux@tycho.nsa.gov,
	linux-kernel@vger.kernel.org, aviro@redhat.com
Subject: Re: Security issues with local filesystem caching
Date: Wed, 01 Nov 2006 15:34:54 +0000	[thread overview]
Message-ID: <4417.1162395294@redhat.com> (raw)
In-Reply-To: <1162387735.32614.184.camel@moss-spartans.epoch.ncsc.mil>

Stephen Smalley <sds@tycho.nsa.gov> wrote:

> >      (c) A security label that defines the context under which the module
> >          operates when accessing the cache.  This allows the module, when
> >          accessing the cache, to only operate within the bounds of the
> >          cache.
> 
> Well, only if the module is well-behaved in the first place, since a
> kernel module can naturally bypass SELinux at will.  What drives this
> approach vs. exempting the module from SELinux checking via a task flag
> that it raises and lowers around the access (vs. setting and resetting
> the sid around the access to the per-cache module context)?

Christoph objected very strongly to my bypassing of vfs_mkdir() and co, and Al
wasn't to happy about it either.  This should allow me, for example, to call
vfs_mkdir() rather than calling the inode op directly as the reason I wasn't
was that I was having to avoid the security checks it made.

Stephen Smalley <sds@tycho.nsa.gov> wrote:

> >  (*) The module will obtain label (c) by reading label (b) from the
> >      cachefilesd process when it opens the cachefiles control chardev and
> >      then passing it through security_change_sid() to ask the security
> >      policy to for label (c).
> 
> Do you mean security_transition_sid()?  security_change_sid() doesn't
> seem suited to that purpose

That's what Karl said to use.

> What would you use as the target SID and class?

I've no idea.  I tried to find out how to use this function from Karl, but he
said I should ask on the list.

> >      (3) current->security->sid will be set to label (c) so that
> >          vfs_mkdir(), vfs_create() and lookup ops will check for the
> >          correct labels.
> 
> I think you would want this to be a new ->fssid field instead, and
> adjust SELinux to use it if set for permission checking (which could
> also be leveraged by NFS later).

I could do that.  Does it actually gain anything?  Or are there good reasons
for not altering current->security->sid?  For instance, does that affect the
label seen on /proc/pid/ files?

> Or just use a task flag to disable checking on the module internal accesses.

I could do that too.

> >      Point (3) shouldn't cause a cross-thread race as it would appear that
> >      the security label can only be changed on single-threaded processes.
> >      Attempts to do so on multi-threaded processes are rejected.
> 
> I don't quite follow this.

Sorry, I meant that a process can only change its own security label if it's a
single-threaded process.  A kernel module can, of course, change the security
label at any time.

> But mutating ->sid could yield unfortunate behavior if e.g. another process
> happens to be sending that task a signal at the same time, so if you go this
> route, you want a ->fssid.

Okay... that seems like a good reason to do use the ->fssid approach.  How do I
tell if ->fssid is set?  Is zero usable as 'unset'?  Alternatively, would it be
reasonable to have ->fssid track ->sid when the latter changes?

David

  reply	other threads:[~2006-11-01 15:34 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-10-25 10:14 Security issues with local filesystem caching David Howells
2006-10-25 10:14 ` David Howells
2006-10-25 16:52 ` Nate Diller
2006-10-25 16:52   ` Nate Diller
2006-10-25 16:48   ` Jeff V. Merkey
2006-10-25 17:21     ` David Howells
2006-10-25 17:21       ` David Howells
2006-10-25 17:42       ` Jeff V. Merkey
2006-10-25 18:15         ` David Howells
2006-10-25 18:15           ` David Howells
2006-10-25 20:21 ` Josef Sipek
2006-10-25 20:28   ` Josef Sipek
2006-10-26  9:56   ` David Howells
2006-10-26  9:56     ` David Howells
2006-10-27 15:54     ` Josef Sipek
2006-10-25 21:12 ` Stephen Smalley
2006-10-25 21:12   ` Stephen Smalley
2006-10-26 10:40   ` David Howells
2006-10-26 10:40     ` David Howells
2006-10-26 12:51     ` Stephen Smalley
2006-10-26 12:51       ` Stephen Smalley
2006-10-26 16:04       ` David Howells
2006-10-26 16:04         ` David Howells
2006-10-26 16:34         ` Stephen Smalley
2006-10-26 16:34           ` Stephen Smalley
2006-10-26 17:09           ` David Howells
2006-10-26 17:09             ` David Howells
2006-10-26 17:45             ` Stephen Smalley
2006-10-26 17:45               ` Stephen Smalley
2006-10-26 22:53               ` David Howells
2006-10-26 22:53                 ` David Howells
2006-10-27 14:48                 ` Stephen Smalley
2006-10-27 14:48                   ` Stephen Smalley
2006-10-27 15:42                   ` David Howells
2006-10-27 15:42                     ` David Howells
2006-10-27 16:10                     ` Stephen Smalley
2006-10-27 16:10                       ` Stephen Smalley
2006-10-27 16:25                       ` David Howells
2006-10-27 16:25                         ` David Howells
2006-10-27 17:09                         ` Stephen Smalley
2006-10-27 17:09                           ` Stephen Smalley
2006-10-27 17:34                           ` David Howells
2006-10-27 17:34                             ` David Howells
2006-10-27 14:41               ` David Howells
2006-10-27 14:41                 ` David Howells
2006-10-27 15:03                 ` Stephen Smalley
2006-10-27 16:12                   ` David Howells
2006-10-27 16:37                     ` Stephen Smalley
2006-10-27 17:28                       ` David Howells
2006-10-27 18:10                         ` Stephen Smalley
2006-10-30 15:13                           ` David Howells
2006-10-31 16:19                           ` David Howells
2006-10-31 16:51                             ` Stephen Smalley
2006-10-31 19:21                               ` David Howells
2006-10-25 23:37 ` Alan Cox
2006-10-26  0:32   ` Al Viro
2006-10-26 10:45     ` David Howells
2006-10-26 10:45       ` David Howells
2006-10-26 10:54     ` Alan Cox
2006-10-26  9:14 ` Jan Dittmer
2006-10-26 10:55   ` David Howells
2006-10-26 10:55     ` David Howells
2006-10-26 11:52   ` Alan Cox
2006-10-31 21:26 ` David Howells
2006-10-31 21:26   ` David Howells
2006-11-01 13:28   ` Stephen Smalley
2006-11-01 13:28     ` Stephen Smalley
2006-11-01 15:34     ` David Howells [this message]
2006-11-01 15:34       ` David Howells
2006-11-01 15:58       ` Karl MacMillan
2006-11-01 15:58         ` Karl MacMillan
2006-11-01 17:45         ` Stephen Smalley
2006-11-01 17:45           ` Stephen Smalley
2006-11-02 16:29           ` Karl MacMillan
2006-11-02 16:29             ` Karl MacMillan
2006-11-02 18:04             ` Stephen Smalley
2006-11-02 18:04               ` Stephen Smalley
2006-11-01 17:30       ` Stephen Smalley
2006-11-01 17:30         ` Stephen Smalley
2006-11-02 17:16         ` David Howells
2006-11-02 17:16           ` David Howells
2006-11-02 19:49           ` Trond Myklebust
2006-11-02 20:38             ` David Howells
2006-11-02 20:38               ` David Howells
2006-11-02 21:24               ` Trond Myklebust
2006-11-03 10:27                 ` David Howells
2006-11-03 10:27                   ` David Howells
2006-11-03 13:41                   ` Trond Myklebust
2006-11-03 15:23                     ` David Howells
2006-11-03 15:23                       ` David Howells
2006-11-03 17:30                       ` Trond Myklebust
2006-11-14 19:22                         ` David Howells
2006-11-14 19:22                           ` David Howells
2006-11-15 14:05                           ` Trond Myklebust
2006-11-15 15:28                             ` David Howells
2006-11-15 15:28                               ` David Howells
2006-11-15 16:41                               ` Trond Myklebust
2006-11-15 18:17                                 ` David Howells
2006-11-15 18:17                                   ` David Howells
2006-11-03 15:33                     ` David Howells
2006-11-03 15:33                       ` David Howells
2006-11-02 20:33           ` Stephen Smalley
2006-11-02 20:33             ` Stephen Smalley
2006-11-02 21:05             ` David Howells
2006-11-02 21:05               ` David Howells

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4417.1162395294@redhat.com \
    --to=dhowells@redhat.com \
    --cc=aviro@redhat.com \
    --cc=chrisw@sous-sol.org \
    --cc=jmorris@namei.org \
    --cc=kmacmill@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.