• Zhang Xiaoxu's avatar
    cifs: Fix pages leak when writedata alloc failed in cifs_write_from_iter() · f950c85e
    Zhang Xiaoxu authored
    There is a kmemleak when writedata alloc failed:
    
      unreferenced object 0xffff888175ae4000 (size 4096):
        comm "dd", pid 19419, jiffies 4296028749 (age 739.396s)
        hex dump (first 32 bytes):
          80 02 b0 04 00 ea ff ff c0 02 b0 04 00 ea ff ff  ................
          80 22 4c 04 00 ea ff ff c0 22 4c 04 00 ea ff ff  ."L......"L.....
        backtrace:
          [<0000000072fdbb86>] __kmalloc_node+0x50/0x150
          [<0000000039faf56f>] __iov_iter_get_pages_alloc+0x605/0xdd0
          [<00000000f862a9d4>] iov_iter_get_pages_alloc2+0x3b/0x80
          [<000000008f226067>] cifs_write_from_iter+0x2ae/0xe40
          [<000000001f78f2f1>] __cifs_writev+0x337/0x5c0
          [<00000000257fcef5>] vfs_write+0x503/0x690
          [<000000008778a238>] ksys_write+0xb9/0x150
          [<00000000ed82047c>] do_syscall_64+0x35/0x80
          [<000000003365551d>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    __iov_iter_get_pages_alloc+0x605/0xdd0 is:
      want_pages_array at lib/iov_iter.c:1304
      (inlined by) __iov_iter_get_pages_alloc at lib/iov_iter.c:1457
    
    If writedata allocate failed, the pages and pagevec should be cleanup.
    
    Fixes: 8c5f9c1a ("CIFS: Add support for direct I/O write")
    Reviewed-by: default avatarPaulo Alcantara (SUSE) <pc@cjr.nz>
    Signed-off-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
    Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
    f950c85e
file.c 134 KB