• Z
    cifs: Fix pages array leak when writedata alloc failed in cifs_writedata_alloc() · 4153d789
    Zhang Xiaoxu 提交于
    There is a memory leak when writedata alloc failed:
    
      unreferenced object 0xffff888192364000 (size 8192):
        comm "sync", pid 22839, jiffies 4297313967 (age 60.230s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<0000000027de0814>] __kmalloc+0x4d/0x150
          [<00000000b21e81ab>] cifs_writepages+0x35f/0x14a0
          [<0000000076f7d20e>] do_writepages+0x10a/0x360
          [<00000000d6a36edc>] filemap_fdatawrite_wbc+0x95/0xc0
          [<000000005751a323>] __filemap_fdatawrite_range+0xa7/0xe0
          [<0000000088afb0ca>] file_write_and_wait_range+0x66/0xb0
          [<0000000063dbc443>] cifs_strict_fsync+0x80/0x5f0
          [<00000000c4624754>] __x64_sys_fsync+0x40/0x70
          [<000000002c0dc744>] do_syscall_64+0x35/0x80
          [<0000000052f46bee>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    cifs_writepages+0x35f/0x14a0 is:
      kmalloc_array at include/linux/slab.h:628
      (inlined by) kcalloc at include/linux/slab.h:659
      (inlined by) cifs_writedata_alloc at fs/cifs/file.c:2438
      (inlined by) wdata_alloc_and_fillpages at fs/cifs/file.c:2527
      (inlined by) cifs_writepages at fs/cifs/file.c:2705
    
    If writedata alloc failed in cifs_writedata_alloc(), the pages array
    should be freed.
    
    Fixes: 8e7360f6 ("CIFS: Add support for direct pages in wdata")
    Signed-off-by: NZhang Xiaoxu <zhangxiaoxu5@huawei.com>
    Reviewed-by: NPaulo Alcantara (SUSE) <pc@cjr.nz>
    Signed-off-by: NSteve French <stfrench@microsoft.com>
    4153d789
file.c 134.1 KB