]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:15:57 +0000 (16:15 +0200)
[ Upstream commit 3c252b087de08d3cb32468b54a158bd7ad0ae2f7 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/configfs/file.c

index 50b7c4c4310e07119b6fdfb6f5f55b23fd9cb9d3..38eb80e29715fda013a9ab5a6894f9a378b9b6d3 100644 (file)
@@ -496,13 +496,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;
 }