diff mbox series

block: Fix a memory leak in bdev_open_by_dev()

Message ID 8eaec334781e695810aaa383b55de00ca4ab1352.1703439383.git.christophe.jaillet@wanadoo.fr (mailing list archive)
State New, archived
Headers show
Series block: Fix a memory leak in bdev_open_by_dev() | expand

Commit Message

Christophe JAILLET Dec. 24, 2023, 5:36 p.m. UTC
If we early exit here, 'handle' needs to be freed, or some memory leaks.

Fixes: ed5cc702d311 ("block: Add config option to not allow writing to mounted devices")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
---
The code could also be re-arranged to delay the memory allocation.
This would be cleaner IMHO.
---
 block/bdev.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Christoph Hellwig Dec. 26, 2023, 8:40 a.m. UTC | #1
Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
Jens Axboe Dec. 26, 2023, 4:27 p.m. UTC | #2
On 12/24/23 10:36 AM, Christophe JAILLET wrote:
> If we early exit here, 'handle' needs to be freed, or some memory leaks.

Reviewed-by: Jens Axboe <axboe@kernel.dk>
Christian Brauner Dec. 28, 2023, 10:48 a.m. UTC | #3
On Sun, 24 Dec 2023 18:36:42 +0100, Christophe JAILLET wrote:
> If we early exit here, 'handle' needs to be freed, or some memory leaks.
> 
> 

Applied to the vfs.super branch of the vfs/vfs.git tree.
Patches in the vfs.super branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.super

[1/1] block: Fix a memory leak in bdev_open_by_dev()
      https://git.kernel.org/vfs/vfs/c/8ff363ade395
diff mbox series

Patch

diff --git a/block/bdev.c b/block/bdev.c
index 6f73b02d549c..e9f1b12bd75c 100644
--- a/block/bdev.c
+++ b/block/bdev.c
@@ -830,8 +830,10 @@  struct bdev_handle *bdev_open_by_dev(dev_t dev, blk_mode_t mode, void *holder,
 		goto free_handle;
 
 	/* Blocking writes requires exclusive opener */
-	if (mode & BLK_OPEN_RESTRICT_WRITES && !holder)
-		return ERR_PTR(-EINVAL);
+	if (mode & BLK_OPEN_RESTRICT_WRITES && !holder) {
+		ret = -EINVAL;
+		goto free_handle;
+	}
 
 	bdev = blkdev_get_no_open(dev);
 	if (!bdev) {