[Applied] [PATCH 1/2] AppArmor: fix the upper bound check for the next/check table
Brad Figg
brad.figg at canonical.com
Wed Dec 8 20:13:50 UTC 2010
On 12/06/2010 11:49 AM, Tim Gardner wrote:
> On 12/03/2010 03:14 PM, John Johansen wrote:
>> BugLink: http://bugs.launchpad.net/bugs/581525
>>
>> SRU Justification (apparmor)
>>
>> impact of the bug is medium for stable releases. There are two parts to
>> this bug: the kernel side OOPSing when a the parser generates invalid
>> tables, and the parser generating correct tables. The lucid kernel should
>> receive the fix sometime in the future, but the userspace should also be
>> fixed.
>>
>> The kernel bug was a broken test in verifying the dfa next/check table
>> size (so the userspace bug was not caught when it should have been). This
>> means that it can at times reference beyond the dfa table (by at most 255
>> entries).
>>
>> The userspace bug is that the next/check table is not correctly padded
>> with 0 entries, so that it is impossible to reference beyond the end of
>> the table when in the states that use the end of the table for their
>> references.
>>
>> The next/check table needs to be>= largest base value + 255 (byte range
>> being 0..255) to avoid any possible bounds violations. Fix the test which
>> incorrectly was testing that the next/check table + 256<= base values.
>>
>> Signed-off-by: John Johansen<john.johansen at canonical.com>
>> ---
>> security/apparmor/match.c | 4 +++-
>> 1 files changed, 3 insertions(+), 1 deletions(-)
>>
>> diff --git a/security/apparmor/match.c b/security/apparmor/match.c
>> index a3730e2..b456495 100644
>> --- a/security/apparmor/match.c
>> +++ b/security/apparmor/match.c
>> @@ -177,8 +177,10 @@ static int verify_dfa(struct aa_dfa *dfa, int flags)
>> if (DEFAULT_TABLE(dfa)[i]>= state_count)
>> goto out;
>> /* TODO: do check that DEF state recursion terminates */
>> - if (BASE_TABLE(dfa)[i]>= trans_count + 256)
>> + if (BASE_TABLE(dfa)[i] + 255>= trans_count) {
>> + printk("AppArmor DFA next/check upper bounds error\n");
>> goto out;
>> + }
>> }
>>
>> for (i = 0; i< trans_count; i++) {
>
> Matches the upstream code.
>
> Acked-by: Tim Gardner<tim.gardner at canonical.com>
>
Acked-by: Brad Figg <brad.figg at canonical.com>
Applied to Lucid master-next.
--
Brad Figg brad.figg at canonical.com http://www.canonical.com
More information about the kernel-team
mailing list