[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:43:46 UTC 2012
On Thu, Mar 15, 2012 at 12:36:37PM -0700, 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?
I should say, otherwise this patch looks OK.
> > +#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/
> --
> 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/4639e851/attachment.pgp>
More information about the AppArmor
mailing list