]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.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)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 13 Aug 2021 07:31:32 +0000 (09:31 +0200)
BugLink: https://bugs.launchpad.net/bugs/1938340
[ 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>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
fs/configfs/file.c

index da8351d1e455209150954bf6cc002e5643d97870..4d0825213116a4ca800172ebdd1d21babc948aff 100644 (file)
@@ -482,13 +482,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;
 }