[apparmor] [PATCH 3/4] Update permission mapping for changes made to the upstream kernel patch.
John Johansen
john.johansen at canonical.com
Thu Mar 15 19:51:03 UTC 2012
On 03/15/2012 12:36 PM, Steve Beattie wrote:
> 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?
>
Yes that was deliberate, I suppose I should have made one reference the other
>> +#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
>
>
>
More information about the AppArmor
mailing list