• David Howells's avatar
    watch_queue: Actually free the watch · 3d8dcf27
    David Howells authored
    free_watch() does everything barring actually freeing the watch object.  Fix
    this by adding the missing kfree.
    
    kmemleak produces a report something like the following.  Note that as an
    address can be seen in the first word, the watch would appear to have gone
    through call_rcu().
    
    BUG: memory leak
    unreferenced object 0xffff88810ce4a200 (size 96):
      comm "syz-executor352", pid 3605, jiffies 4294947473 (age 13.720s)
      hex dump (first 32 bytes):
        e0 82 48 0d 81 88 ff ff 00 00 00 00 00 00 00 00  ..H.............
        80 a2 e4 0c 81 88 ff ff 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff8214e6cc>] kmalloc include/linux/slab.h:581 [inline]
        [<ffffffff8214e6cc>] kzalloc include/linux/slab.h:714 [inline]
        [<ffffffff8214e6cc>] keyctl_watch_key+0xec/0x2e0 security/keys/keyctl.c:1800
        [<ffffffff8214ec84>] __do_sys_keyctl+0x3c4/0x490 security/keys/keyctl.c:2016
        [<ffffffff84493a25>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
        [<ffffffff84493a25>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
        [<ffffffff84600068>] entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Fixes: c73be61c ("pipe: Add general notification queue support")
    Reported-and-tested-by: syzbot+6e2de48f06cdb2884bfc@syzkaller.appspotmail.com
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    3d8dcf27
watch_queue.c 16.3 KB