• Fedor Pchelkin's avatar
    apparmor: fix possible memory leak in unpack_trans_table · 1342ad78
    Fedor Pchelkin authored
    If we fail to unpack the transition table then the table elements which
    have been already allocated are not freed on error path.
    
    unreferenced object 0xffff88802539e000 (size 128):
      comm "apparmor_parser", pid 903, jiffies 4294914938 (age 35.085s)
      hex dump (first 32 bytes):
        20 73 6f 6d 65 20 6e 61 73 74 79 20 73 74 72 69   some nasty stri
        6e 67 20 73 6f 6d 65 20 6e 61 73 74 79 20 73 74  ng some nasty st
      backtrace:
        [<ffffffff81ddb312>] __kmem_cache_alloc_node+0x1e2/0x2d0
        [<ffffffff81c47194>] __kmalloc_node_track_caller+0x54/0x170
        [<ffffffff81c225b9>] kmemdup+0x29/0x60
        [<ffffffff83e1ee65>] aa_unpack_strdup+0xe5/0x1b0
        [<ffffffff83e20808>] unpack_pdb+0xeb8/0x2700
        [<ffffffff83e23567>] unpack_profile+0x1507/0x4a30
        [<ffffffff83e27bfa>] aa_unpack+0x36a/0x1560
        [<ffffffff83e194c3>] aa_replace_profiles+0x213/0x33c0
        [<ffffffff83de9461>] policy_update+0x261/0x370
        [<ffffffff83de978e>] profile_replace+0x20e/0x2a0
        [<ffffffff81eac8bf>] vfs_write+0x2af/0xe00
        [<ffffffff81eaddd6>] ksys_write+0x126/0x250
        [<ffffffff88f34fb6>] do_syscall_64+0x46/0xf0
        [<ffffffff890000ea>] entry_SYSCALL_64_after_hwframe+0x6e/0x76
    
    Call aa_free_str_table() on error path as was done before the blamed
    commit. It implements all necessary checks, frees str_table if it is
    available and nullifies the pointers.
    
    Found by Linux Verification Center (linuxtesting.org).
    
    Fixes: a0792e2c ("apparmor: make transition table unpack generic so it can be reused")
    Signed-off-by: default avatarFedor Pchelkin <pchelkin@ispras.ru>
    Signed-off-by: default avatarJohn Johansen <john.johansen@canonical.com>
    1342ad78
lib.c 11.1 KB