[PATCH 3/3] UBUNTU: SAUCE: AppArmor: allow newer tools to loadpolicyon older kernels
Tetsuo Handa
from-ubuntu at I-love.SAKURA.ne.jp
Thu Sep 16 12:37:31 UTC 2010
John Johansen wrote:
> On 09/15/2010 02:41 PM, Tetsuo Handa wrote:
> > John Johansen wrote:
> >> security/apparmor/policy_unpack.c | 3 ---
> >> 1 files changed, 0 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
> >> index 6b0637b..ef11ba9 100644
> >> --- a/security/apparmor/policy_unpack.c
> >> +++ b/security/apparmor/policy_unpack.c
> >> @@ -575,9 +575,6 @@ static struct aa_profile *unpack_profile(struct aa_ext *e)
> >>
> >> size = unpack_array(e, "net_allowed_af");
> >> if (size) {
> >> - if (size > AF_MAX)
> >> - goto fail;
> >> -
> >> for (i = 0; i < size; i++) {
> >> if (!unpack_u16(e, &profile->net.allow[i], NULL))
> >
> > If this patch changes to accept size > AF_MAX , this patch should change
> > to allocate net.allow[size] rather than net.allow[AF_MAX] .
> >
> >> goto fail;
>
> yes it should, I did make that change but it looks like I didn't push it
> to the remote repo from which I pulled :(
But allocating net.allow[size] is useless because kernel would reject before
calling LSM hooks if size > AF_MAX . Then, read and discard is sufficient?
--- a/security/apparmor/policy_unpack.c
+++ b/security/apparmor/policy_unpack.c
@@ -575,7 +575,7 @@
size = unpack_array(e, "net_allowed_af");
if (size) {
- for (i = 0; i < size; i++) {
+ for (i = 0; i < size && i < AF_MAX; i++) {
if (!unpack_u16(e, &profile->net.allow[i], NULL))
goto fail;
if (!unpack_u16(e, &profile->net.audit[i], NULL))
@@ -583,6 +583,20 @@
if (!unpack_u16(e, &profile->net.quiet[i], NULL))
goto fail;
}
+ /*
+ * A newer version of userspace tools might support more
+ * address families than this kernel supports. Read and discard
+ * address families which are not supported by this kernel.
+ */
+ for (; i < size; i++) {
+ u16 dummy;
+ if (!unpack_u16(e, &dummy, NULL))
+ goto fail;
+ if (!unpack_u16(e, &dummy, NULL))
+ goto fail;
+ if (!unpack_u16(e, &dummy, NULL))
+ goto fail;
+ }
if (!unpack_nameX(e, AA_ARRAYEND, NULL))
goto fail;
/*
More information about the kernel-team
mailing list