[apparmor] [PATCH 6/6] libapparmor: Allow creating a kernel_interface with a NULL kernel_features

Steve Beattie steve at nxnw.org
Thu Mar 26 07:32:26 UTC 2015


On Wed, Mar 25, 2015 at 05:37:21PM -0500, Tyler Hicks wrote:
> The most common case when creating an aa_kernel_interface object will be
> to do so while using the current kernel's feature set for the
> kernel_features parameter. Rather than have callers instantiate their
> own aa_features object in this situation, aa_kernel_interface_new()
> should do it for them if they specify NULL for the kernel_features
> parameter.
> 
> Signed-off-by: Tyler Hicks <tyhicks at canonical.com>

And similarly for this one, Acked-by: Steve Beattie <steve at nxnw.org>.

With this and the previous change, all the calls to
aa_features_new_from_kernel() in the test source aa_policy_cache.c
are gone. Do you envision a situation where a user of the API would
still want to get the features structure from the running kernel
via aa_features_new_from_kernel()?  Or can we make it an internal
function to the library, simplifying the interface?

> ---
>  libraries/libapparmor/src/kernel_interface.c | 18 ++++++++++++++----
>  tests/regression/apparmor/aa_policy_cache.c  |  9 +--------
>  2 files changed, 15 insertions(+), 12 deletions(-)
> 
> diff --git a/libraries/libapparmor/src/kernel_interface.c b/libraries/libapparmor/src/kernel_interface.c
> index 6ab20ea..15b171f 100644
> --- a/libraries/libapparmor/src/kernel_interface.c
> +++ b/libraries/libapparmor/src/kernel_interface.c
> @@ -198,7 +198,9 @@ static int write_policy_file_to_iface(aa_kernel_interface *kernel_interface,
>   * aa_kernel_interface_new - create a new kernel_interface from an optional path
>   * @kernel_interface: will point to the address of an allocated and initialized
>   *                    aa_kernel_interface object upon success
> - * @kernel_features: features representing the currently running kernel
> + * @kernel_features: features representing the currently running kernel (can be
> + *                   NULL and the features of the currently running kernel will
> + *                   be used)
>   * @apparmorfs: path to the apparmor directory of the mounted securityfs (can
>   *              be NULL and the path will be auto discovered)
>   *
> @@ -223,9 +225,17 @@ int aa_kernel_interface_new(aa_kernel_interface **kernel_interface,
>  	aa_kernel_interface_ref(ki);
>  	ki->dirfd = -1;
>  
> -	ki->supports_setload = kernel_features ?
> -			       aa_features_supports(kernel_features, set_load) :
> -			       false;
> +	if (kernel_features) {
> +		aa_features_ref(kernel_features);
> +	} else if (aa_features_new_from_kernel(&kernel_features) == -1) {
> +		int save = errno;
> +
> +		aa_kernel_interface_unref(ki);
> +		errno = save;
> +		return -1;
> +	}
> +	ki->supports_setload = aa_features_supports(kernel_features, set_load);
> +	aa_features_unref(kernel_features);
>  
>  	if (!apparmorfs) {
>  		if (find_iface_dir(&alloced_apparmorfs) == -1) {
> diff --git a/tests/regression/apparmor/aa_policy_cache.c b/tests/regression/apparmor/aa_policy_cache.c
> index 03f7b5b..b221c98 100644
> --- a/tests/regression/apparmor/aa_policy_cache.c
> +++ b/tests/regression/apparmor/aa_policy_cache.c
> @@ -120,16 +120,10 @@ out:
>  
>  static int test_remove_policy(const char *name)
>  {
> -	aa_features *features = NULL;
>  	aa_kernel_interface *kernel_interface = NULL;
>  	int rc = 1;
>  
> -	if (aa_features_new_from_kernel(&features)) {
> -		perror("FAIL - aa_features_new_from_kernel");
> -		goto out;
> -	}
> -
> -	if (aa_kernel_interface_new(&kernel_interface, features, NULL)) {
> +	if (aa_kernel_interface_new(&kernel_interface, NULL, NULL)) {
>  		perror("FAIL - aa_kernel_interface_new");
>  		goto out;
>  	}
> @@ -142,7 +136,6 @@ static int test_remove_policy(const char *name)
>  	rc = 0;
>  out:
>  	aa_kernel_interface_unref(kernel_interface);
> -	aa_features_unref(features);
>  	return rc;
>  }

-- 
Steve Beattie
<sbeattie at ubuntu.com>
http://NxNW.org/~steve/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20150326/5471afd5/attachment.pgp>


More information about the AppArmor mailing list