mbox series

[V2,0/2] selinux-testsuite: Add fs*(2) API filesystem tests

Message ID 20200127093249.3143-1-richard_c_haines@btinternet.com (mailing list archive)
Headers show
Series selinux-testsuite: Add fs*(2) API filesystem tests | expand

Message

Richard Haines Jan. 27, 2020, 9:32 a.m. UTC
These patches update the current tests/filesystem to share code (patch 1)
with the fs*(2) API filesystem tests (patch 2).

V2 Changes:
1) If kernel patch [1] installed move_mount test for denying FILE__MOUNTON
   should pass. If not installed, display 'Failed as kernel 5.x without
   "selinux: fix regression introduced by move_mount(2) syscall" patch'
   (as there is a regression that should be fixed).
   Note: Kernels 5.2 - 5.5 will fail unless [1] backported. 5.6 is expected
   to have [1].
2) Move policy changes to patch 2.

[1] https://lore.kernel.org/selinux/20200117202407.12344-1-sds@tycho.nsa.gov

Richard Haines (2):
  selinux-testsuite: Prepare for adding fs*(2) API tests
  selinux-testsuite: Add fs*(2) API filesystem tests

 policy/test_filesystem.te        |  18 +-
 tests/Makefile                   |   6 +
 tests/filesystem/Filesystem.pm   | 166 ++++++
 tests/filesystem/test            | 219 ++------
 tests/fs_filesystem/.gitignore   |   3 +
 tests/fs_filesystem/Makefile     |  16 +
 tests/fs_filesystem/fs_common.c  | 110 ++++
 tests/fs_filesystem/fs_common.h  |  30 ++
 tests/fs_filesystem/fsmount.c    |  89 ++++
 tests/fs_filesystem/fspick.c     |  68 +++
 tests/fs_filesystem/move_mount.c |  76 +++
 tests/fs_filesystem/test         | 835 +++++++++++++++++++++++++++++++
 tools/check-syntax               |   2 +-
 13 files changed, 1455 insertions(+), 183 deletions(-)
 create mode 100644 tests/filesystem/Filesystem.pm
 create mode 100644 tests/fs_filesystem/.gitignore
 create mode 100644 tests/fs_filesystem/Makefile
 create mode 100644 tests/fs_filesystem/fs_common.c
 create mode 100644 tests/fs_filesystem/fs_common.h
 create mode 100644 tests/fs_filesystem/fsmount.c
 create mode 100644 tests/fs_filesystem/fspick.c
 create mode 100644 tests/fs_filesystem/move_mount.c
 create mode 100755 tests/fs_filesystem/test

Comments

Stephen Smalley Jan. 27, 2020, 5:46 p.m. UTC | #1
On 1/27/20 4:32 AM, Richard Haines wrote:
> These patches update the current tests/filesystem to share code (patch 1)
> with the fs*(2) API filesystem tests (patch 2).
> 
> V2 Changes:
> 1) If kernel patch [1] installed move_mount test for denying FILE__MOUNTON
>     should pass. If not installed, display 'Failed as kernel 5.x without
>     "selinux: fix regression introduced by move_mount(2) syscall" patch'
>     (as there is a regression that should be fixed).
>     Note: Kernels 5.2 - 5.5 will fail unless [1] backported. 5.6 is expected
>     to have [1].
> 2) Move policy changes to patch 2.

These look ok to me; we'll see if anyone else objects to the error message.

One other item that occurred to me is that most of the current 
filesystem and fs_filesystem tests are only exercising ext4 regardless 
of the native filesystem in which you run the testsuite (e.g. if I run 
it on a labeled NFS mount most of the tests end up running in the ext4 
filesystem that is created and mounted rather than on labeled NFS 
itself, and likewise if I run it on xfs or btrfs or ...).  For tests 
where it does not matter (e.g. the type_transition tests) it might be 
better to run those on the host/native filesystem directly so we can 
more readily reuse those tests.  Obviously the mount tests themselves 
require some other filesystem besides the one in which the testsuite 
itself resides.  Don't know if people may want to make it easier to 
substitute or add additional filesystem types for testing; you already 
provide a fs_type variable in the test script but that requires patching 
the script and still only supports testing one filesystem type at a time.

> 
> [1] https://lore.kernel.org/selinux/20200117202407.12344-1-sds@tycho.nsa.gov
> 
> Richard Haines (2):
>    selinux-testsuite: Prepare for adding fs*(2) API tests
>    selinux-testsuite: Add fs*(2) API filesystem tests
> 
>   policy/test_filesystem.te        |  18 +-
>   tests/Makefile                   |   6 +
>   tests/filesystem/Filesystem.pm   | 166 ++++++
>   tests/filesystem/test            | 219 ++------
>   tests/fs_filesystem/.gitignore   |   3 +
>   tests/fs_filesystem/Makefile     |  16 +
>   tests/fs_filesystem/fs_common.c  | 110 ++++
>   tests/fs_filesystem/fs_common.h  |  30 ++
>   tests/fs_filesystem/fsmount.c    |  89 ++++
>   tests/fs_filesystem/fspick.c     |  68 +++
>   tests/fs_filesystem/move_mount.c |  76 +++
>   tests/fs_filesystem/test         | 835 +++++++++++++++++++++++++++++++
>   tools/check-syntax               |   2 +-
>   13 files changed, 1455 insertions(+), 183 deletions(-)
>   create mode 100644 tests/filesystem/Filesystem.pm
>   create mode 100644 tests/fs_filesystem/.gitignore
>   create mode 100644 tests/fs_filesystem/Makefile
>   create mode 100644 tests/fs_filesystem/fs_common.c
>   create mode 100644 tests/fs_filesystem/fs_common.h
>   create mode 100644 tests/fs_filesystem/fsmount.c
>   create mode 100644 tests/fs_filesystem/fspick.c
>   create mode 100644 tests/fs_filesystem/move_mount.c
>   create mode 100755 tests/fs_filesystem/test
>
Richard Haines Jan. 29, 2020, 12:56 p.m. UTC | #2
On Mon, 2020-01-27 at 12:46 -0500, Stephen Smalley wrote:
> On 1/27/20 4:32 AM, Richard Haines wrote:
> > These patches update the current tests/filesystem to share code
> > (patch 1)
> > with the fs*(2) API filesystem tests (patch 2).
> > 
> > V2 Changes:
> > 1) If kernel patch [1] installed move_mount test for denying
> > FILE__MOUNTON
> >     should pass. If not installed, display 'Failed as kernel 5.x
> > without
> >     "selinux: fix regression introduced by move_mount(2) syscall"
> > patch'
> >     (as there is a regression that should be fixed).
> >     Note: Kernels 5.2 - 5.5 will fail unless [1] backported. 5.6 is
> > expected
> >     to have [1].
> > 2) Move policy changes to patch 2.
> 
> These look ok to me; we'll see if anyone else objects to the error
> message.
> 
> One other item that occurred to me is that most of the current 
> filesystem and fs_filesystem tests are only exercising ext4
> regardless 
> of the native filesystem in which you run the testsuite (e.g. if I
> run 
> it on a labeled NFS mount most of the tests end up running in the
> ext4 
> filesystem that is created and mounted rather than on labeled NFS 
> itself, and likewise if I run it on xfs or btrfs or ...).  For tests 
> where it does not matter (e.g. the type_transition tests) it might
> be 
> better to run those on the host/native filesystem directly so we can 
> more readily reuse those tests.  Obviously the mount tests
> themselves 
> require some other filesystem besides the one in which the testsuite 
> itself resides.  Don't know if people may want to make it easier to 
> substitute or add additional filesystem types for testing; you
> already 
> provide a fs_type variable in the test script but that requires
> patching 
> the script and still only supports testing one filesystem type at a
> time.

I'll do some work on making the tests use the native filesystem and add
an option to select a different one.
I quess I could add a list of fs to run against from relevant
proc/filesystems entries? (or something else)

I had a go with xfs and found Fedora is configured by default to use
the xfs quota system, however that does not call security hooks
security_quota_on or security_quotactl so not worth testing, otherwise
apart from increasing the block size seems okay.

I also have another patch ready as I noticed that I missed these:
hooks.c selinux_path_notify() FILE__WATCH_SB
hooks.c selinux_path_notify() FILE__WATCH_MOUNT

> 
> > [1] 
> > https://lore.kernel.org/selinux/20200117202407.12344-1-sds@tycho.nsa.gov
> > 
> > Richard Haines (2):
> >    selinux-testsuite: Prepare for adding fs*(2) API tests
> >    selinux-testsuite: Add fs*(2) API filesystem tests
> > 
> >   policy/test_filesystem.te        |  18 +-
> >   tests/Makefile                   |   6 +
> >   tests/filesystem/Filesystem.pm   | 166 ++++++
> >   tests/filesystem/test            | 219 ++------
> >   tests/fs_filesystem/.gitignore   |   3 +
> >   tests/fs_filesystem/Makefile     |  16 +
> >   tests/fs_filesystem/fs_common.c  | 110 ++++
> >   tests/fs_filesystem/fs_common.h  |  30 ++
> >   tests/fs_filesystem/fsmount.c    |  89 ++++
> >   tests/fs_filesystem/fspick.c     |  68 +++
> >   tests/fs_filesystem/move_mount.c |  76 +++
> >   tests/fs_filesystem/test         | 835
> > +++++++++++++++++++++++++++++++
> >   tools/check-syntax               |   2 +-
> >   13 files changed, 1455 insertions(+), 183 deletions(-)
> >   create mode 100644 tests/filesystem/Filesystem.pm
> >   create mode 100644 tests/fs_filesystem/.gitignore
> >   create mode 100644 tests/fs_filesystem/Makefile
> >   create mode 100644 tests/fs_filesystem/fs_common.c
> >   create mode 100644 tests/fs_filesystem/fs_common.h
> >   create mode 100644 tests/fs_filesystem/fsmount.c
> >   create mode 100644 tests/fs_filesystem/fspick.c
> >   create mode 100644 tests/fs_filesystem/move_mount.c
> >   create mode 100755 tests/fs_filesystem/test
> >
Stephen Smalley Jan. 29, 2020, 1:06 p.m. UTC | #3
On 1/29/20 7:56 AM, Richard Haines wrote:
> On Mon, 2020-01-27 at 12:46 -0500, Stephen Smalley wrote:
>> On 1/27/20 4:32 AM, Richard Haines wrote:
>>> These patches update the current tests/filesystem to share code
>>> (patch 1)
>>> with the fs*(2) API filesystem tests (patch 2).
>>>
>>> V2 Changes:
>>> 1) If kernel patch [1] installed move_mount test for denying
>>> FILE__MOUNTON
>>>      should pass. If not installed, display 'Failed as kernel 5.x
>>> without
>>>      "selinux: fix regression introduced by move_mount(2) syscall"
>>> patch'
>>>      (as there is a regression that should be fixed).
>>>      Note: Kernels 5.2 - 5.5 will fail unless [1] backported. 5.6 is
>>> expected
>>>      to have [1].
>>> 2) Move policy changes to patch 2.
>>
>> These look ok to me; we'll see if anyone else objects to the error
>> message.
>>
>> One other item that occurred to me is that most of the current
>> filesystem and fs_filesystem tests are only exercising ext4
>> regardless
>> of the native filesystem in which you run the testsuite (e.g. if I
>> run
>> it on a labeled NFS mount most of the tests end up running in the
>> ext4
>> filesystem that is created and mounted rather than on labeled NFS
>> itself, and likewise if I run it on xfs or btrfs or ...).  For tests
>> where it does not matter (e.g. the type_transition tests) it might
>> be
>> better to run those on the host/native filesystem directly so we can
>> more readily reuse those tests.  Obviously the mount tests
>> themselves
>> require some other filesystem besides the one in which the testsuite
>> itself resides.  Don't know if people may want to make it easier to
>> substitute or add additional filesystem types for testing; you
>> already
>> provide a fs_type variable in the test script but that requires
>> patching
>> the script and still only supports testing one filesystem type at a
>> time.
> 
> I'll do some work on making the tests use the native filesystem and add
> an option to select a different one.
> I quess I could add a list of fs to run against from relevant
> proc/filesystems entries? (or something else)
> 
> I had a go with xfs and found Fedora is configured by default to use
> the xfs quota system, however that does not call security hooks
> security_quota_on or security_quotactl so not worth testing, otherwise
> apart from increasing the block size seems okay.
> 
> I also have another patch ready as I noticed that I missed these:
> hooks.c selinux_path_notify() FILE__WATCH_SB
> hooks.c selinux_path_notify() FILE__WATCH_MOUNT

Make any further changes relative to these patches because I expect one 
of us to merge these barring objections.

Lack of LSM quota-related hooks on xfs seems like a bug / gap in 
coverage that should be fixed.

At least some of the watch permissions are tested by tests/notify/* and 
further tests would logically go there I think.