• Tyler Hicks's avatar
    ima: Free the entire rule when deleting a list of rules · 465aee77
    Tyler Hicks authored
    Create a function, ima_free_rule(), to free all memory associated with
    an ima_rule_entry. Use the new function to fix memory leaks of allocated
    ima_rule_entry members, such as .fsname and .keyrings, when deleting a
    list of rules.
    
    Make the existing ima_lsm_free_rule() function specific to the LSM
    audit rule array of an ima_rule_entry and require that callers make an
    additional call to kfree to free the ima_rule_entry itself.
    
    This fixes a memory leak seen when loading by a valid rule that contains
    an additional piece of allocated memory, such as an fsname, followed by
    an invalid rule that triggers a policy load failure:
    
     # echo -e "dont_measure fsname=securityfs\nbad syntax" > \
        /sys/kernel/security/ima/policy
     -bash: echo: write error: Invalid argument
     # echo scan > /sys/kernel/debug/kmemleak
     # cat /sys/kernel/debug/kmemleak
     unreferenced object 0xffff9bab67ca12c0 (size 16):
       comm "bash", pid 684, jiffies 4295212803 (age 252.344s)
       hex dump (first 16 bytes):
         73 65 63 75 72 69 74 79 66 73 00 6b 6b 6b 6b a5  securityfs.kkkk.
       backtrace:
         [<00000000adc80b1b>] kstrdup+0x2e/0x60
         [<00000000d504cb0d>] ima_parse_add_rule+0x7d4/0x1020
         [<00000000444825ac>] ima_write_policy+0xab/0x1d0
         [<000000002b7f0d6c>] vfs_write+0xde/0x1d0
         [<0000000096feedcf>] ksys_write+0x68/0xe0
         [<0000000052b544a2>] do_syscall_64+0x56/0xa0
         [<000000007ead1ba7>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes: f1b08bbc ("ima: define a new policy condition based on the filesystem name")
    Fixes: 2b60c0ec ("IMA: Read keyrings= option from the IMA policy")
    Signed-off-by: default avatarTyler Hicks <tyhicks@linux.microsoft.com>
    Signed-off-by: default avatarMimi Zohar <zohar@linux.ibm.com>
    465aee77
ima_policy.c 45.2 KB