diff mbox series

[testsuite,v5] policy: use the kernel_request_load_module() interface

Message ID 20191127123319.814863-1-omosnace@redhat.com (mailing list archive)
State Superseded
Headers show
Series [testsuite,v5] policy: use the kernel_request_load_module() interface | expand

Commit Message

Ondrej Mosnacek Nov. 27, 2019, 12:33 p.m. UTC
...instead of open-coding the rules. Also define a fallback to allow the
policy to build even if the interface is not defined.

Fixes: f5e5a0b8d005 ("selinux-testsuite: Add key_socket tests")
Cc: Richard Haines <richard_c_haines@btinternet.com>
Suggested-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
---

Change in v5: call the macro only once for the whole domain
Change in v4: fix copy-paste mistakes spotted by Richard
Change in v3: use different approach as suggested by Stephen
Change in v2: update also tests/Makefile for consistency

 policy/test_key_socket.te | 8 +++-----
 policy/test_policy.if     | 6 ++++++
 2 files changed, 9 insertions(+), 5 deletions(-)

Comments

Richard Haines Nov. 27, 2019, 2 p.m. UTC | #1
On Wed, 2019-11-27 at 13:33 +0100, Ondrej Mosnacek wrote:
> ...instead of open-coding the rules. Also define a fallback to allow
> the
> policy to build even if the interface is not defined.
> 
> Fixes: f5e5a0b8d005 ("selinux-testsuite: Add key_socket tests")
> Cc: Richard Haines <richard_c_haines@btinternet.com>
> Suggested-by: Stephen Smalley <sds@tycho.nsa.gov>
> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> ---
> 
Thanks, ack from me

> Change in v5: call the macro only once for the whole domain
> Change in v4: fix copy-paste mistakes spotted by Richard
> Change in v3: use different approach as suggested by Stephen
> Change in v2: update also tests/Makefile for consistency
> 
>  policy/test_key_socket.te | 8 +++-----
>  policy/test_policy.if     | 6 ++++++
>  2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/policy/test_key_socket.te b/policy/test_key_socket.te
> index cde426b..64d2cee 100644
> --- a/policy/test_key_socket.te
> +++ b/policy/test_key_socket.te
> @@ -12,8 +12,6 @@ typeattribute test_key_sock_t keysockdomain;
>  # key_socket rules:
>  allow test_key_sock_t self:capability { net_admin };
>  allow test_key_sock_t self:key_socket { create write read setopt };
> -# For CONFIG_NET_KEY=m
> -allow test_key_sock_t kernel_t:system { module_request };
>  
>  ################## Deny capability { net_admin }
> ##########################
>  #
> @@ -29,7 +27,6 @@ typeattribute test_key_sock_no_net_admin_t
> testdomain;
>  typeattribute test_key_sock_no_net_admin_t keysockdomain;
>  
>  allow test_key_sock_no_net_admin_t self:key_socket { create write
> read setopt };
> -allow test_key_sock_no_net_admin_t kernel_t:system { module_request
> };
>  
>  ####################### Deny key_socket { create }
> ##########################
>  type test_key_sock_no_create_t;
> @@ -50,7 +47,6 @@ typeattribute test_key_sock_no_write_t
> keysockdomain;
>  
>  allow test_key_sock_no_write_t self:capability { net_admin };
>  allow test_key_sock_no_write_t self:key_socket { create read setopt
> };
> -allow test_key_sock_no_write_t kernel_t:system { module_request };
>  
>  ####################### Deny key_socket { read }
> ##########################
>  type test_key_sock_no_read_t;
> @@ -61,10 +57,12 @@ typeattribute test_key_sock_no_read_t
> keysockdomain;
>  
>  allow test_key_sock_no_read_t self:capability { net_admin };
>  allow test_key_sock_no_read_t self:key_socket { create write setopt
> };
> -allow test_key_sock_no_read_t kernel_t:system { module_request };
>  
>  #
>  ########### Allow these domains to be entered from sysadm domain
> ############
>  #
>  miscfiles_domain_entry_test_files(keysockdomain)
>  userdom_sysadm_entry_spec_domtrans_to(keysockdomain)
> +
> +# For CONFIG_NET_KEY=m
> +kernel_request_load_module(keysockdomain)
> diff --git a/policy/test_policy.if b/policy/test_policy.if
> index e1175e8..3f163cb 100644
> --- a/policy/test_policy.if
> +++ b/policy/test_policy.if
> @@ -82,3 +82,9 @@ interface(`userdom_search_admin_dir', `
>      userdom_search_user_home_content($1)
>  ')
>  ')
> +
> +# If the macro isn't defined, then most probably module_request
> permission
> +# is just not supported (and relevant operations should be just
> allowed).
> +ifdef(`kernel_request_load_module', `', ` dnl
> +interface(`kernel_request_load_module', `')
> +')
Stephen Smalley Nov. 27, 2019, 3:16 p.m. UTC | #2
On 11/27/19 7:33 AM, Ondrej Mosnacek wrote:
> ...instead of open-coding the rules. Also define a fallback to allow the
> policy to build even if the interface is not defined.
> 
> Fixes: f5e5a0b8d005 ("selinux-testsuite: Add key_socket tests")
> Cc: Richard Haines <richard_c_haines@btinternet.com>
> Suggested-by: Stephen Smalley <sds@tycho.nsa.gov>
> Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> ---
> 
> Change in v5: call the macro only once for the whole domain
> Change in v4: fix copy-paste mistakes spotted by Richard
> Change in v3: use different approach as suggested by Stephen
> Change in v2: update also tests/Makefile for consistency
> 
>   policy/test_key_socket.te | 8 +++-----
>   policy/test_policy.if     | 6 ++++++
>   2 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/policy/test_key_socket.te b/policy/test_key_socket.te
> index cde426b..64d2cee 100644
> --- a/policy/test_key_socket.te
> +++ b/policy/test_key_socket.te
> @@ -12,8 +12,6 @@ typeattribute test_key_sock_t keysockdomain;
>   # key_socket rules:
>   allow test_key_sock_t self:capability { net_admin };
>   allow test_key_sock_t self:key_socket { create write read setopt };
> -# For CONFIG_NET_KEY=m
> -allow test_key_sock_t kernel_t:system { module_request };
>   
>   ################## Deny capability { net_admin } ##########################
>   #
> @@ -29,7 +27,6 @@ typeattribute test_key_sock_no_net_admin_t testdomain;
>   typeattribute test_key_sock_no_net_admin_t keysockdomain;
>   
>   allow test_key_sock_no_net_admin_t self:key_socket { create write read setopt };
> -allow test_key_sock_no_net_admin_t kernel_t:system { module_request };
>   
>   ####################### Deny key_socket { create } ##########################
>   type test_key_sock_no_create_t;
> @@ -50,7 +47,6 @@ typeattribute test_key_sock_no_write_t keysockdomain;
>   
>   allow test_key_sock_no_write_t self:capability { net_admin };
>   allow test_key_sock_no_write_t self:key_socket { create read setopt };
> -allow test_key_sock_no_write_t kernel_t:system { module_request };
>   
>   ####################### Deny key_socket { read } ##########################
>   type test_key_sock_no_read_t;
> @@ -61,10 +57,12 @@ typeattribute test_key_sock_no_read_t keysockdomain;
>   
>   allow test_key_sock_no_read_t self:capability { net_admin };
>   allow test_key_sock_no_read_t self:key_socket { create write setopt };
> -allow test_key_sock_no_read_t kernel_t:system { module_request };
>   
>   #
>   ########### Allow these domains to be entered from sysadm domain ############
>   #
>   miscfiles_domain_entry_test_files(keysockdomain)
>   userdom_sysadm_entry_spec_domtrans_to(keysockdomain)
> +
> +# For CONFIG_NET_KEY=m
> +kernel_request_load_module(keysockdomain)
> diff --git a/policy/test_policy.if b/policy/test_policy.if
> index e1175e8..3f163cb 100644
> --- a/policy/test_policy.if
> +++ b/policy/test_policy.if
> @@ -82,3 +82,9 @@ interface(`userdom_search_admin_dir', `
>       userdom_search_user_home_content($1)
>   ')
>   ')
> +
> +# If the macro isn't defined, then most probably module_request permission

Sorry, I should have caught this earlier.  m4 does not do the right 
thing with embedded quotes in comments, so you can get weird effects 
after macro expansion.  I'd expand it to "is not" to be safe.

> +# is just not supported (and relevant operations should be just allowed).
> +ifdef(`kernel_request_load_module', `', ` dnl
> +interface(`kernel_request_load_module', `')
> +')
>
Ondrej Mosnacek Nov. 27, 2019, 3:28 p.m. UTC | #3
On Wed, Nov 27, 2019 at 4:16 PM Stephen Smalley <sds@tycho.nsa.gov> wrote:
> On 11/27/19 7:33 AM, Ondrej Mosnacek wrote:
> > ...instead of open-coding the rules. Also define a fallback to allow the
> > policy to build even if the interface is not defined.
> >
> > Fixes: f5e5a0b8d005 ("selinux-testsuite: Add key_socket tests")
> > Cc: Richard Haines <richard_c_haines@btinternet.com>
> > Suggested-by: Stephen Smalley <sds@tycho.nsa.gov>
> > Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
> > ---
> >
> > Change in v5: call the macro only once for the whole domain
> > Change in v4: fix copy-paste mistakes spotted by Richard
> > Change in v3: use different approach as suggested by Stephen
> > Change in v2: update also tests/Makefile for consistency
> >
> >   policy/test_key_socket.te | 8 +++-----
> >   policy/test_policy.if     | 6 ++++++
> >   2 files changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/policy/test_key_socket.te b/policy/test_key_socket.te
> > index cde426b..64d2cee 100644
> > --- a/policy/test_key_socket.te
> > +++ b/policy/test_key_socket.te
> > @@ -12,8 +12,6 @@ typeattribute test_key_sock_t keysockdomain;
> >   # key_socket rules:
> >   allow test_key_sock_t self:capability { net_admin };
> >   allow test_key_sock_t self:key_socket { create write read setopt };
> > -# For CONFIG_NET_KEY=m
> > -allow test_key_sock_t kernel_t:system { module_request };
> >
> >   ################## Deny capability { net_admin } ##########################
> >   #
> > @@ -29,7 +27,6 @@ typeattribute test_key_sock_no_net_admin_t testdomain;
> >   typeattribute test_key_sock_no_net_admin_t keysockdomain;
> >
> >   allow test_key_sock_no_net_admin_t self:key_socket { create write read setopt };
> > -allow test_key_sock_no_net_admin_t kernel_t:system { module_request };
> >
> >   ####################### Deny key_socket { create } ##########################
> >   type test_key_sock_no_create_t;
> > @@ -50,7 +47,6 @@ typeattribute test_key_sock_no_write_t keysockdomain;
> >
> >   allow test_key_sock_no_write_t self:capability { net_admin };
> >   allow test_key_sock_no_write_t self:key_socket { create read setopt };
> > -allow test_key_sock_no_write_t kernel_t:system { module_request };
> >
> >   ####################### Deny key_socket { read } ##########################
> >   type test_key_sock_no_read_t;
> > @@ -61,10 +57,12 @@ typeattribute test_key_sock_no_read_t keysockdomain;
> >
> >   allow test_key_sock_no_read_t self:capability { net_admin };
> >   allow test_key_sock_no_read_t self:key_socket { create write setopt };
> > -allow test_key_sock_no_read_t kernel_t:system { module_request };
> >
> >   #
> >   ########### Allow these domains to be entered from sysadm domain ############
> >   #
> >   miscfiles_domain_entry_test_files(keysockdomain)
> >   userdom_sysadm_entry_spec_domtrans_to(keysockdomain)
> > +
> > +# For CONFIG_NET_KEY=m
> > +kernel_request_load_module(keysockdomain)
> > diff --git a/policy/test_policy.if b/policy/test_policy.if
> > index e1175e8..3f163cb 100644
> > --- a/policy/test_policy.if
> > +++ b/policy/test_policy.if
> > @@ -82,3 +82,9 @@ interface(`userdom_search_admin_dir', `
> >       userdom_search_user_home_content($1)
> >   ')
> >   ')
> > +
> > +# If the macro isn't defined, then most probably module_request permission
>
> Sorry, I should have caught this earlier.  m4 does not do the right
> thing with embedded quotes in comments, so you can get weird effects
> after macro expansion.  I'd expand it to "is not" to be safe.

I see, will do another respin then.

>
> > +# is just not supported (and relevant operations should be just allowed).
> > +ifdef(`kernel_request_load_module', `', ` dnl
> > +interface(`kernel_request_load_module', `')
> > +')
> >
>


--
Ondrej Mosnacek <omosnace at redhat dot com>
Software Engineer, Security Technologies
Red Hat, Inc.
diff mbox series

Patch

diff --git a/policy/test_key_socket.te b/policy/test_key_socket.te
index cde426b..64d2cee 100644
--- a/policy/test_key_socket.te
+++ b/policy/test_key_socket.te
@@ -12,8 +12,6 @@  typeattribute test_key_sock_t keysockdomain;
 # key_socket rules:
 allow test_key_sock_t self:capability { net_admin };
 allow test_key_sock_t self:key_socket { create write read setopt };
-# For CONFIG_NET_KEY=m
-allow test_key_sock_t kernel_t:system { module_request };
 
 ################## Deny capability { net_admin } ##########################
 #
@@ -29,7 +27,6 @@  typeattribute test_key_sock_no_net_admin_t testdomain;
 typeattribute test_key_sock_no_net_admin_t keysockdomain;
 
 allow test_key_sock_no_net_admin_t self:key_socket { create write read setopt };
-allow test_key_sock_no_net_admin_t kernel_t:system { module_request };
 
 ####################### Deny key_socket { create } ##########################
 type test_key_sock_no_create_t;
@@ -50,7 +47,6 @@  typeattribute test_key_sock_no_write_t keysockdomain;
 
 allow test_key_sock_no_write_t self:capability { net_admin };
 allow test_key_sock_no_write_t self:key_socket { create read setopt };
-allow test_key_sock_no_write_t kernel_t:system { module_request };
 
 ####################### Deny key_socket { read } ##########################
 type test_key_sock_no_read_t;
@@ -61,10 +57,12 @@  typeattribute test_key_sock_no_read_t keysockdomain;
 
 allow test_key_sock_no_read_t self:capability { net_admin };
 allow test_key_sock_no_read_t self:key_socket { create write setopt };
-allow test_key_sock_no_read_t kernel_t:system { module_request };
 
 #
 ########### Allow these domains to be entered from sysadm domain ############
 #
 miscfiles_domain_entry_test_files(keysockdomain)
 userdom_sysadm_entry_spec_domtrans_to(keysockdomain)
+
+# For CONFIG_NET_KEY=m
+kernel_request_load_module(keysockdomain)
diff --git a/policy/test_policy.if b/policy/test_policy.if
index e1175e8..3f163cb 100644
--- a/policy/test_policy.if
+++ b/policy/test_policy.if
@@ -82,3 +82,9 @@  interface(`userdom_search_admin_dir', `
     userdom_search_user_home_content($1)
 ')
 ')
+
+# If the macro isn't defined, then most probably module_request permission
+# is just not supported (and relevant operations should be just allowed).
+ifdef(`kernel_request_load_module', `', ` dnl
+interface(`kernel_request_load_module', `')
+')