[apparmor] [PATCH 3/4] Update permission mapping for changes made to the upstream kernel patch.

Steve Beattie steve at nxnw.org
Thu Mar 15 19:36:37 UTC 2012


On Thu, Mar 15, 2012 at 09:36:27AM -0700, John Johansen wrote:
> The changes are around how user data is handled.
> 
> 1. permissions are mapped before data is matched
> 2. If data is to be mapped a AA_CONT_MATCH flag is set in the permissions
>    which allows data matching to continue.
> 3. If data auditing is to occur the AA_AUDIT_MNT_DATA flag is set
> 
> This allows better control over matching and auditing of data which can
> be binary and should not be matched or audited
> 
> Signed-off-by: John Johansen <john.johansen at canonical.com>
> ---
>  parser/mount.h        |    6 +++-
>  parser/parser_regex.c |   56 ++++++++++++++++++++++++++++++++++++++++++-------
>  2 files changed, 52 insertions(+), 10 deletions(-)
> 
> diff --git a/parser/mount.h b/parser/mount.h
> index 8a102ed..16a2dc3 100644
> --- a/parser/mount.h
> +++ b/parser/mount.h
> @@ -103,8 +103,10 @@
>  #define AA_MAY_PIVOTROOT 1
>  #define AA_MAY_MOUNT 2
>  #define AA_MAY_UMOUNT 4
> -#define AA_DUMMY_REMOUNT 32	/* dummy perm for remount rule - is remapped
> -				 * to a mount option*/
> +#define AA_AUDIT_MNT_DATA 0x40
> +#define AA_MATCH_CONT 0x40

Are these two supposed to have the same value?

> +#define AA_DUMMY_REMOUNT 0x40000000	/* dummy perm for remount rule - is
> +					 * remapped to a mount option*/
>  
>  
>  struct mnt_entry {
> diff --git a/parser/parser_regex.c b/parser/parser_regex.c
> index 0e6e449..8c34799 100644
> --- a/parser/parser_regex.c
> +++ b/parser/parser_regex.c
> @@ -784,6 +784,7 @@ static int process_mnt_entry(aare_ruleset_t *dfarules, struct mnt_entry *entry)
>  
>  	if ((entry->allow & AA_MAY_MOUNT) && (entry->flags & MS_REMOUNT)
>  	    && !entry->device && !entry->dev_type) {
> +		int allow;
>  		/* remount can't be conditional on device and type */
>  		p = mntbuf;
>  		/* rule class single byte header */
> @@ -816,11 +817,31 @@ static int process_mnt_entry(aare_ruleset_t *dfarules, struct mnt_entry *entry)
>  		vec[3] = flagsbuf;
>  		if (!build_mnt_opts(optsbuf, PATH_MAX, entry->opts))
>  			goto fail;
> -		vec[4] = optsbuf;
> -		if (!aare_add_rule_vec(dfarules, entry->deny, entry->allow,
> -				       entry->audit, 5, vec, dfaflags))
> +
> +		if (entry->opts)
> +			allow = AA_MATCH_CONT;
> +		else
> +			allow = entry->allow;
> +
> +		/* rule for match without required data || data MATCH_CONT */
> +		if (!aare_add_rule_vec(dfarules, entry->deny, allow,
> +				       entry->audit | AA_AUDIT_MNT_DATA, 4,
> +				       vec, dfaflags))
>  			goto fail;
>  		count++;
> +
> +		if (entry->opts) {
> +			/* rule with data match required */
> +			if (!build_mnt_opts(optsbuf, PATH_MAX, entry->opts))
> +				goto fail;
> +			vec[4] = optsbuf;
> +			if (!aare_add_rule_vec(dfarules, entry->deny,
> +					       entry->allow,
> +					       entry->audit | AA_AUDIT_MNT_DATA,
> +					       5, vec, dfaflags))
> +				goto fail;
> +			count++;
> +		}
>  	}
>  	if ((entry->allow & AA_MAY_MOUNT) && (entry->flags & MS_BIND)
>  	    && !entry->dev_type && !entry->opts) {
> @@ -919,6 +940,7 @@ static int process_mnt_entry(aare_ruleset_t *dfarules, struct mnt_entry *entry)
>  	}
>  	if ((entry->allow & AA_MAY_MOUNT) &&
>  	    (entry->flags | entry->inv_flags) & ~MS_CMDS) {
> +		int allow;
>  		/* generic mount if flags are set that are not covered by
>  		 * above commands
>  		 */
> @@ -944,13 +966,31 @@ static int process_mnt_entry(aare_ruleset_t *dfarules, struct mnt_entry *entry)
>  		if (!build_mnt_flags(flagsbuf, PATH_MAX, flags, inv_flags))
>  			goto fail;
>  		vec[3] = flagsbuf;
> -		if (!build_mnt_opts(optsbuf, PATH_MAX, entry->opts))
> -			goto fail;
> -		vec[4] = optsbuf;
> -		if (!aare_add_rule_vec(dfarules, entry->deny, entry->allow,
> -				       entry->audit, 5, vec, dfaflags))
> +
> +		if (entry->opts)
> +			allow = AA_MATCH_CONT;
> +		else
> +			allow = entry->allow;
> +
> +		/* rule for match without required data || data MATCH_CONT */
> +		if (!aare_add_rule_vec(dfarules, entry->deny, allow,
> +				       entry->audit | AA_AUDIT_MNT_DATA, 4,
> +				       vec, dfaflags))
>  			goto fail;
>  		count++;
> +
> +		if (entry->opts) {
> +			/* rule with data match required */
> +			if (!build_mnt_opts(optsbuf, PATH_MAX, entry->opts))
> +				goto fail;
> +			vec[4] = optsbuf;
> +			if (!aare_add_rule_vec(dfarules, entry->deny,
> +					       entry->allow,
> +					       entry->audit | AA_AUDIT_MNT_DATA,
> +					       5, vec, dfaflags))
> +				goto fail;
> +			count++;
> +		}
>  	}
>  	if (entry->allow & AA_MAY_UMOUNT) {
>  		p = mntbuf;
> -- 
> 1.7.9.1
> 
> 
> -- 
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor

-- 
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: 836 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20120315/9078f610/attachment.pgp>


More information about the AppArmor mailing list