]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
btrfs: scrub: put bio after errors in scrub_raid56_parity_stripe()
authorZilin Guan <zilin@seu.edu.cn>
Wed, 5 Nov 2025 03:53:21 +0000 (03:53 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Nov 2025 09:36:03 +0000 (10:36 +0100)
commit 5fea61aa1ca70c4b3738eebad9ce2d7e7938ebbd upstream.

scrub_raid56_parity_stripe() allocates a bio with bio_alloc(), but
fails to release it on some error paths, leading to a potential
memory leak.

Add the missing bio_put() calls to properly drop the bio reference
in those error cases.

Fixes: 1009254bf22a3 ("btrfs: scrub: use scrub_stripe to implement RAID56 P/Q scrub")
CC: stable@vger.kernel.org # 6.6+
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/scrub.c

index 9a6e0b047d3b637e3f52e34083d99c02770758e8..9f811ea604f712b86cbf49908a54628938e37e62 100644 (file)
@@ -2091,6 +2091,7 @@ static int scrub_raid56_parity_stripe(struct scrub_ctx *sctx,
        ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, full_stripe_start,
                              &length, &bioc, NULL, NULL);
        if (ret < 0) {
+               bio_put(bio);
                btrfs_put_bioc(bioc);
                btrfs_bio_counter_dec(fs_info);
                goto out;
@@ -2100,6 +2101,7 @@ static int scrub_raid56_parity_stripe(struct scrub_ctx *sctx,
        btrfs_put_bioc(bioc);
        if (!rbio) {
                ret = -ENOMEM;
+               bio_put(bio);
                btrfs_bio_counter_dec(fs_info);
                goto out;
        }