All of lore.kernel.org
 help / color / mirror / Atom feed
* File context not applied due to regex ordering
@ 2013-03-21 11:32 Laurent Bigonville
  2013-04-01 15:58 ` Christopher J. PeBenito
  0 siblings, 1 reply; 7+ messages in thread
From: Laurent Bigonville @ 2013-03-21 11:32 UTC (permalink / raw)
  To: selinux

Hello,

I remember that I already talk about this on IRC a while back, but I
don't remember if there was any outcome.

The refpolicy is containing the following filecontext:

/usr/(s)?bin/gdm(3)?    --      gen_context(system_u:object_r:xdm_exec_t,s0)

But for some reasons /usr/sbin/gdm3 is labeled on disk as bin_t instead
of xdm_exec_t. matchpathcon is giving me this:

/usr/bin/gdm	system_u:object_r:xdm_exec_t:SystemLow
/usr/bin/gdm3	system_u:object_r:xdm_exec_t:SystemLow
/usr/sbin/gdm	system_u:object_r:bin_t:SystemLow
/usr/sbin/gdm3	system_u:object_r:bin_t:SystemLow

Changing the regex to /usr/s?bin/gdm(3)? fix the issue.

Shouldn't this be fixed in the userspace libraries?

Cheers

Laurent Bigonville

--
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] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-03-21 11:32 File context not applied due to regex ordering Laurent Bigonville
@ 2013-04-01 15:58 ` Christopher J. PeBenito
  2013-04-01 16:55   ` Laurent Bigonville
  0 siblings, 1 reply; 7+ messages in thread
From: Christopher J. PeBenito @ 2013-04-01 15:58 UTC (permalink / raw)
  To: Laurent Bigonville; +Cc: selinux

On 03/21/13 07:32, Laurent Bigonville wrote:
> Hello,
> 
> I remember that I already talk about this on IRC a while back, but I
> don't remember if there was any outcome.
> 
> The refpolicy is containing the following filecontext:
> 
> /usr/(s)?bin/gdm(3)?    --      gen_context(system_u:object_r:xdm_exec_t,s0)
> 
> But for some reasons /usr/sbin/gdm3 is labeled on disk as bin_t instead
> of xdm_exec_t. matchpathcon is giving me this:
> 
> /usr/bin/gdm	system_u:object_r:xdm_exec_t:SystemLow
> /usr/bin/gdm3	system_u:object_r:xdm_exec_t:SystemLow
> /usr/sbin/gdm	system_u:object_r:bin_t:SystemLow
> /usr/sbin/gdm3	system_u:object_r:bin_t:SystemLow
> 
> Changing the regex to /usr/s?bin/gdm(3)? fix the issue.
> 
> Shouldn't this be fixed in the userspace libraries?

I'm not clear; are you saying this is a file context sorting issue or a matchpathcon error?  Matchpathcon should be able to handle a regex with ()? so I'd guess its a sorting issue.  Since sorting file contexts is tricky, it would probably be simpler to fix the policy.

-- 
Chris PeBenito
Tresys Technology, LLC
www.tresys.com | oss.tresys.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.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-04-01 15:58 ` Christopher J. PeBenito
@ 2013-04-01 16:55   ` Laurent Bigonville
  2013-04-01 17:40     ` Eric Paris
  0 siblings, 1 reply; 7+ messages in thread
From: Laurent Bigonville @ 2013-04-01 16:55 UTC (permalink / raw)
  To: Christopher J. PeBenito; +Cc: selinux

Le Mon, 1 Apr 2013 11:58:32 -0400,
"Christopher J. PeBenito" <cpebenito@tresys.com> a écrit :

> On 03/21/13 07:32, Laurent Bigonville wrote:
> > Hello,
> > 
> > I remember that I already talk about this on IRC a while back, but I
> > don't remember if there was any outcome.
> > 
> > The refpolicy is containing the following filecontext:
> > 
> > /usr/(s)?bin/gdm(3)?    --
> > gen_context(system_u:object_r:xdm_exec_t,s0)
> > 
> > But for some reasons /usr/sbin/gdm3 is labeled on disk as bin_t
> > instead of xdm_exec_t. matchpathcon is giving me this:
> > 
> > /usr/bin/gdm	system_u:object_r:xdm_exec_t:SystemLow
> > /usr/bin/gdm3	system_u:object_r:xdm_exec_t:SystemLow
> > /usr/sbin/gdm	system_u:object_r:bin_t:SystemLow
> > /usr/sbin/gdm3	system_u:object_r:bin_t:SystemLow
> > 
> > Changing the regex to /usr/s?bin/gdm(3)? fix the issue.
> > 
> > Shouldn't this be fixed in the userspace libraries?
> 
> I'm not clear; are you saying this is a file context sorting issue or
> a matchpathcon error?  Matchpathcon should be able to handle a regex
> with ()? so I'd guess its a sorting issue.  Since sorting file
> contexts is tricky, it would probably be simpler to fix the policy.
> 

I don't think this is a matchpathcon error only as the fc applied on
disk by restorecon are matching the one returned by matchpathcon.

I remember during the discussion on IRC that somebody said that it might
be related to the order the regex were ordered but nothing more.

I'll propose a patch to fix this particular case, but can we be sure
this is not happening in other places too?

Cheers

Laurent Bigonville


--
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] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-04-01 16:55   ` Laurent Bigonville
@ 2013-04-01 17:40     ` Eric Paris
  2013-04-02  9:41       ` Laurent Bigonville
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Paris @ 2013-04-01 17:40 UTC (permalink / raw)
  To: Laurent Bigonville; +Cc: Christopher J. PeBenito, SE-Linux

I feel like we talked about it...  Regex ordering is a bit tricky.  I
think I hacked up a patch which added an additional tie breaker step
with the total number of 'non-regex' type characters being used.  It's
been long lost though...

Do you still have that hack around?  Maybe we can see what others think?

On Mon, Apr 1, 2013 at 12:55 PM, Laurent Bigonville <bigon@debian.org> wrote:
> Le Mon, 1 Apr 2013 11:58:32 -0400,
> "Christopher J. PeBenito" <cpebenito@tresys.com> a écrit :
>
>> On 03/21/13 07:32, Laurent Bigonville wrote:
>> > Hello,
>> >
>> > I remember that I already talk about this on IRC a while back, but I
>> > don't remember if there was any outcome.
>> >
>> > The refpolicy is containing the following filecontext:
>> >
>> > /usr/(s)?bin/gdm(3)?    --
>> > gen_context(system_u:object_r:xdm_exec_t,s0)
>> >
>> > But for some reasons /usr/sbin/gdm3 is labeled on disk as bin_t
>> > instead of xdm_exec_t. matchpathcon is giving me this:
>> >
>> > /usr/bin/gdm        system_u:object_r:xdm_exec_t:SystemLow
>> > /usr/bin/gdm3       system_u:object_r:xdm_exec_t:SystemLow
>> > /usr/sbin/gdm       system_u:object_r:bin_t:SystemLow
>> > /usr/sbin/gdm3      system_u:object_r:bin_t:SystemLow
>> >
>> > Changing the regex to /usr/s?bin/gdm(3)? fix the issue.
>> >
>> > Shouldn't this be fixed in the userspace libraries?
>>
>> I'm not clear; are you saying this is a file context sorting issue or
>> a matchpathcon error?  Matchpathcon should be able to handle a regex
>> with ()? so I'd guess its a sorting issue.  Since sorting file
>> contexts is tricky, it would probably be simpler to fix the policy.
>>
>
> I don't think this is a matchpathcon error only as the fc applied on
> disk by restorecon are matching the one returned by matchpathcon.
>
> I remember during the discussion on IRC that somebody said that it might
> be related to the order the regex were ordered but nothing more.
>
> I'll propose a patch to fix this particular case, but can we be sure
> this is not happening in other places too?
>
> Cheers
>
> Laurent Bigonville
>
>
> --
> 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.


--
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] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-04-01 17:40     ` Eric Paris
@ 2013-04-02  9:41       ` Laurent Bigonville
  2013-09-28  9:29         ` Laurent Bigonville
  0 siblings, 1 reply; 7+ messages in thread
From: Laurent Bigonville @ 2013-04-02  9:41 UTC (permalink / raw)
  To: Eric Paris; +Cc: Christopher J. PeBenito, SE-Linux

[-- Attachment #1: Type: text/plain, Size: 611 bytes --]

Le Mon, 1 Apr 2013 13:40:46 -0400,
Eric Paris <eparis@parisplace.org> a écrit :

> I feel like we talked about it...  Regex ordering is a bit tricky.  I
> think I hacked up a patch which added an additional tie breaker step
> with the total number of 'non-regex' type characters being used.  It's
> been long lost though...
> 
> Do you still have that hack around?  Maybe we can see what others
> think?

I definitely have a bad memory...

I grepped my IRC logs and found this patch[0] from you at the date of
the 28th of Sept 2012.

Cheers

Laurent Bigonville

[0] http://fpaste.org/p48W/

[-- Attachment #2: selinux_regex_stem.patch --]
[-- Type: text/x-patch, Size: 3123 bytes --]

diff --git a/libsemanage/src/semanage_store.c b/libsemanage/src/semanage_store.c
index cd7ce68..5ee3b9f 100644
--- a/libsemanage/src/semanage_store.c
+++ b/libsemanage/src/semanage_store.c
@@ -128,6 +128,7 @@ typedef struct semanage_file_context_node {
 	char *context;
 	int path_len;
 	int effective_len;
+	int nonmeta_len;
 	int type_len;
 	int context_len;
 	int meta;		/* position of first meta char in path, -1 if none */
@@ -2000,6 +2001,12 @@ static int semanage_fc_compare(semanage_file_context_node_t * a,
 	if (b->meta < a->meta)
 		return 1;
 
+	/* total number of non meta chars? */
+	if (a->nonmeta_len < b->nonmeta_len)
+		return -1;
+	if (b->nonmeta_len < a->nonmeta_len)
+		return 1;
+
 	/* Check to see if either a or b have a shorter string
 	 *  length than the other. */
 	if (a->effective_len < b->effective_len)
@@ -2110,6 +2117,24 @@ static void semanage_fc_merge_sort(semanage_file_context_bucket_t * master)
 	}
 }
 
+static int is_meta_char(char c)
+{
+	switch (c) {
+	case '.':
+	case '^':
+	case '$':
+	case '?':
+	case '*':
+	case '+':
+	case '|':
+	case '[':
+	case '(':
+	case '{':
+		return 1;
+	}
+	return 0;
+}
+
 /* Compute the location of the first regular expression 
  *   meta character in the path of the given node, if it exists. 
  * On return:
@@ -2127,25 +2152,15 @@ static void semanage_fc_find_meta(semanage_file_context_node_t * fc_node)
 	 *  spec_hasMetaChars in matchpathcon.c from
 	 *  libselinux-1.22. */
 	while (fc_node->path[c] != '\0') {
-		switch (fc_node->path[c]) {
-		case '.':
-		case '^':
-		case '$':
-		case '?':
-		case '*':
-		case '+':
-		case '|':
-		case '[':
-		case '(':
-		case '{':
+		if (is_meta_char(fc_node->path[c])) {
 			fc_node->meta = c - escape_chars;
 			return;
-		case '\\':
+		}
+		if (fc_node->path[c] == '\\') {
 			/* If an escape character is found,
 			 *  skip the next character. */
 			c++;
 			escape_chars++;
-			break;
 		}
 
 		c++;
@@ -2208,7 +2223,7 @@ int semanage_fc_sort(semanage_handle_t * sh, const char *buf, size_t buf_len,
 	ssize_t sanity_check;
 	const char *line_buf, *line_end;
 	char *sorted_buf_pos;
-	int escape_chars, just_saw_escape;
+	int escape_chars, just_saw_escape, meta_chars;
 
 	semanage_file_context_node_t *temp;
 	semanage_file_context_node_t *head;
@@ -2291,10 +2306,13 @@ int semanage_fc_sort(semanage_handle_t * sh, const char *buf, size_t buf_len,
 		temp->next = NULL;
 
 		/* Extract the regular expression from the line. */
+		meta_chars = 0;
 		escape_chars = 0;
 		just_saw_escape = 0;
 		start = i;
 		while (i < line_len && (!isspace(line_buf[i]))) {
+			if (is_meta_char(line_buf[i]))
+				meta_chars++;
 			if (line_buf[i] == '\\') {
 				if (!just_saw_escape) {
 					escape_chars++;
@@ -2399,6 +2417,7 @@ int semanage_fc_sort(semanage_handle_t * sh, const char *buf, size_t buf_len,
 		/* Initialize the data about the file context. */
 		temp->path_len = regex_len;
 		temp->effective_len = regex_len - escape_chars;
+		temp->nonmeta_len = regex_len - escape_chars - meta_chars;
 		temp->type_len = type_len;
 		temp->context_len = context_len;
 		semanage_fc_find_meta(temp);

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-04-02  9:41       ` Laurent Bigonville
@ 2013-09-28  9:29         ` Laurent Bigonville
  2013-09-28 13:30           ` Dominick Grift
  0 siblings, 1 reply; 7+ messages in thread
From: Laurent Bigonville @ 2013-09-28  9:29 UTC (permalink / raw)
  To: SE-Linux

Hi,

Did anybody had the time to look at this? Dominick and I have observed
this with other file contexts as well.

Cheers

Laurent Bigonville

Le Tue, 2 Apr 2013 11:41:05 +0200,
Laurent Bigonville <bigon@debian.org> a écrit :

> Le Mon, 1 Apr 2013 13:40:46 -0400,
> Eric Paris <eparis@parisplace.org> a écrit :
> 
> > I feel like we talked about it...  Regex ordering is a bit tricky.
> > I think I hacked up a patch which added an additional tie breaker
> > step with the total number of 'non-regex' type characters being
> > used.  It's been long lost though...
> > 
> > Do you still have that hack around?  Maybe we can see what others
> > think?
> 
> I definitely have a bad memory...
> 
> I grepped my IRC logs and found this patch[0] from you at the date of
> the 28th of Sept 2012.
> 
> Cheers
> 
> Laurent Bigonville
> 
> [0] http://fpaste.org/p48W/



--
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] 7+ messages in thread

* Re: File context not applied due to regex ordering
  2013-09-28  9:29         ` Laurent Bigonville
@ 2013-09-28 13:30           ` Dominick Grift
  0 siblings, 0 replies; 7+ messages in thread
From: Dominick Grift @ 2013-09-28 13:30 UTC (permalink / raw)
  To: Laurent Bigonville; +Cc: SE-Linux

On Sat, 2013-09-28 at 11:29 +0200, Laurent Bigonville wrote:
> Hi,
> 
> Did anybody had the time to look at this? Dominick and I have observed
> this with other file contexts as well.

Yes there is inconsistent behavior when it comes to regular expressions
in file context files. Its very confusing.


> Cheers
> 
> Laurent Bigonville
> 
> Le Tue, 2 Apr 2013 11:41:05 +0200,
> Laurent Bigonville <bigon@debian.org> a écrit :
> 
> > Le Mon, 1 Apr 2013 13:40:46 -0400,
> > Eric Paris <eparis@parisplace.org> a écrit :
> > 
> > > I feel like we talked about it...  Regex ordering is a bit tricky.
> > > I think I hacked up a patch which added an additional tie breaker
> > > step with the total number of 'non-regex' type characters being
> > > used.  It's been long lost though...
> > > 
> > > Do you still have that hack around?  Maybe we can see what others
> > > think?
> > 
> > I definitely have a bad memory...
> > 
> > I grepped my IRC logs and found this patch[0] from you at the date of
> > the 28th of Sept 2012.
> > 
> > Cheers
> > 
> > Laurent Bigonville
> > 
> > [0] http://fpaste.org/p48W/
> 
> 
> 
> --
> 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.



--
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] 7+ messages in thread

end of thread, other threads:[~2013-09-28 13:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-21 11:32 File context not applied due to regex ordering Laurent Bigonville
2013-04-01 15:58 ` Christopher J. PeBenito
2013-04-01 16:55   ` Laurent Bigonville
2013-04-01 17:40     ` Eric Paris
2013-04-02  9:41       ` Laurent Bigonville
2013-09-28  9:29         ` Laurent Bigonville
2013-09-28 13:30           ` Dominick Grift

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.