]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
jfs: fix metapage reference count leak in dbAllocCtl
authorZheng Yu <zheng.yu@northwestern.edu>
Tue, 29 Jul 2025 01:22:14 +0000 (01:22 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 10:13:57 +0000 (12:13 +0200)
[ Upstream commit 856db37592021e9155384094e331e2d4589f28b1 ]

In dbAllocCtl(), read_metapage() increases the reference count of the
metapage. However, when dp->tree.budmin < 0, the function returns -EIO
without calling release_metapage() to decrease the reference count,
leading to a memory leak.

Add release_metapage(mp) before the error return to properly manage
the metapage reference count and prevent the leak.

Fixes: a5f5e4698f8abbb25fe4959814093fb5bfa1aa9d ("jfs: fix shift-out-of-bounds in dbSplit")
Signed-off-by: Zheng Yu <zheng.yu@northwestern.edu>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/jfs/jfs_dmap.c

index 35e063c9f3a42e9db574f77a629f0fb961013ea1..5a877261c3fe4848870c8294725911d3d604c6ab 100644 (file)
@@ -1809,8 +1809,10 @@ dbAllocCtl(struct bmap * bmp, s64 nblocks, int l2nb, s64 blkno, s64 * results)
                        return -EIO;
                dp = (struct dmap *) mp->data;
 
-               if (dp->tree.budmin < 0)
+               if (dp->tree.budmin < 0) {
+                       release_metapage(mp);
                        return -EIO;
+               }
 
                /* try to allocate the blocks.
                 */