configfs: fix memleak in configfs_release_bin_file
authorChung-Chiang Cheng <shepjeng@gmail.com>
Fri, 18 Jun 2021 07:59:25 +0000 (15:59 +0800)
committerChristoph Hellwig <hch@lst.de>
Tue, 22 Jun 2021 07:46:26 +0000 (09:46 +0200)
When reading binary attributes in progress, buffer->bin_buffer is setup in
configfs_read_bin_file() but never freed.

Fixes: 03607ace807b4 ("configfs: implement binary attributes")
Signed-off-by: Chung-Chiang Cheng <cccheng@synology.com>
[hch: move the vfree rather than duplicating it]
Signed-off-by: Christoph Hellwig <hch@lst.de>
fs/configfs/file.c

index 53913b8..3964183 100644 (file)
@@ -407,13 +407,13 @@ static int configfs_release_bin_file(struct inode *inode, struct file *file)
                                        buffer->bin_buffer_size);
                }
                up_read(&frag->frag_sem);
-               /* vfree on NULL is safe */
-               vfree(buffer->bin_buffer);
-               buffer->bin_buffer = NULL;
-               buffer->bin_buffer_size = 0;
-               buffer->needs_read_fill = 1;
        }
 
+       vfree(buffer->bin_buffer);
+       buffer->bin_buffer = NULL;
+       buffer->bin_buffer_size = 0;
+       buffer->needs_read_fill = 1;
+
        configfs_release(inode, file);
        return 0;
 }