All of lore.kernel.org
 help / color / mirror / Atom feed
From: Casey Schaufler <casey@schaufler-ca.com>
To: Stephen Smalley <sds@tycho.nsa.gov>, David Howells <dhowells@redhat.com>
Cc: casey@schaufler-ca.com, torvalds@osdl.org, akpm@osdl.org,
	steved@redhat.com, trond.myklebust@fys.uio.no,
	linux-fsdevel@vger.kernel.org, linux-cachefs@redhat.com,
	nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org,
	selinux@tycho.nsa.gov,
	LSM List <linux-security-module@vger.kernel.org>
Subject: Re: [PATCH 00/16] Permit filesystem local caching [try #3]
Date: Mon, 13 Aug 2007 08:42:23 -0700 (PDT)	[thread overview]
Message-ID: <98087.46480.qm@web36604.mail.mud.yahoo.com> (raw)
In-Reply-To: <1187017052.26008.51.camel@moss-spartans.epoch.ncsc.mil>


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

> On Mon, 2007-08-13 at 15:51 +0100, David Howells wrote:

> ... 

> > Actually, to address Stephen Smalley's requirements also, how about making
> > things a bit more complex.  Have the following suite of functions:
> > 
> >  (1) int security_get_context(struct sec **_context);
> > 
> > 	This allocates and gives the caller a blob that describes the current
> > 	context of all the LSM module states attached to the current task and
> > 	stores a pointer to it in *_context.
> > 
> >  (2) int security_push(struct sec *context, struct sec **_old_context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, passing back the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (3) int security_pop(struct sec *context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, deleting the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (4) int security_delete_context(struct sec *context)
> > 
> > 	This deletes a context blob.
> > 
> > The context blob could then be structured very simply.  Give each loaded
> LSM
> > module an integer index as it is registered.  Having a limit to the number
> of
> > LSM modules would make things simpler.  The blob would then be an array of
> > void pointers, one per LSM module, indexed by the integer index for each
> one.
> > It you don't have a limit on the number of LSM modules, you'd also need a
> > count of slots in the blob.
> > 
> > Any LSM module that wanted to implement the above three functions would
> fill
> > in or otherwise use the slot that belongs to it.  Otherwise the slot would
> > just be left NULL.
> > 
> > For example:
> > 
> > 	context --->+--------+                                    +---------+
> > 	            | SLOT 0 |----------------------------------->| SELINUX |
> > 	            +--------+                      +--------+    +---------+
> > 	            | SLOT 1 |--------------------->| THINGY |
> > 	            +--------+                      +--------+
> > 	            | ...    |
> > 	            +--------+         +-------+
> > 	            | SLOT N |-------->| AUDIT |
> > 	            +--------+         +-------+
> > 
> > For Stephen and NFS, he could then generate a context from NFS which nfsd
> > could then put in place.  Perhaps any unfilled slot would be ignored by the
> > LSM module to which it belonged.
> 
> Seems like over-design - we don't need to support LSM stacking, and we
> don't need to support pushing/popping more than one level of context.

LSM stacking has always been contentious and I don't see
that it addresses the issue, which is changing the data used
by an LSM, not the LSM itself.

> What was the objection again to the original interface, aside from
> replacing "u32 secids" with "void* security blobs"?

The objection centers around exposing LSM specific data outside
the LSM, and it applies to either secids or blobs, really. If you
need this information outside the LSM odds are good that what you're
using it for is going to be LSM specific, and hence should be inside
the LSM. I admit to two gray areas, audit and system service tasks
such as the two cited here. I like simplicity and find the single
security_act_as() interface attractive for the latter case.


Casey Schaufler
casey@schaufler-ca.com

--
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: Casey Schaufler <casey@schaufler-ca.com>
To: Stephen Smalley <sds@tycho.nsa.gov>, David Howells <dhowells@redhat.com>
Cc: casey@schaufler-ca.com, torvalds@osdl.org, akpm@osdl.org,
	steved@redhat.com, trond.myklebust@fys.uio.no,
	linux-fsdevel@vger.kernel.org, linux-cachefs@redhat.com,
	nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org,
	selinux@tycho.nsa.gov,
	LSM List <linux-security-module@vger.kernel.org>
Subject: Re: [PATCH 00/16] Permit filesystem local caching [try #3]
Date: Mon, 13 Aug 2007 08:42:23 -0700 (PDT)	[thread overview]
Message-ID: <98087.46480.qm@web36604.mail.mud.yahoo.com> (raw)
In-Reply-To: <1187017052.26008.51.camel@moss-spartans.epoch.ncsc.mil>


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

> On Mon, 2007-08-13 at 15:51 +0100, David Howells wrote:

> ... 

> > Actually, to address Stephen Smalley's requirements also, how about making
> > things a bit more complex.  Have the following suite of functions:
> > 
> >  (1) int security_get_context(struct sec **_context);
> > 
> > 	This allocates and gives the caller a blob that describes the current
> > 	context of all the LSM module states attached to the current task and
> > 	stores a pointer to it in *_context.
> > 
> >  (2) int security_push(struct sec *context, struct sec **_old_context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, passing back the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (3) int security_pop(struct sec *context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, deleting the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (4) int security_delete_context(struct sec *context)
> > 
> > 	This deletes a context blob.
> > 
> > The context blob could then be structured very simply.  Give each loaded
> LSM
> > module an integer index as it is registered.  Having a limit to the number
> of
> > LSM modules would make things simpler.  The blob would then be an array of
> > void pointers, one per LSM module, indexed by the integer index for each
> one.
> > It you don't have a limit on the number of LSM modules, you'd also need a
> > count of slots in the blob.
> > 
> > Any LSM module that wanted to implement the above three functions would
> fill
> > in or otherwise use the slot that belongs to it.  Otherwise the slot would
> > just be left NULL.
> > 
> > For example:
> > 
> > 	context --->+--------+                                    +---------+
> > 	            | SLOT 0 |----------------------------------->| SELINUX |
> > 	            +--------+                      +--------+    +---------+
> > 	            | SLOT 1 |--------------------->| THINGY |
> > 	            +--------+                      +--------+
> > 	            | ...    |
> > 	            +--------+         +-------+
> > 	            | SLOT N |-------->| AUDIT |
> > 	            +--------+         +-------+
> > 
> > For Stephen and NFS, he could then generate a context from NFS which nfsd
> > could then put in place.  Perhaps any unfilled slot would be ignored by the
> > LSM module to which it belonged.
> 
> Seems like over-design - we don't need to support LSM stacking, and we
> don't need to support pushing/popping more than one level of context.

LSM stacking has always been contentious and I don't see
that it addresses the issue, which is changing the data used
by an LSM, not the LSM itself.

> What was the objection again to the original interface, aside from
> replacing "u32 secids" with "void* security blobs"?

The objection centers around exposing LSM specific data outside
the LSM, and it applies to either secids or blobs, really. If you
need this information outside the LSM odds are good that what you're
using it for is going to be LSM specific, and hence should be inside
the LSM. I admit to two gray areas, audit and system service tasks
such as the two cited here. I like simplicity and find the single
security_act_as() interface attractive for the latter case.


Casey Schaufler
casey@schaufler-ca.com

WARNING: multiple messages have this Message-ID (diff)
From: Casey Schaufler <casey@schaufler-ca.com>
To: Stephen Smalley <sds@tycho.nsa.gov>, David Howells <dhowells@redhat.com>
Cc: akpm@osdl.org, LSM List <linux-security-module@vger.kernel.org>,
	linux-kernel@vger.kernel.org, nfsv4@linux-nfs.org,
	trond.myklebust@fys.uio.no, linux-fsdevel@vger.kernel.org,
	torvalds@osdl.org, linux-cachefs@redhat.com,
	selinux@tycho.nsa.gov, casey@schaufler-ca.com
Subject: Re: [PATCH 00/16] Permit filesystem local caching [try #3]
Date: Mon, 13 Aug 2007 08:42:23 -0700 (PDT)	[thread overview]
Message-ID: <98087.46480.qm@web36604.mail.mud.yahoo.com> (raw)
In-Reply-To: <1187017052.26008.51.camel@moss-spartans.epoch.ncsc.mil>


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

> On Mon, 2007-08-13 at 15:51 +0100, David Howells wrote:

> ... 

> > Actually, to address Stephen Smalley's requirements also, how about making
> > things a bit more complex.  Have the following suite of functions:
> > 
> >  (1) int security_get_context(struct sec **_context);
> > 
> > 	This allocates and gives the caller a blob that describes the current
> > 	context of all the LSM module states attached to the current task and
> > 	stores a pointer to it in *_context.
> > 
> >  (2) int security_push(struct sec *context, struct sec **_old_context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, passing back the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (3) int security_pop(struct sec *context)
> > 
> > 	This causes all the LSM modules on the current task to switch to a new
> > 	acting state, deleting the old state.  It does not change how
> > 	other tasks do things to this one.
> > 
> >  (4) int security_delete_context(struct sec *context)
> > 
> > 	This deletes a context blob.
> > 
> > The context blob could then be structured very simply.  Give each loaded
> LSM
> > module an integer index as it is registered.  Having a limit to the number
> of
> > LSM modules would make things simpler.  The blob would then be an array of
> > void pointers, one per LSM module, indexed by the integer index for each
> one.
> > It you don't have a limit on the number of LSM modules, you'd also need a
> > count of slots in the blob.
> > 
> > Any LSM module that wanted to implement the above three functions would
> fill
> > in or otherwise use the slot that belongs to it.  Otherwise the slot would
> > just be left NULL.
> > 
> > For example:
> > 
> > 	context --->+--------+                                    +---------+
> > 	            | SLOT 0 |----------------------------------->| SELINUX |
> > 	            +--------+                      +--------+    +---------+
> > 	            | SLOT 1 |--------------------->| THINGY |
> > 	            +--------+                      +--------+
> > 	            | ...    |
> > 	            +--------+         +-------+
> > 	            | SLOT N |-------->| AUDIT |
> > 	            +--------+         +-------+
> > 
> > For Stephen and NFS, he could then generate a context from NFS which nfsd
> > could then put in place.  Perhaps any unfilled slot would be ignored by the
> > LSM module to which it belonged.
> 
> Seems like over-design - we don't need to support LSM stacking, and we
> don't need to support pushing/popping more than one level of context.

LSM stacking has always been contentious and I don't see
that it addresses the issue, which is changing the data used
by an LSM, not the LSM itself.

> What was the objection again to the original interface, aside from
> replacing "u32 secids" with "void* security blobs"?

The objection centers around exposing LSM specific data outside
the LSM, and it applies to either secids or blobs, really. If you
need this information outside the LSM odds are good that what you're
using it for is going to be LSM specific, and hence should be inside
the LSM. I admit to two gray areas, audit and system service tasks
such as the two cited here. I like simplicity and find the single
security_act_as() interface attractive for the latter case.


Casey Schaufler
casey@schaufler-ca.com

  parent reply	other threads:[~2007-08-13 15:42 UTC|newest]

Thread overview: 97+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-10 16:04 [PATCH 00/16] Permit filesystem local caching [try #3] David Howells
2007-08-10 16:04 ` David Howells
2007-08-10 16:05 ` [PATCH 01/16] FS-Cache: Release page->private after failed readahead " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 02/16] FS-Cache: Recruit a couple of page flags for cache management " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 03/16] FS-Cache: Provide an add_wait_queue_tail() function " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 04/16] FS-Cache: Generic filesystem caching facility " David Howells
2007-08-10 16:05 ` [PATCH 05/16] CacheFiles: Add missing copy_page export for ia64 " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 06/16] CacheFiles: Add a hook to write a single page of data to an inode " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 07/16] CacheFiles: Permit the page lock state to be monitored " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 08/16] CacheFiles: Export things for CacheFiles " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 09/16] CacheFiles: Permit a process's create SID to be overridden " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:52   ` Casey Schaufler
2007-08-10 16:52     ` Casey Schaufler
2007-08-10 16:05 ` [PATCH 10/16] CacheFiles: Add an act-as SID override in task_security_struct " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 11/16] CacheFiles: Permit an inode's security ID to be obtained " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:05 ` [PATCH 12/16] CacheFiles: Get the SID under which the CacheFiles module should operate " David Howells
2007-08-10 16:05   ` David Howells
2007-08-10 16:06 ` [PATCH 13/16] CacheFiles: A cache that backs onto a mounted filesystem " David Howells
2007-08-10 16:06 ` [PATCH 14/16] NFS: Use local caching " David Howells
2007-08-10 16:06   ` David Howells
2007-08-10 16:06 ` [PATCH 15/16] NFS: Configuration and mount option changes to enable local caching on NFS " David Howells
2007-08-10 16:06   ` David Howells
2007-08-10 16:06 ` [PATCH 16/16] NFS: Display local caching state " David Howells
2007-08-10 16:06   ` David Howells
2007-08-10 22:13 ` [PATCH 00/16] Permit filesystem local caching " Casey Schaufler
2007-08-10 22:13   ` Casey Schaufler
2007-08-11  8:41   ` David Howells
2007-08-11  8:41     ` David Howells
2007-08-11  8:41     ` David Howells
2007-08-11 15:56     ` Casey Schaufler
2007-08-11 15:56       ` Casey Schaufler
2007-08-13 10:54       ` David Howells
2007-08-13 10:54         ` David Howells
2007-08-13 10:54         ` David Howells
2007-08-13 13:46         ` Casey Schaufler
2007-08-13 13:46           ` Casey Schaufler
2007-08-13 13:46           ` Casey Schaufler
2007-08-13 14:51           ` David Howells
2007-08-13 14:51             ` David Howells
2007-08-13 14:51             ` David Howells
2007-08-13 14:57             ` Stephen Smalley
2007-08-13 14:57               ` Stephen Smalley
2007-08-13 14:57               ` Stephen Smalley
2007-08-13 15:22               ` David Howells
2007-08-13 15:22                 ` David Howells
2007-08-13 15:22                 ` David Howells
2007-08-13 16:20                 ` Casey Schaufler
2007-08-13 16:20                   ` Casey Schaufler
2007-08-13 16:31                   ` David Howells
2007-08-13 16:31                     ` David Howells
2007-08-13 16:31                     ` David Howells
2007-08-13 16:58                     ` Casey Schaufler
2007-08-13 16:58                       ` Casey Schaufler
2007-08-13 16:58                       ` Casey Schaufler
2007-08-13 19:52                       ` David Howells
2007-08-13 19:52                         ` David Howells
2007-08-13 21:44                         ` Casey Schaufler
2007-08-13 21:44                           ` Casey Schaufler
2007-08-14  9:39                           ` David Howells
2007-08-14  9:39                             ` David Howells
2007-08-14  9:39                             ` David Howells
2007-08-14 15:53                             ` Casey Schaufler
2007-08-14 15:53                               ` Casey Schaufler
2007-08-14 17:42                               ` Stephen Smalley
2007-08-14 17:42                                 ` Stephen Smalley
2007-08-14 17:42                                 ` Stephen Smalley
2007-08-15 16:30                                 ` Casey Schaufler
2007-08-15 16:30                                   ` Casey Schaufler
2007-08-15 16:30                                   ` Casey Schaufler
2007-08-14 17:58                               ` David Howells
2007-08-14 17:58                                 ` David Howells
2007-08-14 17:58                                 ` David Howells
2007-08-14 17:50                           ` Stephen Smalley
2007-08-14 17:50                             ` Stephen Smalley
2007-08-14 17:50                             ` Stephen Smalley
2007-08-13 15:42               ` Casey Schaufler [this message]
2007-08-13 15:42                 ` Casey Schaufler
2007-08-13 15:42                 ` Casey Schaufler
2007-08-13 13:50         ` Stephen Smalley
2007-08-13 13:50           ` Stephen Smalley
2007-08-13 13:50           ` Stephen Smalley
2007-08-13 15:10           ` Casey Schaufler
2007-08-13 15:10             ` Casey Schaufler
2007-08-13 15:10             ` Casey Schaufler
2007-08-13 13:01       ` Stephen Smalley
2007-08-13 13:01         ` Stephen Smalley
2007-08-13 13:01         ` Stephen Smalley

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=98087.46480.qm@web36604.mail.mud.yahoo.com \
    --to=casey@schaufler-ca.com \
    --cc=akpm@osdl.org \
    --cc=dhowells@redhat.com \
    --cc=linux-cachefs@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=nfsv4@linux-nfs.org \
    --cc=sds@tycho.nsa.gov \
    --cc=selinux@tycho.nsa.gov \
    --cc=steved@redhat.com \
    --cc=torvalds@osdl.org \
    --cc=trond.myklebust@fys.uio.no \
    /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.