* [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel
@ 2006-08-15 15:56 Cory Olmo
2006-08-15 19:21 ` James Morris
0 siblings, 1 reply; 4+ messages in thread
From: Cory Olmo @ 2006-08-15 15:56 UTC (permalink / raw)
To: selinux
[-- Attachment #1: Type: text/plain, Size: 600 bytes --]
This patch modifies selinux_sb_copy_data() so that it will only take an
option after seeing a ',' if it hasn't seen a quote or if the quotes are
matched. When it does take the option, if the option is an selinux option
then it calls a new function take_selinux_option(). This new function will
strip the quotes and replace the previously used comma separator with a '|'.
try_context_mount() was modified to look for the '|' as the separator
instead of ','.
linux-2.6.17/security/selinux/hooks.c | 36 +++++++++++++++++++++++++++++++++---
1 file changed, 33 insertions(+), 3 deletions(-)
[-- Attachment #2: linux-2.6-quoted_context.patch --]
[-- Type: text/x-patch, Size: 1767 bytes --]
diff --git a/linux-2.6.17.i686/security/selinux/hooks.c b/linux-2.6.17.i686/security/selinux/hooks.c
index 93bc2df..378d90c 100644
--- a/linux-2.6.17.i686/security/selinux/hooks.c
+++ b/linux-2.6.17.i686/security/selinux/hooks.c
@@ -398,7 +398,7 @@ static int try_context_mount(struct supe
/* Standard string-based options. */
char *p, *options = data;
- while ((p = strsep(&options, ",")) != NULL) {
+ while ((p = strsep(&options, "|")) != NULL) {
int token;
substring_t args[MAX_OPT_ARGS];
@@ -1949,11 +1949,34 @@ static inline void take_option(char **to
*to += len;
}
+static inline void take_selinux_option(char **to, char *from, int *first,
+ int len)
+{
+ int current_size = 0;
+
+ if (!*first) {
+ **to = '|';
+ *to += 1;
+ }
+ else
+ *first = 0;
+
+ while (current_size < len) {
+ if (*from != '"') {
+ **to = *from;
+ *to += 1;
+ }
+ from += 1;
+ current_size += 1;
+ }
+}
+
static int selinux_sb_copy_data(struct file_system_type *type, void *orig, void *copy)
{
int fnosec, fsec, rc = 0;
char *in_save, *in_curr, *in_end;
char *sec_curr, *nosec_save, *nosec;
+ int open_quote = 0;
in_curr = orig;
sec_curr = copy;
@@ -1975,11 +1998,18 @@ static int selinux_sb_copy_data(struct f
in_save = in_end = orig;
do {
- if (*in_end == ',' || *in_end == '\0') {
+ if (*in_end == '"') {
+ if (open_quote == 0)
+ open_quote -= 1;
+ else
+ open_quote += 1;
+ }
+ if (((*in_end == ',') && (open_quote == 0)) ||
+ *in_end == '\0') {
int len = in_end - in_curr;
if (selinux_option(in_curr, len))
- take_option(&sec_curr, in_curr, &fsec, len);
+ take_selinux_option(&sec_curr, in_curr, &fsec, len);
else
take_option(&nosec, in_curr, &fnosec, len);
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel
2006-08-15 15:56 [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel Cory Olmo
@ 2006-08-15 19:21 ` James Morris
2006-08-15 20:49 ` Cory Olmo
0 siblings, 1 reply; 4+ messages in thread
From: James Morris @ 2006-08-15 19:21 UTC (permalink / raw)
To: Cory Olmo; +Cc: selinux
On Tue, 15 Aug 2006, Cory Olmo wrote:
> This patch modifies selinux_sb_copy_data() so that it will only take an
> option after seeing a ',' if it hasn't seen a quote or if the quotes are
> matched.
Why?
--
James Morris
<jmorris@namei.org>
--
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel
2006-08-15 19:21 ` James Morris
@ 2006-08-15 20:49 ` Cory Olmo
2006-08-16 13:58 ` James Morris
0 siblings, 1 reply; 4+ messages in thread
From: Cory Olmo @ 2006-08-15 20:49 UTC (permalink / raw)
To: James Morris; +Cc: selinux
On Tue, 15 Aug 2006 15:21:48 -0400
James Morris <jmorris@namei.org> wrote:
> On Tue, 15 Aug 2006, Cory Olmo wrote:
>
> > This patch modifies selinux_sb_copy_data() so that it will only take
> an
> > option after seeing a ',' if it hasn't seen a quote or if the quotes
> are
> > matched.
>
>
> Why?
Sorry the wording was poor on this one. The goal is to allow the context
portion of the option data to contain commas. To do that I went with
quoting the context. In order for the quoted context to be taken as a
single option, selinux_sb_copy_data() needed to know when it had seen an
opening quote and be able to hold off on taking the option until it had
seen the closing quote.
This patch modifies selinux_sb_copy_data() to mark a flag value when it runs
across a '"'. This flag value is consulted each time a comma is
encountered. If the flag indicates that the current option has an embedded
quote it will move on to the next character. If the flag indicates that
there is either a matched set of quotes or no quotes at all then the option
can be taken. If the option happens to be an selinux option then the new
routine take_selinux_option() is called. take_selinux_option() will copy the
option to the previously allocated selinux data page. While it is doing the
copying it will skip any quotes present in the option so the data page contains
only the raw unquoted context. The previously used comma separator between
options in the selinux data page is also replaced with a '|' character which
allows try_context_mount() to properly extract whole context option strings
as well.
>
>
> --
> James Morris
> <jmorris@namei.org>
--
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel
2006-08-15 20:49 ` Cory Olmo
@ 2006-08-16 13:58 ` James Morris
0 siblings, 0 replies; 4+ messages in thread
From: James Morris @ 2006-08-16 13:58 UTC (permalink / raw)
To: Cory Olmo; +Cc: selinux
On Tue, 15 Aug 2006, Cory Olmo wrote:
> > Why?
>
> Sorry the wording was poor on this one. The goal is to allow the context
> portion of the option data to contain commas. To do that I went with
> quoting the context. In order for the quoted context to be taken as a
> single option, selinux_sb_copy_data() needed to know when it had seen an
> opening quote and be able to hold off on taking the option until it had
> seen the closing quote.
Thanks for the explanation.
Patches which are destined for upstream need, clear, concise descriptions
which can be understood by general kernel developers. I suggest also
adding examples of the contexts to your description.
- James
--
James Morris
<jmorris@namei.org>
--
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.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-08-16 13:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-15 15:56 [RFC Patch 1/3] Context Mounts and Unsupported Contexts: kernel Cory Olmo
2006-08-15 19:21 ` James Morris
2006-08-15 20:49 ` Cory Olmo
2006-08-16 13:58 ` James Morris
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.