2019-08-21 19:59:19

by Nicolas Iooss

[permalink] [raw]
Subject: Why is /usr/include matched with /usr/inclu.e?

Hi all,

While checking the patterns in refpolicy, I stumbled upon the
following line in
https://github.com/SELinuxProject/refpolicy/blob/RELEASE_2_20190609/policy/modules/kernel/files.fc#L200

/usr/inclu.e(/.*)? gen_context(system_u:object_r:usr_t,s0)

This pattern matches /usr/include and its content, but why is a dot
used? Which other directories can it match?

The issue there is that a dot can match a slash, so the pattern also
matches /usr/inclu/e/, which seems strange. This pattern has been
introduced in the very early days of refpolicy's git repository,
according to https://github.com/SELinuxProject/refpolicy/commit/f8ec0ad43b54437e2d9f0e48a773a64dbd9e543c#diff-e333cb52d2139f7a71f0dfbd32c06f70R117.
Does anyone remember why the pattern for /usr/include is so special?

Thanks,
Nicolas


2019-08-21 20:03:29

by Dominick Grift

[permalink] [raw]
Subject: Re: Why is /usr/include matched with /usr/inclu.e?

On Wed, Aug 21, 2019 at 09:57:14PM +0200, Nicolas Iooss wrote:
> Hi all,
>
> While checking the patterns in refpolicy, I stumbled upon the
> following line in
> https://github.com/SELinuxProject/refpolicy/blob/RELEASE_2_20190609/policy/modules/kernel/files.fc#L200
>
> /usr/inclu.e(/.*)? gen_context(system_u:object_r:usr_t,s0)

Probably to work around an m4-ism. There seems to be an m4 "include" built-in.

>
> This pattern matches /usr/include and its content, but why is a dot
> used? Which other directories can it match?
>
> The issue there is that a dot can match a slash, so the pattern also
> matches /usr/inclu/e/, which seems strange. This pattern has been
> introduced in the very early days of refpolicy's git repository,
> according to https://github.com/SELinuxProject/refpolicy/commit/f8ec0ad43b54437e2d9f0e48a773a64dbd9e543c#diff-e333cb52d2139f7a71f0dfbd32c06f70R117.
> Does anyone remember why the pattern for /usr/include is so special?
>
> Thanks,
> Nicolas
>

--
Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8 02D5 3B6C 5F1D 2C7B 6B02
https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
Dominick Grift


Attachments:
(No filename) (1.15 kB)
signature.asc (673.00 B)
Download all attachments

2019-08-21 20:30:16

by Nicolas Iooss

[permalink] [raw]
Subject: Re: Why is /usr/include matched with /usr/inclu.e?

On Wed, Aug 21, 2019 at 10:02 PM Dominick Grift <[email protected]> wrote:
>
> On Wed, Aug 21, 2019 at 09:57:14PM +0200, Nicolas Iooss wrote:
> > Hi all,
> >
> > While checking the patterns in refpolicy, I stumbled upon the
> > following line in
> > https://github.com/SELinuxProject/refpolicy/blob/RELEASE_2_20190609/policy/modules/kernel/files.fc#L200
> >
> > /usr/inclu.e(/.*)? gen_context(system_u:object_r:usr_t,s0)
>
> Probably to work around an m4-ism. There seems to be an m4 "include" built-in.

This seems to be a good explanation. The policy also uses workarounds
for "index" built-in, with:

/etc/amanda/.*/index`'(/.*)?
/var/lib/apt-xapian-inde(x)(/.*)?

In order not to introduce parentheses (which might change some
ordering in the way the paths are matched with the patterns), I am
thinking of replacing the pattern of /usr/include with:

/usr/includ[e](/.*)? gen_context(system_u:object_r:usr_t,s0)

... with a comment about working around a m4 issue.

Thanks,
Nicolas

> >
> > This pattern matches /usr/include and its content, but why is a dot
> > used? Which other directories can it match?
> >
> > The issue there is that a dot can match a slash, so the pattern also
> > matches /usr/inclu/e/, which seems strange. This pattern has been
> > introduced in the very early days of refpolicy's git repository,
> > according to https://github.com/SELinuxProject/refpolicy/commit/f8ec0ad43b54437e2d9f0e48a773a64dbd9e543c#diff-e333cb52d2139f7a71f0dfbd32c06f70R117.
> > Does anyone remember why the pattern for /usr/include is so special?
> >
> > Thanks,
> > Nicolas
> >
>
> --
> Key fingerprint = 5F4D 3CDB D3F8 3652 FBD8 02D5 3B6C 5F1D 2C7B 6B02
> https://sks-keyservers.net/pks/lookup?op=get&search=0x3B6C5F1D2C7B6B02
> Dominick Grift

2019-08-27 04:07:06

by Chris PeBenito

[permalink] [raw]
Subject: Re: Why is /usr/include matched with /usr/inclu.e?

On 8/21/19 4:29 PM, Nicolas Iooss wrote:
> On Wed, Aug 21, 2019 at 10:02 PM Dominick Grift <[email protected]> wrote:
>>
>> On Wed, Aug 21, 2019 at 09:57:14PM +0200, Nicolas Iooss wrote:
>>> Hi all,
>>>
>>> While checking the patterns in refpolicy, I stumbled upon the
>>> following line in
>>> https://github.com/SELinuxProject/refpolicy/blob/RELEASE_2_20190609/policy/modules/kernel/files.fc#L200
>>>
>>> /usr/inclu.e(/.*)? gen_context(system_u:object_r:usr_t,s0)
>>
>> Probably to work around an m4-ism. There seems to be an m4 "include" built-in.
>
> This seems to be a good explanation. The policy also uses workarounds
> for "index" built-in, with:
>
> /etc/amanda/.*/index`'(/.*)?
> /var/lib/apt-xapian-inde(x)(/.*)?
>
> In order not to introduce parentheses (which might change some
> ordering in the way the paths are matched with the patterns), I am
> thinking of replacing the pattern of /usr/include with:
>
> /usr/includ[e](/.*)? gen_context(system_u:object_r:usr_t,s0)
>
> ... with a comment about working around a m4 issue.

My preference would be an empty m4 string (`') over some regex trick, if
possible, so the sorting isn't upset.

--
Chris PeBenito