lkml.org 
[lkml]   [2019]   [Mar]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.0 010/262] apparmor: fix double free when unpack of secmark rules fails
    Date
    From: John Johansen <john.johansen@canonical.com>

    [ Upstream commit d8dbb581d4f86a2ac669c056fc71a28ebeb367f4 ]

    if secmark rules fail to unpack a double free happens resulting in
    the following oops

    [ 1295.584074] audit: type=1400 audit(1549970525.256:51): apparmor="STATUS" info="failed to unpack profile secmark rules" error=-71 profile="unconfined" name="/root/test" pid=29882 comm="apparmor_parser" name="/root/test" offset=120
    [ 1374.042334] ------------[ cut here ]------------
    [ 1374.042336] kernel BUG at mm/slub.c:294!
    [ 1374.042404] invalid opcode: 0000 [#1] SMP PTI
    [ 1374.042436] CPU: 0 PID: 29921 Comm: apparmor_parser Not tainted 4.20.7-042007-generic #201902061234
    [ 1374.042461] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
    [ 1374.042489] RIP: 0010:kfree+0x164/0x180
    [ 1374.042502] Code: 74 05 41 0f b6 72 51 4c 89 d7 e8 37 cd f8 ff eb 8b 41 b8 01 00 00 00 48 89 d9 48 89 da 4c 89 d6 e8 11 f6 ff ff e9 72 ff ff ff <0f> 0b 49 8b 42 08 a8 01 75 c2 0f 0b 48 8b 3d a9 f4 19 01 e9 c5 fe
    [ 1374.042552] RSP: 0018:ffffaf7b812d7b90 EFLAGS: 00010246
    [ 1374.042568] RAX: ffff91e437679200 RBX: ffff91e437679200 RCX: ffff91e437679200
    [ 1374.042589] RDX: 00000000000088b6 RSI: ffff91e43da27060 RDI: ffff91e43d401a80
    [ 1374.042609] RBP: ffffaf7b812d7ba8 R08: 0000000000027080 R09: ffffffffa6627a6d
    [ 1374.042629] R10: ffffd3af41dd9e40 R11: ffff91e43a1740dc R12: ffff91e3f52e8000
    [ 1374.042650] R13: ffffffffa6627a6d R14: ffffffffffffffb9 R15: 0000000000000001
    [ 1374.042675] FS: 00007f928df77740(0000) GS:ffff91e43da00000(0000) knlGS:0000000000000000
    [ 1374.042697] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 1374.042714] CR2: 000055a0c3ab6b50 CR3: 0000000079ed8004 CR4: 0000000000360ef0
    [ 1374.042737] Call Trace:
    [ 1374.042750] kzfree+0x2d/0x40
    [ 1374.042763] aa_free_profile+0x12b/0x270
    [ 1374.042776] unpack_profile+0xc1/0xf10
    [ 1374.042790] aa_unpack+0x115/0x4e0
    [ 1374.042802] aa_replace_profiles+0x8e/0xcc0
    [ 1374.042817] ? kvmalloc_node+0x6d/0x80
    [ 1374.042831] ? __check_object_size+0x166/0x192
    [ 1374.042845] policy_update+0xcf/0x1b0
    [ 1374.042858] profile_load+0x7d/0xa0
    [ 1374.042871] __vfs_write+0x3a/0x190
    [ 1374.042883] ? apparmor_file_permission+0x1a/0x20
    [ 1374.042899] ? security_file_permission+0x31/0xc0
    [ 1374.042918] ? _cond_resched+0x19/0x30
    [ 1374.042931] vfs_write+0xab/0x1b0
    [ 1374.042963] ksys_write+0x55/0xc0
    [ 1374.043004] __x64_sys_write+0x1a/0x20
    [ 1374.043046] do_syscall_64+0x5a/0x110
    [ 1374.043087] entry_SYSCALL_64_after_hwframe+0x44/0xa9

    Fixes: 9caafbe2b4cf ("apparmor: Parse secmark policy")
    Reported-by: Alex Murray <alex.murray@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    security/apparmor/policy_unpack.c | 1 +
    1 file changed, 1 insertion(+)

    diff --git a/security/apparmor/policy_unpack.c b/security/apparmor/policy_unpack.c
    index 379682e2a8d5..f6c2bcb2ab14 100644
    --- a/security/apparmor/policy_unpack.c
    +++ b/security/apparmor/policy_unpack.c
    @@ -579,6 +579,7 @@ static bool unpack_secmark(struct aa_ext *e, struct aa_profile *profile)
    kfree(profile->secmark[i].label);
    kfree(profile->secmark);
    profile->secmark_count = 0;
    + profile->secmark = NULL;
    }

    e->pos = pos;
    --
    2.19.1
    \
     
     \ /
      Last update: 2019-03-27 19:03    [W:4.149 / U:0.240 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site