On 02/17/2016 08:51 PM, Tyler Hicks wrote:
> https://launchpad.net/bugs/1546455
> 
> Don't filter out AF_UNSPEC from the list of valid protocol families so
> that the parser will accept rules such as 'network unspec,'.
> 
> There are certain syscalls, such as socket(2), where the LSM hooks are
> called before the protocol family is validated. In these cases, AppArmor
> was emitting denials even though socket(2) will eventually fail. There
> may be cases where AF_UNSPEC sockets are accepted and we need to make
> sure that we're mediating those appropriately.
> 
> Signed-off-by: Tyler Hicks <tyhi...@canonical.com>
> Suggested-by: Steve Beattie <st...@nxnw.org>

Acked-by: John Johansen <john.johan...@canonical.com>

> ---
>  common/Make.rules                               | 2 +-
>  parser/tst/simple_tests/network/network_ok_2.sd | 1 +
>  parser/tst/simple_tests/network/network_ok_7.sd | 9 +++++++++
>  tests/regression/apparmor/tcp.sh                | 4 ++++
>  4 files changed, 15 insertions(+), 1 deletion(-)
>  create mode 100644 parser/tst/simple_tests/network/network_ok_7.sd
> 
> diff --git a/common/Make.rules b/common/Make.rules
> index 34ecb62..7d1afa2 100644
> --- a/common/Make.rules
> +++ b/common/Make.rules
> @@ -98,7 +98,7 @@ list_capabilities: /usr/include/linux/capability.h
>  # to mediate. We use PF_ here since that is what is required in
>  # bits/socket.h, but we will rewrite these as AF_.
>  
> -FILTER_FAMILIES=PF_UNSPEC PF_UNIX
> +FILTER_FAMILIES=PF_UNIX
>  
>  __FILTER=$(shell echo $(strip $(FILTER_FAMILIES)) | sed -e 's/ /\\\|/g')
>  
> diff --git a/parser/tst/simple_tests/network/network_ok_2.sd 
> b/parser/tst/simple_tests/network/network_ok_2.sd
> index bb16a23..2ad66af 100644
> --- a/parser/tst/simple_tests/network/network_ok_2.sd
> +++ b/parser/tst/simple_tests/network/network_ok_2.sd
> @@ -3,6 +3,7 @@
>  #=EXRESULT PASS
>  #
>  /usr/bin/foo {
> +  network unspec,
>    network inet,
>    network ax25,
>    network ipx,
> diff --git a/parser/tst/simple_tests/network/network_ok_7.sd 
> b/parser/tst/simple_tests/network/network_ok_7.sd
> new file mode 100644
> index 0000000..2a8ccf8
> --- /dev/null
> +++ b/parser/tst/simple_tests/network/network_ok_7.sd
> @@ -0,0 +1,9 @@
> +#
> +#=DESCRIPTION basic unspec network tests
> +#=EXRESULT PASS
> +#
> +/usr/bin/foo {
> +  network unspec stream,
> +  network unspec dgram,
> +  network unspec raw,
> +}
> diff --git a/tests/regression/apparmor/tcp.sh 
> b/tests/regression/apparmor/tcp.sh
> index 076ca00..703f1c5 100755
> --- a/tests/regression/apparmor/tcp.sh
> +++ b/tests/regression/apparmor/tcp.sh
> @@ -52,6 +52,10 @@ runchecktest "TCP (accept, connect) low numbered port/bind 
> cap" pass 23
>  genprofile network:inet 
>  runchecktest "TCP (accept, connect) low numbered port/no bind cap" fail 23
>  
> +# FAIL TEST - make sure that unspec doesn't match
> +genprofile network:unspec
> +runchecktest "TCP (accept, connect) wrong socket family" fail 23
> +
>  exit 0
>  
>  # PASS TEST - accept via interface
> 


-- 
AppArmor mailing list
AppArmor@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to