[apparmor] [patch] fix aa-logprof rewrite of PUx modes.

John Johansen john.johansen at canonical.com
Tue Apr 24 16:38:12 UTC 2012


On 04/24/2012 09:02 AM, Steve Beattie wrote:
> Subject: fix aa-logprof rewrite of PUx modes.
> 
> When writing out a profile, aa-logprof incorrectly converts PUx execute
> permission modes to the syntactically invalid UPx mode, because the
> function that converts the internal representation of permissions to
> a string emits the U(nconfined) mode bit before the P bit.
> 
> This patch corrects this by reordering the way the exec permissions
> are emitted, so that P and C modes come before U and i. Based on
> http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Execute_rules
> this should emit the modes correctly in all combined exec modes.
> Other approaches to fixing this would require adjusting the data
> structure that contains the permission modes, resulting in a more
> invasive patch.
> 
> Bug: https://bugs.launchpad.net/ubuntu/+source/apparmor/+bug/982619
> 
it looks good

Acked-by: John Johansen <john.johansen at canonical.com>

> ---
>  utils/Immunix/AppArmor.pm |   21 ++++++++++++++-------
>  1 file changed, 14 insertions(+), 7 deletions(-)
> 
> Index: b/utils/Immunix/AppArmor.pm
> ===================================================================
> --- a/utils/Immunix/AppArmor.pm
> +++ b/utils/Immunix/AppArmor.pm
> @@ -4814,13 +4814,9 @@ sub sub_mode_to_str($) {
>      $str .= "a" if ($mode & $AA_MAY_APPEND);
>      $str .= "l" if ($mode & $AA_MAY_LINK);
>      $str .= "k" if ($mode & $AA_MAY_LOCK);
> -    if ($mode & $AA_EXEC_UNCONFINED) {
> -	if ($mode & $AA_EXEC_UNSAFE) {
> -	    $str .= "u";
> -	} else {
> -	    $str .= "U";
> -	}
> -    }
> +
> +    # modes P and C *must* come before I and U; otherwise syntactically
> +    # invalid profiles result
>      if ($mode & ($AA_EXEC_PROFILE | $AA_EXEC_NT)) {
>  	if ($mode & $AA_EXEC_UNSAFE) {
>  	    $str .= "p";
> @@ -4835,7 +4831,18 @@ sub sub_mode_to_str($) {
>  	    $str .= "C";
>  	}
>      }
> +
> +    # modes P and C *must* come before I and U; otherwise syntactically
> +    # invalid profiles result
> +    if ($mode & $AA_EXEC_UNCONFINED) {
> +	if ($mode & $AA_EXEC_UNSAFE) {
> +	    $str .= "u";
> +	} else {
> +	    $str .= "U";
> +	}
> +    }
>      $str .= "i" if ($mode & $AA_EXEC_INHERIT);
> +
>      $str .= "x" if ($mode & $AA_MAY_EXEC);
>  
>      return $str;
> 
> 
> 
> 




More information about the AppArmor mailing list